【问题标题】:Allow non-SELECT permission user to run MySQL stored procedure which has SELECT query允许非 SELECT 权限用户运行具有 SELECT 查询的 MySQL 存储过程
【发布时间】:2017-03-03 22:42:02
【问题描述】:
我有两个 MySQL 用户:
- mysql_user_1
- mysql_user_2(仅限EXECUTE权限)
mysql_user_1 创建了一个运行SELECT * FROM TABLE WHERE uid=? 的存储过程getRecord(int uid_of_record)。 mysql_user_2 可以在没有SELECT 权限的情况下执行该存储过程吗?
【问题讨论】:
标签:
mysql
stored-procedures
【解决方案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。