2009-08-13 2 views
0

Я создал пользовательский «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' 

Это, кажется, больше, чем я хочу, потому что он открывает разрешения для запуска любой хранимой процедуры в этой базе данных, в то время как я только хотел, чтобы у него были разрешения на запуск указанной функции.

Кто-нибудь видит, где может быть моя проблема?

ответ

0

Для таблицы пользователя для ограниченного пользователя, которую вы создали , потребуется выполнить execute_priv = 'Y'. Этот грант заменяет грант db.

+0

В таблице пользователя определенно не должно быть execute_priv = 'Y'. Дело в том, чтобы ограничить доступ, а не расширять его. Я вижу таблицу procs_priv, которая, по-видимому, должна появиться, когда этот доступ должен появиться, а не в пользовательских или db-таблицах. Я не задавал такого рода вещи, но синтаксис гранта выглядит правдоподобным. Я предполагаю, что «limiteduser» @ «%» не соответствует записи в таблице db, которая использовалась для аутентификации подключения пользователей? – mc0e