Подтвердить что ты не робот

При создании хранимой процедуры требуется `definer`?

Я написал все процедуры MySQL как [email protected]:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...)

Проблема при развертывании на другой сервер, я должен заменить root на текущего пользователя и заменить localhost на текущий IP, что раздражает.

Есть ли способ написать процедуры, чтобы кто-то, кто хочет использовать мою базу данных и процедуры, не должен был изменять определитель каждой процедуры?

4b9b3361

Ответ 1

Как указано в документации MySQL здесь

CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body

Итак, часть DEFINER не является обязательной, просто должна работать CREATE PROCEDURE.

Ответ 2

CREATE DEFINER=[your_web_user]@% PROCEDURE p_add_user(...)

Проверьте это.. возможно, это поможет вам, если вы хотите определить пользователя в своей процедуре...

Ответ 3

Вы можете указать права выполнения, добавив следующий оператор в тело процедуры (после объявления):

SQL SECURITY INVOKER

Пример:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)

Таким образом, применяются фактические привилегии вызывающего и часть DEFINER опущена (даже если она автоматически добавляется при импорте схемы). Полное упоминание здесь: https://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html