「ロックダウン」されている mysql サーバーにユーザー「restricteduser」を作成しました。mysql.user テーブルには、そのアカウントのすべての特権に N があります。mysql.db テーブルには、Select、Insert、Update、Delete、Create、Drop のみ Y があります。そのアカウントの他のすべての権限は N です。ストアド プロシージャを作成し、そのプロシージャのみを実行するアクセス権を彼に付与しようとしましたが、機能しません。
エラー: ルーチン 'mydb.functionname' のユーザー 'restricteduser'@'%' に対して実行コマンドが拒否されました。
ストアド プロシージャ:
CREATE DEFINER = 'restriceduser'@'%' FUNCTION `functionname`(sIn MEDIUMTEXT, sformat MEDIUMTEXT)
RETURNS int(11)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
....
END;
私が試したグラントステートメント:
GRANT EXECUTE ON PROCEDURE mydb.functionname TO 'restricteduser'@'%';
彼の mysql.db エントリを次のように変更することで回避できました
update mysql.db set execute_priv='Y' where user='restricteduser'
これは、指定された関数を実行する権限だけを彼に持たせたいだけでしたが、そのデータベースでストアドプロシージャを実行する権限を彼に与えるため、私が望む以上のようです。
私の問題がどこにあるのか誰にもわかりますか?