我有两个MySQL用户:
mysql_user_1创建了一个运行getRecord(int uid_of_record)
的存储过程SELECT * FROM TABLE WHERE uid=?
。 mysql_user_2
可以在没有SELECT
权限的情况下执行该存储过程吗?
答案 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
。