На что влияет адрес хоста у создателя подпрограммы в MySQL? Например, при создании подпрограммы (хранимой процедуры, функции, триггера и т.д.) определяется создатель подпрограммы (DEFINER):
CREATE DEFINER = 'admin'@'localhost' PROCEDURE p1()
SQL SECURITY DEFINER
BEGIN
UPDATE t1 SET counter = counter + 1;
END;
На что тогда влияет адрес? Например, что бы изменилось, если бы вместо 'admin'@'localhost' тут было 'admin'@'%'?
Ответ
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'@'%' - это совершенно разные аккаунты.
Комментариев нет:
Отправить комментарий