Я создал пользовательский «restriceduser» на моем сервере mysql, который «заблокирован». В таблице mysql.user есть N для всех личных прав для этой учетной записи. В таблице mysql.db есть Y только для выбора, вставки, обновления, удаления, создания, удаления; все остальные привилегии - N для этой учетной записи. Я попытался создать хранимую процедуру, а затем предоставил ему доступ для запуска только этой процедуры, никаких других, но она не работает.Значение Execute_priv в таблице mysql.db
Пользователь получает: Ошибка: выполнить команду отказано пользователю 'restricteduser' @ '%' для рутинного '' mydb.functionname
Хранимая процедура:
CREATE DEFINER = 'restriceduser'@'%' FUNCTION `functionname`(sIn MEDIUMTEXT, sformat MEDIUMTEXT)
RETURNS int(11)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
....
END;
Грант заявление я попытался:
GRANT EXECUTE ON PROCEDURE mydb.functionname TO 'restricteduser'@'%';
Я был в состоянии работать вокруг, изменяя его запись mysql.db с
update mysql.db set execute_priv='Y' where user='restricteduser'
Это, кажется, больше, чем я хочу, потому что он открывает разрешения для запуска любой хранимой процедуры в этой базе данных, в то время как я только хотел, чтобы у него были разрешения на запуск указанной функции.
Кто-нибудь видит, где может быть моя проблема?
В таблице пользователя определенно не должно быть execute_priv = 'Y'. Дело в том, чтобы ограничить доступ, а не расширять его. Я вижу таблицу procs_priv, которая, по-видимому, должна появиться, когда этот доступ должен появиться, а не в пользовательских или db-таблицах. Я не задавал такого рода вещи, но синтаксис гранта выглядит правдоподобным. Я предполагаю, что «limiteduser» @ «%» не соответствует записи в таблице db, которая использовалась для аутентификации подключения пользователей? – mc0e