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

允许非SELECT权限用户运行具有SELECT查询的MySQL存储过程,mysql,stored-procedures,Mysql,Stored Procedures,我有两个MySQL用户: mysql\u用户\u 1 mysql\u用户\u 2仅执行权限 mysql_user_1创建了一个存储过程getRecordint uid_of_record,它运行一个SELECT*FROM表,其中uid=?。mysql\u user\u 2是否可以在没有选择权限的情况下执行该存储过程?mysql文档对此进行了详细解释 存储过程可以通过以下任一方式定义: SQL SECURITY DEFINER 或 如果是DEFINER,则该过程在定义该过程的用户的权限下执行;在

我有两个MySQL用户:

mysql\u用户\u 1 mysql\u用户\u 2仅执行权限
mysql_user_1创建了一个存储过程getRecordint uid_of_record,它运行一个SELECT*FROM表,其中uid=?。mysql\u user\u 2是否可以在没有选择权限的情况下执行该存储过程?

mysql文档对此进行了详细解释

存储过程可以通过以下任一方式定义:

SQL SECURITY DEFINER

如果是DEFINER,则该过程在定义该过程的用户的权限下执行;在您的例子中,如果mysql\u用户\u 1具有SELECT权限,则该过程将适用于mysql\u用户\u 2

如果是调用程序,则该过程将使用运行该过程的用户的权限执行。在这种情况下,该过程不适用于mysql_用户_2


如果您在过程中没有此子句,它将默认为DEFINER。

您尝试过并找到了吗?@tadman Barmar的答案非常完美!
SQL SECURITY INVOKER