tags: mysql PROCEDURE 存储过程 definer SECURITY 权限
以下存储过程,限定了DEFINER为root,也就是root之外的账户是无法调用这个存储过程的。
1 2 3 4 5 6 | CREATE DEFINER=`root`@`%` PROCEDURE `ProcName`( IN param INT( 16 ) ) BEGIN ... END |
在数据库的mysql库,proc表中,可以查看到存储过程的信息。
其中有一个列名为definer,就记录了root@%。
注意到其中有一项列名为security_type,默认值为DEFINER。
也就是设置安全类型为DEFINER列中所定义得值。
security_type的值还可以设置为INVOKER,可以让所有账户调用该存储过程。
为了实现以上效果,我们可以在存错过程中添加一句话:
SQL SECURITY INVOKER 。
添加后格式如下:
1 2 3 4 5 6 7 | CREATE DEFINER=`root`@`%` PROCEDURE `ProcName`( IN param INT( 16 ) ) SQL SECURITY INVOKER BEGIN ... END |