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 字段配合起来看,才能发现计划外的转授链。