it-swarm.com.ru

Требуется ли "определитель" при создании хранимой процедуры?

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

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

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

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

23
Xorty

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

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

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

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

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

1
Ghulam Dastagir - Yasir

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

SQL SECURITY INVOKER

Пример:

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

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

0
MonkeyFeeder