允许非SELECT权限用户运行具有SELECT查询的MySQL存储过程

时间:2017-03-03 22:42:03

标签: mysql stored-procedures

我有两个MySQL用户:

  • mysql_user_1
  • mysql_user_2(仅限EXECUTE权限)

mysql_user_1创建了一个运行getRecord(int uid_of_record)的存储过程SELECT * FROM TABLE WHERE uid=?mysql_user_2可以在没有SELECT权限的情况下执行该存储过程吗?

1 个答案:

答案 0 :(得分:1)

这在MySQL文档Access Control for Stored Programs and Views中有详细解释。

可以使用以下任一项定义存储过程:

SQL SECURITY DEFINER

SQL SECURITY INVOKER

如果它是DEFINER,则该过程使用定义该过程的用户的权限执行;在您的情况下,如果mysql_user_1具有SELECT权限,则此过程适用于mysql_user_2

如果它是INVOKER,则该过程将使用运行该过程的用户的权限执行。在这种情况下,该程序不会对mysql_user_2起作用。

如果您在此过程中没有此条款,则默认为DEFINER