概述
Author mogd 2022-04-26
Update mogd 2022-04-26
目录
- MySQL 权限控制原理
- 连接核实阶段
- 请求核实阶段
- 参考
MySQL 权限控制原理
MySQL
数据库在用户连接时,分为两个阶段;
- 连接核实阶段
- 请求核实阶段
连接核实阶段
客户端向 MySQL
服务器发起请求连接,请求带有用户名、主机地址和密码,MySQL
服务器通过判断客户端请求信息是否与 user
表中的 Host
、User
和 authentication_string
的内容一致,执行身份验证
只有客户端请求信息与 user
表中匹配时,MySQL
服务器才会接收连接,否则拒绝连接
MySQL 5.7 使用
authentication_string
,在此之前使用Password
MySQL 通过 IP 地址和用户名联合身份认证,如果用户名相同,IP 地址不同,MySQL 会将其视为不同用户
请求核实阶段
建立连接后,服务器进入请求核实阶段,即对此连接上客户端发送的每个请求操作数据库命令,MySQL 都会检查用户是否有足够的权限类执行
权限按照以下权限表的顺序得到数据库权限:user→db→tables_priv→columns_priv→procs_priv;权限范围依次递减,全局权限覆盖局部权限
MySQL 数据库会递进的查找权限表,匹配
User
、Host
字段值,如果在该权限表中被授权,则允许操作运行,否则向下一个权限表查找
请求核实过程如下:
- 客户端向 MySQL 发起操作请求
- MySQL 首先检查
user
表,匹配User
、Host
字段值,查看请求的全局权限在user
表中是否授权;授权则允许操作,否则将检查下一个权限表 db db
表的权限限定与数据库层级,例如:在该表中的 SELECT 权限允许用户查看指定数据库所有表的数据;MySQL 检查 db 权限表的User
、Host
字段值,如果权限在db
表中,则授权,否则向下一个权限表查找- MySQL 按顺利判断
tables_priv
和columns_priv
权限表的权限信息 - 如果所有权限表都检查完毕,都没有找到允许的权限操作,那么将返回错误信息给客户端,操作失败
注:上面提到 MySQL 通过向下层级的顺序检查权限表,但并不意味着所有的权限都要执行该过程。例如,一个用户登录到 MySQL 服务器之后只执行对 MySQL 的管理操作,此时只涉及管理权限,因此 MySQL 只检查 user 表
参考
[1] C 语言中文网-MySQL 权限控制实现原理
最后
以上就是听话西牛为你收集整理的MySQL 权限控制原理MySQL 权限控制原理的全部内容,希望文章能够帮你解决MySQL 权限控制原理MySQL 权限控制原理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复