MySQL:我如何允许用户B在不给用户A全局选择权限的情况下修改用户A的过程?
所以,最初的问题是,在MySQL Workbench中,我试图改变过程,但什么都没有得到。没有错误,只是什么也没发生。事实证明,尽管由于存储过程的定义者不是我,所以我拥有模式的完全权限,但我无法查看它的源代码 情景:MySQL:我如何允许用户B在不给用户A全局选择权限的情况下修改用户A的过程?,mysql,stored-procedures,user-permissions,Mysql,Stored Procedures,User Permissions,所以,最初的问题是,在MySQL Workbench中,我试图改变过程,但什么都没有得到。没有错误,只是什么也没发生。事实证明,尽管由于存储过程的定义者不是我,所以我拥有模式的完全权限,但我无法查看它的源代码 情景: Database: Bugs Users: A, B Permissions: grant all privileges on bugs.* to 'A'@'%' grant all privileges on bugs.* to 'B'@'%' 用户A创建一个存储过程 cre
Database: Bugs
Users: A, B
Permissions:
grant all privileges on bugs.* to 'A'@'%'
grant all privileges on bugs.* to 'B'@'%'
用户A创建一个存储过程
create procedure user_A_procedure ...
我们现在有一个过程用户\u a\u prodecure,其定义者设置为a@%
将安全类型设置为DEFINER
字符集客户端:utf8
排序规则\u连接:utf8\u常规\u ci
数据库排序规则:utf8\u常规\u ci
问题是,用户B希望能够编辑过程,因为他们没有访问原始源的权限,但他们不能。在MySQL Workbench中,当他们尝试更改过程时,什么都不会发生,在命令提示符下,他们看不到源代码
mysql> SHOW CREATE PROCEDURE user_A_procedure
Procedure: user_A_procedure
sql_mode:
Create Procedure: NULL
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
这不会像执行源代码的用户那样返回源代码,而是返回NULL
事实证明,要使用MySQL Workbench或SHOW CREATE PROCEDURE查看另一个定义者的存储过程,必须向用户授予全局选择权限[1]
全局选择让用户能够读取每个数据库中的所有内容,这不是一个理想的选项
所以我的问题是:我如何允许用户A查看/更改用户B的过程而不给他们全局选择权限
参考资料:
MySQL 8.0文档的外观发生了更改,并包含一个错误 此语句是MySQL扩展。它返回的字符串与 可用于重新创建命名存储过程。相似的 语句,SHOW CREATE函数,显示有关存储 函数见第13.7.6.8节“显示创建函数语法” 要使用任一语句,您必须具有全局选择权限 来源 vs MySQL 5.7文档 此语句是MySQL扩展。它返回的字符串与 可用于重新创建命名存储过程。相似的 语句,SHOW CREATE函数,显示有关存储 函数见第13.7.5.8节“显示创建函数语法” 要使用任一语句,您必须是例程中指定的用户 DEFINER子句或具有对mysql.proc表的SELECT访问权限。如果你 没有例程本身的权限,该值显示为 “创建过程”或“创建函数”字段将为空
来源全局选择权限?您确定用户不仅需要mysql.proc上的select权限吗?因为基本上我假设该语句只从mysql.proc读取。这很有效,谢谢。你想添加这个作为答案吗?我注意到MySQL 5.7文档从一开始就有正确的答案。。有时候在MySQL文档中更改MySQL版本是很有用的,谢谢。这正是我遵循的您强调的语句。mysql中不再存在表'mysql.proc'。我签入了mysql 8.0。无法找到任何方法将alter SP权限授予非定义者的用户。我必须授予全局选择权限。这就是mysql 8.0中的工作方式。表'mysql.proc'在mysql中已经不存在了,所以必须给非定义者的用户全局选择权限来更改过程。
mysql> SHOW CREATE PROCEDURE user_A_procedure
Procedure: user_A_procedure
sql_mode:
Create Procedure: NULL
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci