Разрешения MySQL - не могут создавать функции даже с грантом CREATE ROUTINE. - PullRequest
3 голосов
/ 22 октября 2010

При подключении к моему серверу (с другого компьютера) я получаю

Error Code: 1044 Access denied for user 'username'@'%' to database 'dbname'

при попытке создать функцию.Но когда я смотрю на свои разрешения

SHOW GRANTS FOR CURRENT_USER;

, я получаю

'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE ROUTINE ON *.* TO ''username''@''%'' IDENTIFIED BY PASSWORD ''--stripped--'' WITH GRANT OPTION'

В частности, это включает CREATE ROUTINE.Почему я не могу сделать функцию?Как я могу изменить это, чтобы я мог?

1 Ответ

5 голосов
/ 22 октября 2010

Я думаю, что есть CREATE FUNCTION, который отделен от CREATE ROUTINE.Но в любом случае, так как ваш пользователь в любом случае имеет полный доступ на 100%, вы можете сделать:

GRANT ALL PRIVILEGES ON *.* TO user@'%' INDENTIFIED BY 'password' WITH GRANT OPTION

Однако я хотел бы отметить, что было бы гораздо лучше установить для '%' значение 'localhost' и толькополучить доступ к базе данных таким способом с локального компьютера (или хотя бы с доверенного IP-адреса).Отсутствие безопасности может привести к неприятностям.

Определенно не используйте этот пользователь / пароль для подключения к базе данных из веб-скрипта!

Редактировать Iзабыл: процедуры и функции должны быть предоставлены глобально .Добавление . пытается добавить грант к самим таблицам, поэтому он не работает.Попробуйте:

GRANT ALTER ROUTINE,CREATE ROUTINE, EXECUTE ON * TO user@'%' IDENTIFIED BY 'password'

Более подробное описание здесь: http://dev.mysql.com/doc/refman/5.0/en/grant.html

...