Итак, первоначальная проблема заключалась в том, что в MySQL Workbench я пытался изменить процедуру и ничего не получил. Нет ошибок, просто ничего не произошло. Получается, что, несмотря на наличие полных разрешений для схемы, поскольку определяющим элементом хранимой процедуры является не я, я не могу просмотреть ее исходный код.
Сценарий:
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:
character_set_client: utf8
collation_connection: utf8_general_ci
Сортировка базы данных: utf8_general_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
Это не возвращает исходный код, как если бы это выполнял пользователь A, вместо этого он возвращает NULL.
Оказывается, что для использования MySQL Workbench или SHOW CREATE PROCEDURE для просмотра хранимой процедуры другого определителя пользователю необходимо предоставить разрешение GLOBAL SELECT [1].
GLOBAL SELECT дает пользователю возможность читать все в каждой базе данных и НЕ является желательным вариантом.
Итак, мой вопрос: как я могу разрешить пользователю A просматривать / изменять процедуру пользователя B без предоставления ему разрешения GLOBAL SELECT?
Ссылки:
- 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