web-dev-qa-db-ja.com

MySQLストアドプロシージャのアクセス許可

ユーザーにデータベース内のストアドプロシージャの実行を許可するのではなく、MySQLデータベースのストアドプロシージャレベルでストアドプロシージャを実行する権限をユーザーに与えようとしています。私は次のコードを実行しようとしました:

GRANT EXECUTE ON myDB.spName TO 'TestUser'@'localhost';

しかし、次のエラーが発生し続けます:

Illegal GRANT/REVOKE command, please consult the manual to see which privileges can be used.

次のように変更してみました:

GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost';

そして、別のエラーが表示されます:

Cant find any matching rows in the user table.

私はどこが間違っているのか混乱していますか?

また、MySQLワークベンチでは、GUIを介してストアドプロシージャレベルで権限を付与する方法を見つけることができないようです。これは正しいですか、何か不足していますか?

前もって感謝します。

20
Olly

2番目の試みは正しいアプローチです。

GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost';

しかし、それが機能しない場合は、確認してください...

a)あなた(これらすべてのコマンドを実行しているユーザー)に付与権限があります(つまりWITH GRANT OPTION)。あなたがrootである場合、付与権限があります。

b)実行許可を付与するユーザーが存在する.

 select user from mysql.user where user  like  'test%';

そうでない場合は、ユーザーを作成します。

CREATE USER 'TestUser'@'localhost' IDENTIFIED BY 'passwordxxxx';
#depending on your needs
GRANT SELECT,DELETE,UPDATE PRIVILEGES ON myDb.* TO 'TestUser'@'localhost'; 

お役に立てれば :)

33
sakhunzai

MySQL Workbenchに関するあなたの質問の他の部分に答えるために、私は同じ問題を抱えていました。しかし、実験の後、ロールを作成し、下部の特権タブを開くと、モデルの概要からオブジェクトボックスにルーチンをドラッグできることを発見しました。そこから、新しく追加されたオブジェクトをクリックして、そのロールに必要な権限を追加します。

それが役立つことを願っています:)

2
Shane E. Bryan