web-dev-qa-db-ja.com

ストアドプロシージャに対するMySQLユーザー権限

簡単なストアドプロシージャを作成しました。

mysql> CREATE FUNCTION hello (s CHAR(20))
    -> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected, 1 warning (0.00 sec)

しかし、実行に失敗しました:

mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'

ユーザー名が空の文字列である可能性はありますか?ユーザーを作成して権限を付与するにはどうすればよいですか?データベース内のすべてのエンティティに対するすべての権限をユーザーに付与できますか?

8
Adam Matan

エラーメッセージ自体がユーザーに実行権限がないことを示しているため

mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'

そのユーザーに実行権限を付与する必要があります。そのためには、rootユーザーとしてログインし、権限をとして付与する必要があります。

 grant execute on db.* to user@localhost;

他のクエリの場合:

  1. はいユーザー名が空の文字列である可能性がありますが、このようなユーザーを作成することは安全ではありません。

  2. 簡単に特権を作成して付与するには、 このリンクを参照してください。

  3. はい、データベース内のすべてのエンティティに対するすべての特権を付与できます。このため、次のようなコマンドを実行できます

Rootユーザーとしてログインし、コマンドを発行します

GRANT ALL ON DB_NAME.* TO 'USER'@'Host' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
3
Abdul Manaf