MySQL 存储过程权限

Posted

技术标签:

【中文标题】MySQL 存储过程权限【英文标题】:MySQL Stored Procedure Permissions 【发布时间】:2012-04-22 18:37:59 【问题描述】:

我试图授予用户在 mysql 数据库的存储过程级别运行存储过程的权限,而不是允许用户执行数据库中的任何存储过程。我试图执行以下代码:

GRANT EXECUTE ON myDB.spName TO 'TestUser'@'localhost';

但我不断收到以下错误:Illegal GRANT/REVOKE command, please consult the manual to see which privileges can be used.

我尝试将其更改为以下内容:

GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost';

我得到一个不同的错误说明:Cant find any matching rows in the user table.

我很困惑我哪里出错了?

在 MySQL Workbench 上,我似乎看不到任何通过 GUI 在存储过程级别授予权限的方法。这是正确的还是我遗漏了什么?

提前致谢。

【问题讨论】:

【参考方案1】:

您的第二次尝试是正确的方法:

GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost';

但如果这不起作用,请验证...

a) 您(运行所有这些命令的用户)拥有授予权限 [即带有授予选项]。如果您是 root,那么您就有授权。

b) 您授予执行权限的用户存在,例如

 select user from mysql.user where user  like  'test%';

如果没有,则创建用户,例如

CREATE USER 'TestUser'@'localhost' IDENTIFIED BY 'passwordxxxx';
#depending on your needs
GRANT SELECT,DELETE,UPDATE PRIVILEGES ON myDb.* TO 'TestUser'@'localhost'; 

希望这会有所帮助:)

【讨论】:

我以root身份登录,运行代码时用户存在:select user from mysql.user where user like 'test%';但我似乎仍然遇到同样的错误。 尝试按照我的建议添加新用户并授予该用户执行权限 再试一次密码:GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost' identified by 'password'; 添加“通过'密码'识别;”到最后工作!非常感谢!【参考方案2】:

为了回答您关于 MySQL Workbench 的问题的另一部分,我遇到了同样的问题。但是在实验之后我发现如果你创建一个角色并打开底部的权限选项卡,你可以将例程从模型概述拖到对象框中。从那里只需单击新添加的对象并为该角色添加所需的权限。

希望对你有帮助:)

【讨论】:

【参考方案3】:

我找到了这段代码:授予存储过程的权限

USE [Database];   

GRANT EXECUTE ON OBJECT::[dbo].[your stored procedure]
    TO databaseUser; 

从此页面:docs.microsoft.com

【讨论】:

以上是关于MySQL 存储过程权限的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程

Java学习总结(十七)——MySQL数据库存储过程,触发器,数据库权限,数据库设计三大范式

MySQL 存储过程-definer和invoker的解释

创建和运行存储过程的权限

JDBC连接执行MySQL存储过程报权限错误

mysql 存储过程执行异常,参数不是出参