一、許可權相關:
1.修改sql security
Sql代碼
ALTER PROCEDURE www SQL SECURITY INVOKER ;
ALTER PROCEDURE www SQL SECURITY DEFINER ;
1)MySQL預存程序是通過指定SQL SECURITY子句指定執行預存程序的實際使用者;
2)如果SQL SECURITY子句指定為DEFINER,預存程序將使用預存程序的DEFINER執行預存程序,驗證調用預存程序的使用者是否具有預存程序的execute許可權和DEFINER使用者是否具有預存程序引用的相關對象的許可權;
3)如果SQL SECURITY子句指定為INVOKER,那麼MySQL將使用當前調用預存程序的使用者執行此過程,並驗證使用者是否具有預存程序的execute許可權和預存程序引用的相關對象的許可權;
4)如果不顯示的指定SQL SECURITY子句,MySQL預設將以DEFINER執行預存程序。
3.執行預存程序授權
Sql代碼
GRANT EXECUTE ON PROCEDURE test.* TO 'wtc'@'%';
GRANT CREATE ROUTINE,ALTER ROUTINE, SELECT,CREATE, INSERT, UPDATE, DELETE, EXECUTE ON test.* TO 'wtc'@'%' IDENTIFIED BY '111111'
CREATE ROUTINE : 建立預存程序的許可權
ALTER ROUTINE : 修改預存程序的許可權
二、實驗:
session 1:
mysql> show grants for ly@'%';
| Grants for ly@%
| GRANT USAGE ON *.* TO 'ly'@'%' IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257'
mysql> show create procedure hhl.pr_param_in\G
*************************** 1. row ***************************
Procedure: pr_param_in
sql_mode:
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `pr_param_in`(
in id int
)
SQL SECURITY DEFINER
begin
INSERT INTO hhl.t VALUES(1,'hhl');
end
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: utf8_general_ci
1 row in set (0.00 sec)
grant execute on procedure hhl.pr_param_in to 'ly'@'%';
session 2:
mysql -uly -p123 -h 1.1.1.5
mysql> call hhl.pr_param_in(1);
Query OK, 1 row affected (0.00 sec)
上面 SQL SECURITY=DEFINER,ly 使用者調用預存程序是以DEFINER=`root`@`localhost`,即檢查調用者ly是否具有預存程序的execute許可權和DEFINER使用者(`root`@`localhost`)是否具有預存程序引用的相關對象的許可權.
*如果SQL SECURITY =INVOKER
session 1 :
mysql> ALTER PROCEDURE hhl.pr_param_in SQL SECURITY INVOKER;
Query OK, 0 rows affected (0.00 sec)
mysql> show create procedure hhl.pr_param_in\G
*************************** 1. row ***************************
Procedure: pr_param_in
sql_mode:
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `pr_param_in`(
in id int
)
SQL SECURITY INVOKER
begin
INSERT INTO hhl.t VALUES(1,'hhl');
end
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: utf8_general_ci
1 row in set (0.00 sec)
session 2 :
mysql> call hhl.pr_param_in(1);
ERROR 1142 (42000): INSERT command denied to user 'ly'@'node5' for table 't'
上面 SQL SECURITY=INVOKER,ly 使用者調用預存程序,即檢查ly是否具有預存程序的execute許可權和是否有預存程序引用的相關對象的許可權. ly 使用者確實沒有對 hhl 庫下的t 表insert許可權。
本文出自 “My DBA life” 部落格,請務必保留此出處http://huanghualiang.blog.51cto.com/6782683/1216786