当前位置:首页 > 问答 > 正文

数据库管理|权限控制|MySQL授权系统五大核心表解析

MySQL授权系统探秘:五大核心表背后的权限江湖

场景引入
凌晨三点,你的手机突然狂震——线上数据库报警,某个新来的实习生误操作删了用户表,你一边骂骂咧咧地爬起来,一边疑惑:"这账号哪来的删表权限?" 别急,今天我们就掀开MySQL权限系统的底裤,看看那五个掌控生杀大权的核心表,如何像江湖门派一样管理着数据库的"武功秘籍"。


user表:武林盟主的账本

作用:记录所有用户的全局权限(比如能不能开山立派)

-- 典型字段示例
SELECT Host,User,Select_priv,Shutdown_priv FROM mysql.user;

关键点

  • 这里存放的是"跨数据库"的特权,比如SHUTDOWN权限能让用户直接关闭MySQL服务器
  • Host字段和User字段组合才是唯一ID——这意味着root@localhostroot@%是两个完全不同的账号
  • 新版MySQL(8.0+)的密码加密方式也藏在这里,看到authentication_string字段了吗?那就是你的"武林秘钥"

实战坑点
某次故障排查发现,开发同事在user表给自己开了GRANT OPTION权限,结果他转头就给自己加了数据库管理员权限...(建议用SHOW GRANTS命令定期审计)


db表:分舵主的档案库

作用:控制用户对特定数据库的权限(比如华山派弟子能不能进藏经阁)

-- 查看谁有test库的写权限
SELECT * FROM mysql.db WHERE Db='test' AND Insert_priv='Y';

运行逻辑
当用户操作数据库时,MySQL会先查user表,如果没找到全局权限,就来找db表——好比武林盟主不管的事,就交给地方分舵处理。

数据库管理|权限控制|MySQL授权系统五大核心表解析

经典场景
给外包团队开临时权限时,千万别在user表给全局权限,而是在db表精确到库:

GRANT SELECT ON project_temp.* TO 'outsource'@'192.168.%';

tables_priv表:藏经阁长老的明细账

作用:控制表级权限(九阴真经》这本秘籍谁能看)

-- 查看哪些用户有特殊表权限
SELECT * FROM mysql.tables_priv WHERE Table_name='salary';

特色功能

  • 可以精确控制SELECTINSERT等操作
  • 还能通过Grantor字段看到是谁给的权限(追责神器)

血泪教训
某财务系统把salary表的UPDATE权限单独授予HR总监,结果忘了回收前HR总监的权限...(所以离职审计别忘了查这个表!)


columns_priv表:秘籍里的禁招标记

作用:列级权限控制(葵花宝典》第一页禁止阅读)

-- 检查敏感列的权限
SELECT * FROM mysql.columns_priv WHERE Column_name='id_card';

适用场景

数据库管理|权限控制|MySQL授权系统五大核心表解析

  • 允许查看员工表,但隐藏salary
  • 允许录入订单,但禁止修改create_time字段

骚操作预警
有黑客会利用information_schema结合这个表的漏洞来探测表结构,记得定期检查异常授权!


procs_priv表:独门心法管控

作用:存储过程和函数的执行权限(比如降龙十八掌只能传给丐帮弟子)

-- 查看存储过程权限
SELECT * FROM mysql.procs_priv WHERE Routine_name='calculate_bonus';

特别注意

  • 执行存储过程需要EXECUTE权限
  • 生产环境经常漏管这里,导致存储过程被恶意调用

权限江湖生存指南

  1. 定期巡检:用这个SQL查所有权限分配
    SELECT * FROM mysql.user WHERE User NOT IN ('root','mysql.sys');
  2. 最小权限原则:就像少林寺扫地的也可能是高手,给权限够用就行
  3. 密码策略:在user表设置password_expired强制定期换密码
  4. 权限回收陷阱:直接改表数据后记得FLUSH PRIVILEGES,但更推荐用REVOKE语句

最后的大招
遇到权限混乱时,用这个命令看最终生效权限:

SHOW GRANTS FOR 'dev_user'@'%';

(本文技术细节基于MySQL 8.0版本,最后检查时间2025年8月)

发表评论