是否可以向用户授予权限,使他们可以执行服务器上的所有存储过程(甚至在该服务器上的单个数据库中)。查看授权语法文档(5.5),它说我必须grant execute on procedure <dbname>.<procname> to ....
对每个存储过程执行此操作。有没有办法通过操作 mysql db 本身来更轻松地完成此操作?
答案1
grant execute on <dbname>.*
“程序”一词应被删除。
答案2
对于针对数据库定义的任何用户权限,mydb
运行以下命令:
UPDATE mysql.db SET execute_priv='Y' WHERE db = 'mydb';
FLUSH PRIVILEGES;
首先,查看是否有任何用户定义mysql.db
在
SELECT COUNT(1) FROM mysql.db;
如果没有任何用户拥有数据库级权限,则给他们。如果您想授予每个用户针对数据库运行存储过程的能力mydb
,请运行此
INSERT INTO mysql.db (Host,db,user,Select_priv,Insert_priv,Update_priv
Delete_priv,Create_priv,Drop_priv,Grant_priv,
References_priv,Index_priv,Alter_priv,Create_tmp_table_priv
Lock_tables_priv,Create_view_priv,Show_view_priv,Create_routine_priv
Alter_routine_priv,Execute_priv,Event_priv,Trigger_priv
SELECT Host,'mydb',user,Select_priv,Insert_priv,Update_priv
Delete_priv,Create_priv,Drop_priv,Grant_priv,
References_priv,Index_priv,Alter_priv,Create_tmp_table_priv
Lock_tables_priv,Create_view_priv,Show_view_priv,Create_routine_priv
Alter_routine_priv,'Y',Event_priv,Trigger_priv
FROM mysql.user;
FLUSH PRIVILEGES;
注意我设置了:
- Execute_priv 为“Y”
- db 到 'mydb'