mysql 'SHOW CREATE PROCEDURE' 的权限?

Kyl*_*yle 2 mysql stored-procedures permissions

我正在创建一个“只读”的 mysql 数据库。我希望用户能够看到所有内容,但不能修改任何内容。我的用户目前拥有以下授权:

GRANT USAGE ON . TO 'sqlprostudio-ro'@'%' IDENTIFIED BY PASSWORD '*x'
GRANT SELECT, EXECUTE, SHOW VIEW ON northwind.* TO 'sqlprostudio-ro'@'%'
Run Code Online (Sandbox Code Playgroud)

我可以看到存储过程,但是如果我运行:

SHOW CREATE PROCEDURE x
Run Code Online (Sandbox Code Playgroud)

“创建过程”列返回空值。有没有一种方法可以让只读用户看到创建过程而不能修改它?

小智 5

man的第二行说:

要使用任一语句,您必须是例程 DEFINER 子句中指定的用户,或者对 mysql.proc 表具有 SELECT 访问权限。如果您没有例程本身的权限,则为“创建过程”或“创建函数”字段显示的值将为 NULL。

另一个选项(只是一个建议)您可以设计一个程序或功能(最好)来显示有问题的信息。

问候,


Kel*_*ang 5

从 MySQL 8.0.20 开始,不再添加全局 SELECT 权限(太宽泛),而是添加新的 SHOW_ROUTINE 权限:

GRANT SHOW_ROUTINE ON *.* TO <USER>@<LOCATION>;
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚从 8.0.12 升级到 8.0.27,但在尝试“将 SHOW_ROUTINE ON 数据库授予 SHOW_ROUTINE_”时,我仍然看到“_ERROR 3619 (HY000):为 SHOW_ROUTINE_ 指定非法权限级别。* TO ...” -有任何想法吗?它适用于“*.*”——我们可以不将其限制为一个数据库吗? (2认同)
  • AFAIK 这是一个全有或全无。比“SELECT on *.*”好得多,但仍然不理想。 (2认同)