Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

На что влияет адрес хоста у создателя подпрограммы в MySQL?

#mysql


На что влияет адрес хоста у создателя подпрограммы в MySQL? Например, при создании
подпрограммы (хранимой процедуры, функции, триггера и т.д.) определяется создатель
подпрограммы (DEFINER):

CREATE DEFINER = 'admin'@'localhost' PROCEDURE p1()
SQL SECURITY DEFINER
BEGIN
  UPDATE t1 SET counter = counter + 1;
END;


На что тогда влияет адрес? Например, что бы изменилось, если бы вместо 'admin'@'localhost'
тут было 'admin'@'%'?
    


Ответы

Ответ 1



DEFINER просто говорит базе, какой контекст безопасности использовать при выполнении процедуры. Если он стоит как DEFINER - привилегии берутся для аккаунта, который создал процедуру, а если стоит INVOKER - то тогда привилегии, как у того, кто вызвал. CREATE DEFINER = 'admin'@'localhost' PROCEDURE p1() SQL SECURITY DEFINER BEGIN UPDATE t1 SET counter = counter + 1; END; Любой пользователь, который имеет привилегию EXECUTE на над процедурой p1 может вызвать ее с помощью оператора CALL. Однако, когда p1 выполняется, она делает это в контексте безопасности DEFINER и, следовательно, выполняется с привилегиями 'admin'@'localhost' , учетной записи, указанной в атрибуте DEFINER. Эта учетная запись должна иметь привилегию EXECUTE для p1 , а также UPDATE привилегии для таблицы t1 . В противном случае, процедура не выполняется из-за отсутствия достаточных привилегий. Адрес говорит вам о том, что будут использованы привелегии определенные для пользователя 'admin'@'localhost. Тоесть пользователя admin который подключается с localhost, в MYSQL разграничение доступа осуществляется по имени пользователя и адресу с которого идет подключение, для пользователя admin с localhost можно установить GRANT ALL а для других хостов только SELECT например. Пользователи 'admin'@'localhost' и 'admin'@'%' - это совершенно разные аккаунты.

Комментариев нет:

Отправить комментарий