最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何撤销用户对MySQL存储过程的执行权限
时间:2026-09-01 13:25:49 编辑:袖梨 来源:一聚教程网
必须写全数据库名和PROCEDURE关键字,正确语法为REVOKE EXECUTE ON PROCEDURE mydb.get_employee_info FROM 'user'@'host';省略库名或关键字均报错,且需确保host完全匹配、过程名大小写准确。
REVOKE EXECUTE ON PROCEDURE 语法必须带数据库名
直接写 REVOKE EXECUTE ON get_employee_info FROM 'user'@'host' 会报错,MySQL 要求存储过程权限必须明确指定数据库上下文。省略库名时,语句会被解析为全局级权限,而 EXECUTE 对存储过程不支持全局粒度。
正确写法是:REVOKE EXECUTE ON PROCEDURE mydb.get_employee_info FROM 'user'@'host'。其中 mydb 是该存储过程实际创建所在的数据库名,不能填 * 或留空。
- 如果过程在
test库里,就必须写test.get_employee_info -
PROCEDURE关键字不可省略,写成ON get_employee_info会触发语法错误 - 用户 host 部分必须完全匹配授权时的值(如
'user'@'10.0.0.%'≠'user'@'%')
撤销后需 FLUSH PRIVILEGES 才生效吗?
多数情况下不需要。MySQL 8.0+ 和 5.7 后期版本中,REVOKE 语句执行成功即刻生效,权限表(mysql.procs_priv)已同步更新。
但以下两种情况仍需手动刷新:
- 使用了旧版 MySQL(如 5.6 或更早),且未启用动态权限加载机制
- 撤销的是通过
GRANT ... WITH GRANT OPTION授出的权限链,下游用户的缓存可能未及时失效
稳妥起见,可追加 FLUSH PRIVILEGES,但不是必须步骤;更推荐用 SHOW GRANTS FOR 'user'@'host' 立即验证结果。
撤销权限失败的常见错误现象
执行 REVOKE 后提示 ERROR 1142 (42000): EXECUTE command denied to user,通常不是权限不足,而是当前会话用户没权限操作 mysql 系统库或 procs_priv 表。
真正容易卡住的点:
-
user不存在或 host 不匹配 —— 先查SELECT user, host FROM mysql.user WHERE user = 'xxx' - 存储过程名拼写错误或大小写不一致(Linux 下文件系统敏感,过程名也区分大小写)
- 目标过程根本不在指定库中 —— 用
SELECT db, name FROM mysql.proc WHERE name = 'get_employee_info'确认归属 - 用户有
EXECUTE权限但来自GRANT OPTION继承,此时需先 revoke 上游再 revoke 当前
撤销后调用存储过程仍成功?检查权限继承路径
即使显式 REVOKE EXECUTE ON PROCEDURE mydb.p1 FROM 'u'@'%',用户仍可能执行成功,原因往往是权限来自更高层级:
- 该用户拥有
EXECUTE全局权限(GRANT EXECUTE ON *.* TO ...) - 该用户属于某个角色(role),而角色被授予了
EXECUTE权限 - 该用户对整个
mydb数据库有EXECUTE权限(GRANT EXECUTE ON mydb.* TO ...)
查清真实来源:运行 SHOW GRANTS FOR 'u'@'%',逐条核对输出中是否含更宽泛的 EXECUTE 授权项。只撤单一过程权限,挡不住“面”级或“体”级授权。
相关文章
- Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么) 09-06
- Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题) 09-06
- Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能) 09-06
- 一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍) 09-06
- tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析) 09-06
- Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题) 09-06