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
04-14 17:42