MySQL存储过程权限

34

我想让一个用户在MySQL数据库中运行存储过程时,只有在存储过程级别上才能具备权限,而不是允许用户在数据库中执行任何存储过程。我尝试执行以下代码:

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

但我一直收到以下错误:

非法的 GRANT/REVOKE 命令,请参阅手册查看可用的权限。

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

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

我得到不同的错误消息:

在用户表中找不到任何匹配行。

我很困惑我错在哪里了?

此外,在MySQL Workbench上,我似乎无法通过GUI在存储过程级别上授予权限。这是正确的还是我漏了什么?

提前致谢。

3个回答

54

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

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

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

a) 您(运行所有这些命令的用户)具有授予权限 [即 WITH GRANT OPTION]。 如果您是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%';时,用户确实存在,但我仍然似乎遇到了相同的错误。 - Olly
尝试按照我的建议添加新用户,并授予该用户执行权限。 - sakhunzai
4
再试一次密码:GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost' IDENTIFIED BY 'password';,意思是授予用户'TestUser'@'localhost'对'myDB.spName'存储过程的执行权限,并使用密码'password'进行身份验证。 - sakhunzai
在末尾添加“Identified by 'password';”就行了!非常感谢! - Olly

5
为了回答你关于 MySQL Workbench 的问题,我也遇到过类似的问题。但是在尝试后,我发现如果你创建一个角色并打开底部的权限标签页,你可以将模型概述中的例程拖动到对象框中。然后只需要点击新添加的对象,并为该角色添加所需的权限即可。
希望这能帮到你 :)

1
我发现了这段代码:授予存储过程的权限
USE [Database];   

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

从这个页面获取:

来自此页面:learn.microsoft.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接