MySQL权限 - 即使使用'CREATE ROUTINE'授权也无法创建函数

时间:2010-10-22 14:46:50

标签: mysql mysql-error-1044

当连接到我的服务器(来自不同的机器)时,我得到了

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 个答案:

答案 0 :(得分:5)

我认为CREATE FUNCTIONCREATE ROUTINE分开。但无论如何,因为看起来你的用户无论如何都可以完全访问:

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

但是我会注意到将'%'设置为'localhost'并且仅以这种方式从本地计算机(或至少是可信IP)访问数据库会好得多。缺乏安全性可能会给您带来麻烦。

绝对不要使用此用户名/密码从Web脚本连接到数据库!

修改 我忘记了:例程和函数必须被授予全局。添加会尝试将授权添加到表本身,这就是它无效的原因。尝试:

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

这里有更长的描述:http://dev.mysql.com/doc/refman/5.0/en/grant.html