面试官一出手股市配资行情,我就感到不对劲
那天是个阳光明媚的下午,我拎着电脑,穿着干净的白T,带着一丝自信,一丝紧张,走进了面试间。前面三轮已经顺利通过,我满心以为接下来的HR面就是走个流程,结果面试官一坐下,翻开笔记本,语气轻松但一脸认真地说:
“我们聊聊MySQL吧。你知道MySQL中关于权限管理的系统表都有哪些吗?”
我当场一愣,脑中浮现出几个表名,但也只是模糊印象。
什么user、db、tables_priv……还有一个columns_priv?还是procs_priv?
我当时只答出了一半,勉强过关,但心里暗想:这个题,得好好总结总结。于是这篇文章就诞生了,今天我们来搞清楚——MySQL里权限相关的系统表到底有哪些,它们分别管理什么权限?
MySQL权限机制是怎么设计的?
讲表之前,我们先来看看MySQL是怎么进行权限验证的。
整个过程其实很像你刷门禁卡的流程:
1、你是谁?(身份认证)
MySQL 会先根据用户名、主机地址来判断你能不能连上来。这个过程主要依赖于mysql.user表。
2、你能干嘛?(权限验证)
连上来之后,再根据你的权限,判断你能不能执行某条SQL语句,比如查询、插入、删除某张表。
这就是MySQL中最典型的两步权限验证流程。
而MySQL为了能控制得更细,提供了从全局权限到库级、表级、列级、存储过程级等不同的权限粒度,而这些权限信息就分别保存在不同的系统表里。
MySQL权限相关的五张核心表
MySQL权限系统依赖于5张系统表,它们都在mysql数据库下,分别是:
接下来,我们一一讲故事、讲场景,帮你搞懂这些权限表的作用。
mysql.user 表:身份证+通行证
这个表是权限系统的大本营。
我们熟悉的登录验证、全局权限设置(比如能不能创建数据库、能不能关机)都在这张表中控制。
举个例子:
这条语句就会把权限记录到user表中,表示这个用户在所有数据库、所有表上都拥有全部权限。
这张表的结构也很庞大,一列一列的都是权限字段,比如:
Select_priv
Insert_priv
Create_user_priv
Shutdown_priv
注意:这里记录的是全局权限,不细分到数据库或者表。
mysql.db 表:你能不能进某个库
如果你给某用户只授予了某个数据库的权限,那就会记录在这张表里。
举个例子:
这就意味着,xiaomi用户只能对sales_db数据库里的表进行查询操作。这个记录会写入db表。
它是实现“数据库级权限隔离”的关键。
mysql.tables_priv 表:你能不能操作某张表
这张表就更细了。如果你只希望某个用户访问某一张表,比如:
举个例子:
只对sales_db库下的orders表授予权限,就会写到这张表。
在实际业务中,这种场景很常见:比如财务用户只能访问订单表,不能动其他表。
而tables_priv表除了权限字段外,还会记录“表级备注信息”、“授权者”等信息。
mysql.columns_priv 表:你能不能看某一列
这张表的权限粒度非常细!
你可以限制用户只查看某些列,而不能看全部。
举个例子:
这就只允许用户查询id和order_date两列,其他字段一律禁止。
这种场景也很实用,比如用户隐私字段不能被运营看到,就可以通过列权限进行限制。
mysql.procs_priv 表:你能不能执行某个函数/存储过程
这张表存的是存储过程和函数的执行权限。
举个例子:
这就表示xiaomi可以执行calc_bonus这个存储过程。
这种权限控制对一些逻辑封装的系统特别重要,比如你不希望开发直接访问数据表,只通过存储过程调用。
这些权限表是怎么协作的?
MySQL在判断权限的时候,并不是单看某一张表,而是:
先查user表有没有全局权限
没有的话,看db表有没有库权限
再看tables_priv表有没有表权限
接着看columns_priv有没有列权限
最后看是否有procs_priv的执行权限
谁优先?谁生效?
权限是累加的!只要你在任意一张表中被赋予了某种权限,那你就拥有这个权限。
几个面试问题点
我总结几个容易被问到、但也容易答错的点,大家面试前记得看几遍!
MySQL权限系统是按粒度划分的,共有5张表,分别控制全局、库、表、列、过程级权限。
权限是累加的,而不是排他或者层级覆盖。
修改权限后,记得执行 FLUSH PRIVILEGES 才会生效(除非用的是GRANT语句)。
所有权限表都在mysql数据库下,是MyISAM引擎的表,不能使用事务。
8.0版本引入了roles角色概念,但底层依然是这些权限表在发挥作用。
面试回来后,我是怎么准备的
面试官问完这道题后,我虽然答得不完美,但回家后我打开mysql数据库,挨个看了表结构,手动练了一遍:
我发现很多问题不是难,而是你平时根本没关注。权限系统可能不像SQL优化那样“炫技”,但确确实实是面试中容易踩坑的模块。
写在最后
权限控制,说简单也简单,说复杂也复杂。掌握这五张表,你就能搞懂 MySQL 的权限体系,也能在面试中把这道题答得漂亮!
如果你看到这里,希望你:
知道了 MySQL 的权限控制分为哪几种粒度
能说清楚每张权限表的作用和常见场景
面对面试题时,不再紧张,不再含糊其辞
END
我们下次见 !股市配资行情
开牛新盛提示:文章来自网络,不代表本站观点。