您好,欢迎访问一九零五行业门户网

MySQL存储过程权限检查主要点

一、权限相关:1.修改sqlsecuritysql代码alterprocedurewwwsqlsecurityinvoker;alterprocedurewwwsqlsecuri..
一、权限相关:
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” 博客,请务必保留此出处
其它类似信息

推荐信息