mysql:我怎样才能允许用户b在不给用户global select权限的情况下修改用户a的过程呢?

uemypmqf  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(270)

所以,最初的问题是,在mysql工作台中,我试图改变过程,但一无所获。没有错误,只是什么都没发生。事实证明,尽管由于存储过程的定义者不是我,所以我拥有模式的完全权限,但我无法查看它的源代码。
脚本:

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 ...

我们现在有一个程序 user_A_prodecure 你是谁 definer 设置为 A@%security_type 设置为 DEFINER ```
mysql> SHOW PROCEDURE STATUS\G
Db: bugs
Name: user_A_prodecure
Type: PROCEDURE
Definer: A@%
Modified: 2018-10-26 10:30:06
Created: 2018-10-26 10:30:06
Security_type: DEFINER
Comment:

字符集\客户端:utf8排序规则\连接:utf8\常规\ ci数据库排序规则:utf8\常规\ ci
问题是,用户b希望能够编辑这个过程(他们不能访问原始源代码),但是他们不能。在mysqlworkbench中,当他们尝试更改过程时,什么都不会发生,在命令提示符下,他们看不到源代码

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查看另一个定义者的存储过程,用户必须获得global select权限[1]。
global select使用户能够读取每个数据库中的所有内容,这不是一个理想的选择。
所以我的问题是:我如何允许用户a在不给他们全局选择权限的情况下查看/更改用户b的过程?
参考文献:
https://dev.mysql.com/doc/refman/8.0/en/show-create-procedure.html
https://dev.mysql.com/doc/refman/8.0/en/stored-programs-security.html
3hvapo4f

3hvapo4f1#

mysql 8.0文档的外观发生了变化,并且包含一个错误。
此语句是mysql扩展。它返回可用于重新创建命名存储过程的确切字符串。类似的语句show create function显示有关存储函数的信息(请参阅第13.7.6.8节“show create function语法”)。
要使用任一语句,必须具有全局选择权限。
来源https://dev.mysql.com/doc/refman/8.0/en/show-create-procedure.html
与MySQL5.7文档对比。
此语句是mysql扩展。它返回可用于重新创建命名存储过程的确切字符串。类似的语句show create function显示有关存储函数的信息(请参阅第13.7.5.8节“show create function语法”)。
要使用任一语句,您必须是routinedefiner子句中指定的用户,或者对mysql.proc表具有select访问权限。如果您没有例程本身的权限,则为create procedure或create function字段显示的值将为null。
来源https://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html

相关问题