Разрешения MySQL - нельзя создавать функции даже с грантом "CREATE ROUTINE"
При подключении к моему серверу (с другой машины) я получаю
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 ответ
Я думаю, что есть CREATE FUNCTION
это отдельно от CREATE ROUTINE
, Но в любом случае, так как похоже, что у вашего пользователя есть полный доступ 100%, вы можете сделать:
GRANT ALL PRIVILEGES ON *.* TO user@'%' INDENTIFIED BY 'password' WITH GRANT OPTION
Однако я хотел бы отметить, что было бы намного лучше установить для "%" значение "localhost" и таким образом обращаться к базе данных только с локальной машины (или, по крайней мере, с доверенного IP-адреса). Отсутствие безопасности может привести к неприятностям.
Определенно не используйте этот пользователь / пароль для подключения к базе данных из веб-скрипта!
Редактировать Я забыл: процедуры и функции должны быть предоставлены во всем мире. Добавление пытается добавить грант к самим таблицам, поэтому он не работает. Пытаться:
GRANT ALTER ROUTINE,CREATE ROUTINE, EXECUTE ON * TO user@'%' IDENTIFIED BY 'password'
Здесь есть более подробное описание: http://dev.mysql.com/doc/refman/5.0/en/grant.html