mysqlストレージ・プロシージャ権限の問題
5616 ワード
インポート・ライブラリの開発に協力したとき、ライブラリにはストレージ・プロシージャの定義があることを注意してくれました.--routinesのオプションを使用しましたが、インポート時に問題が発生しました.
1.ヒント:このストレージ・プロシージャを作成できません.ログを開くのを忘れました.bin_trust_function_creators変数、
set global log_bin_trust_function_creators=on; その後、正常に作成され、サーバからもこの操作が必要になります.
はい、バイナリ・ログがROWであれば、このストレージ・プロシージャが上からあっても呼び出されません.
2.インポートが成功すると、呼び出せない問題が発生し、検索しました.http://www.2cto.com/database/201403/288436.htmlこの文章は,この問題を記録している.definerをuserとして作成adminのストアド・プロシージャ
2.ユーザーを作成し、関連する権限を付与
3.user_を使うtestはmysqlに接続し、さっき作成したprocedureを実行します.
4.このように見るのは権限の問題です.彼に表を操作する方法しか与えられていないからです.itopのexecute権限を追加
5.このユーザー接続Mysqlを再使用して、先ほど定義したストレージ・プロシージャを実行します.
ストアド・プロシージャを呼び出すことができますが、ストアド・プロシージャ定義のdefinerが存在しないことを示します.
MySQLサーバに接続しているユーザーだけがストレージ・プロシージャを実行する権限を持っているとは十分ではありません.
最終的には、ストレージ・プロシージャ定義で指定したdefinerによってストレージ・プロシージャを実行します.
6.user_と言うadminが存在しない場合はuser_を作成しますadminというユーザー
7.user_testユーザー接続Mysqlを再使用して、先ほど定義したストレージ・プロシージャを実行
8.MySQLサーバに接続されているユーザーだけでなく、ストアド・プロシージャ定義者もこの権限を必要としているようです.
9.「user_test」ユーザー接続Mysqlを再使用して、先ほど定義したストレージ・プロシージャを実行
実行できる
1.ヒント:このストレージ・プロシージャを作成できません.ログを開くのを忘れました.bin_trust_function_creators変数、
set global log_bin_trust_function_creators=on; その後、正常に作成され、サーバからもこの操作が必要になります.
はい、バイナリ・ログがROWであれば、このストレージ・プロシージャが上からあっても呼び出されません.
2.インポートが成功すると、呼び出せない問題が発生し、検索しました.http://www.2cto.com/database/201403/288436.htmlこの文章は,この問題を記録している.
mysql> DELIMITER //
mysql> CREATE DEFINER='user_admin' PROCEDURE num1()
-> BEGIN
-> SELECT COUNT(id) FROM itopserver;
-> END //
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> DELIMITER ;
2.ユーザーを作成し、関連する権限を付与
mysql> create user user_itop identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant select,insert,delete,update on itop.* to 'user_test'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user_test@'%';
+---------------------------------------------------------------------+
| Grants for user_test@% |
+---------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_test'@'%' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `itop`.* TO 'user_test'@'%' |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
3.user_を使うtestはmysqlに接続し、さっき作成したprocedureを実行します.
mysql> call num1;
ERROR 1370 (42000): execute command denied to user 'user_test'@'%' for routine 'itop.num1'
4.このように見るのは権限の問題です.彼に表を操作する方法しか与えられていないからです.itopのexecute権限を追加
mysql> grant execute on itop.* to user_test@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user_test@'%';
+----------------------------------------------------------------------------------------------------------+
| Grants for user_test@% |
+----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_test'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `itop`.* TO 'user_test'@'%' |
+----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
5.このユーザー接続Mysqlを再使用して、先ほど定義したストレージ・プロシージャを実行します.
mysql> use itop;
mysql> call num1();
ERROR 1449 (HY000): The user specified as a definer ('user_admin'@'%') does not exist
ストアド・プロシージャを呼び出すことができますが、ストアド・プロシージャ定義のdefinerが存在しないことを示します.
MySQLサーバに接続しているユーザーだけがストレージ・プロシージャを実行する権限を持っているとは十分ではありません.
最終的には、ストレージ・プロシージャ定義で指定したdefinerによってストレージ・プロシージャを実行します.
6.user_と言うadminが存在しない場合はuser_を作成しますadminというユーザー
mysql> grant select,insert,delete,update on itop.* to 'user_admin'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user_admin@'%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for user_admin@% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_admin'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `itop`.* TO 'user_admin'@'%' |
+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
7.user_testユーザー接続Mysqlを再使用して、先ほど定義したストレージ・プロシージャを実行
mysql> use itop;
mysql> call num1();
ERROR 1370 (42000): execute command denied to user 'user_admin'@'%' for routine 'itop.num1'
8.MySQLサーバに接続されているユーザーだけでなく、ストアド・プロシージャ定義者もこの権限を必要としているようです.
mysql> grant execute on itop.* to 'user_admin'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for user_admin;
+-----------------------------------------------------------------------------------------------------------+
| Grants for user_admin@% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user_admin'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `itop`.* TO 'user_admin'@'%' |
+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
9.「user_test」ユーザー接続Mysqlを再使用して、先ほど定義したストレージ・プロシージャを実行
mysql> use itop;
mysql> call num1();
+-----------+
| COUNT(id) |
+-----------+
| 372 |
+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
実行できる