Разрешения хранимой процедуры MySQL
Я пытаюсь предоставить пользователю право запускать хранимую процедуру на уровне хранимой процедуры в базе данных MySQL, а не позволять пользователю выполнять любую хранимую процедуру в базе данных. Я пытался выполнить следующий код:
GRANT EXECUTE ON myDB.spName TO 'TestUser'@'localhost';
Но я продолжаю получать следующую ошибку:
Illegal GRANT/REVOKE command, please consult the manual to see which privileges can be used.
Я попытался изменить его на следующее:
GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost';
И я получаю другую ошибку, заявляя:
Cant find any matching rows in the user table.
Я смущен, когда я ошибаюсь?
Кроме того, в Workbench MySQL я не вижу способа предоставить разрешения на уровне хранимой процедуры через графический интерфейс. Это правильно или я что-то не хватает?
Спасибо заранее.
Ответы
Ответ 1
Ваша вторая попытка - правильный подход:
GRANT EXECUTE ON PROCEDURE myDB.spName TO 'TestUser'@'localhost';
но если это не работает, проверьте...
а) вы (пользователь, от имени которого вы запускаете все эти команды) имеете права на предоставление [т.е. с опцией предоставления]. Если вы root, значит, у вас есть права.
b) существует пользователь, которому вы предоставляете разрешение на выполнение, например
select user from mysql.user where user like 'test%';
Если нет, то создайте пользователя, например
CREATE USER 'TestUser'@'localhost' IDENTIFIED BY 'passwordxxxx';
#depending on your needs
GRANT SELECT,DELETE,UPDATE PRIVILEGES ON myDb.* TO 'TestUser'@'localhost';
Надеюсь это поможет :)
Ответ 2
Чтобы ответить на другую часть вашего вопроса относительно MySQL Workbench, у меня была такая же проблема. Но после эксперимента я обнаружил, что если вы создадите роль и откройте вкладку привилегий внизу, вы можете перетащить эту процедуру из Обзор модели в поле объектов. Оттуда просто нажмите на вновь добавленный объект и добавьте разрешения, которые вы хотите для этой роли.
Надеюсь, что это поможет:)
Ответ 3
Неверный Syntex.Try:
USE YourDatabasename;
GRANT EXECUTE ON OBJECT::YourProcedure
TO YourRole;
Подробнее см. http://msdn.microsoft.com/en-us/library/ms188371.aspx