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


8

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

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'

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

回答:


3

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

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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.