MySQL預存程序許可權檢查主要點

來源:互聯網
上載者:User

一、許可權相關:

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=INVOKERly 使用者調用預存程序,即檢查ly是否具有預存程序的execute許可權和是否有預存程序引用的相關對象的許可權. ly 使用者確實沒有對 hhl 庫下的t 表insert許可權。

本文出自 “My DBA life” 部落格,請務必保留此出處http://huanghualiang.blog.51cto.com/6782683/1216786

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.