【问题标题】: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 权限的情况下执行该存储过程吗?

【问题讨论】:

  • 你试过了吗?
  • @tadman Barmar 的回答非常完美!

标签: 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

【讨论】:

    猜你喜欢
    • 2010-12-26
    • 2018-01-28
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2011-06-28
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多