如何配置MySQL授予存储过程执行权限以应用于具体应用场景?
- 内容介绍
- 文章标签
- 相关推荐
本文共计861个文字,预计阅读时间需要4分钟。
MySQL的`EXECUTE`权限不是授予存储过程名,而是授予数据库或整体过程的执行能力。直接对用户执行以下命令会报错:
- 要授给整个库:用
GRANT EXECUTE ON database_name.* TO 'user'@'host' - 要授给单个过程:用
GRANT EXECUTE ON PROCEDURE database_name.procedure_name TO 'user'@'host'(注意PROCEDURE关键字和点号分隔) - 如果只给
SELECT权限,哪怕过程里只查表,用户也无法调用——EXECUTE是独立权限,不继承表级权限
调用时提示 “EXECUTE command denied” 怎么排查?
常见原因不是没给 EXECUTE,而是权限对象写错了。比如创建过程时用了 CREATE PROCEDURE mydb.p1,但授的是 GRANT EXECUTE ON mydb.* —— 这能用;可如果过程在 testdb,而你授的是 mydb.*,就完全无效。
本文共计861个文字,预计阅读时间需要4分钟。
MySQL的`EXECUTE`权限不是授予存储过程名,而是授予数据库或整体过程的执行能力。直接对用户执行以下命令会报错:
- 要授给整个库:用
GRANT EXECUTE ON database_name.* TO 'user'@'host' - 要授给单个过程:用
GRANT EXECUTE ON PROCEDURE database_name.procedure_name TO 'user'@'host'(注意PROCEDURE关键字和点号分隔) - 如果只给
SELECT权限,哪怕过程里只查表,用户也无法调用——EXECUTE是独立权限,不继承表级权限
调用时提示 “EXECUTE command denied” 怎么排查?
常见原因不是没给 EXECUTE,而是权限对象写错了。比如创建过程时用了 CREATE PROCEDURE mydb.p1,但授的是 GRANT EXECUTE ON mydb.* —— 这能用;可如果过程在 testdb,而你授的是 mydb.*,就完全无效。

