首页/数据/数据库速查/管理员账号与委托授权(GRANT OPTION)

管理员账号与委托授权(GRANT OPTION)

GRANT OPTION 允许把权限继续转授;委托管理常见于多团队共用实例,但必须限制范围并记录,否则权限扩散不可控。

数据库速查数据更新于 2026-10-13

GRANT OPTION 是授权的能力

GRANT OPTION 允许持有者把同一范围内的权限继续转授给别人,相当于发一张「授权代理」凭证。它让团队负责人自管本库账号,省去每次审批;代价是权限可能沿转授链扩散,而撤销时要按链回溯。范围与责任人不明确时,它是权限审计里最难收口的一类授权。

基本信息

适用平台MySQL 5.7 / 8.0,MariaDB 语法一致
语法GRANT 权限 ON 范围 TO 账号 WITH GRANT OPTION
撤销REVOKE GRANT OPTION ON 范围 FROM 账号
绑定关系与所授权限的范围绑定,不跨库生效
查看方式SHOW GRANTS 中带 WITH GRANT OPTION 字样
转授痕迹mysql 各权限表的 Grantor 字段记录谁授的

典型使用场景

  • 业务团队自管本库账号,DBA 只保留实例级底座权限
  • 外包或供应商接入期间临时委托,项目结束整体回收
  • 开发、预发等多环境由各环境负责人维护各自库授权
  • 数据平台给分析师授可转授的只读权限,减少重复工单
  • 值班交接期间避免每条授权都等人审批

委托与回收

委托与回收
# 只给单库范围内可转授的权限,范围收窄
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'team-lead'@'10.0.%' WITH GRANT OPTION;

# 盘点所有可转授的库级授权
SELECT grantee, table_schema, privilege_type, is_grantable
FROM information_schema.schema_privileges WHERE is_grantable = 'YES';

# 撤销转授能力,注意历史转授不会自动收回
REVOKE GRANT OPTION ON appdb.* FROM 'team-lead'@'10.0.%';

# 找出由谁转授出去的权限,逐个回收
SELECT user, host, db, Grantor FROM mysql.db WHERE Grantor LIKE 'team-lead%';
SELECT user, host, db, table_name, Grantor FROM mysql.tables_priv WHERE Grantor LIKE 'team-lead%';

要点与风险

要点说明风险
转授范围仅限语句声明的库或表范围跨库转授需另有授权
撤销行为撤销 GRANT OPTION 不影响已授出的权限必须按 Grantor 回溯清理
审计可查性看 mysql 权限表的 Grantor 字段多级转授后难追溯
替代方案8.0 角色配 WITH ADMIN OPTION授权更整齐但需重建模型
账号清理离职账号的转授链要一并处理漏清理会留下可用后门
把 GRANT OPTION 当受控的授权代理来管:只给限定库、限定来源网段、有明确责任人的账号。定期审计时把 SHOW GRANTS 与 mysql.db、mysql.tables_priv 的 Grantor 字段配合起来看,才能发现计划外的转授链。

易错点

  • 以为撤销自己的 GRANT OPTION 就收回了权限:之前转授出去的授权仍然有效,必须按 Grantor 逐个回收
  • 把整库的 WITH GRANT OPTION 授给外包:对方能转授给任意账号,包括已经离职的旧账号
  • 多级转授后无从追溯「谁授的」:权限审计只能看到最终持有者,责任无法定位
  • 把 GRANT OPTION 与 SUPER 等底座权限混授:相当于交出实例控制权,越权面被显著放大
  • 交接只记账号不记转授关系:人员变动后新负责人不知道还有哪些账号握有转授能力

数据来源与参考

  • MySQL 8.0 Reference Manual: GRANT Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌