曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4408|回复: 0
打印 上一主题 下一主题

MySQL权限管理简介

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-4-26 19:15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 MySQL 中利用 mysql 这个数据库存储了所有的授权信息,该数据库有若干数据表组成:

在上面的多个表中,涉及到权限控制的有 5 张表:columns_priv ,db,host,tables_priv,user

MySQL 正是通过装载这些权限信息表来实现数据的安全管理。

1. columns_priv
该表在字段一级对用户的访问权限进行设定,表的自身定义如下图所示:

在该表中,定义了哪类用户(定义在字段 User)中,利用哪台主机(定义在字段 Host),能够访问哪个数据库(以 Db 字段来标识) 的哪张表(Table_name),并对其中的哪些字段(Column_name)有哪些访问权(Column_priv) 。也就是说,当某一个用户针对某一张表进行操作时,如果对权限进行了设定,那么 MySQL 会自动去通过这些已设定好的权限进行对比,判断访问是否合法。

2. db
db 表类似于表 columns_priv,它针对数据库一级进行访问权限设定,下图是该表的具体描述:

表中前3 个字段的含义与表 columns_priv 中的 Host,Db,User 字段类似,用于定义用户是否具有访问数据库的权限。

Select_priv,Alter_priv 用于判断用户是否针对该数据库有该条语句的访问权,这是个枚举型,要么是要么否,若设置为 y 那么表示用户可以执行该语句。

3. host
host 表与 db 表基本类似,下图是它的结构:

该表中没有用户的概念,它只是对具体的主机进行认证授权。

4. tables_priv
tables_priv 表与 columns_priv 类似,它在表一级进行访问授权。

5. procs_priv
procs_priv 表用于设定用户是否有存储过程编写权限,具体结构如下:


6. user
user 表是用户级授权表,具体结构及相关权限注释如下图所示:

user 表用于管理用户,定义了各种命令的操作权限,MySQL 对于用户权限的命令非常直观,如 Select_priv 字段用于表示查询语句的执行权限,其它权限注释见上图。

访问权限原理
在 MySQL 中采用两阶段的方式来进行权限的存取和控制,这两个阶段是:
1. MySQL 服务器检查是否允许连接。
2. 如果连接成功,则 MySQL 服务器对于用户所发起的每个请求进行权限判断,识别用户是否具有足够的权限来运行此请求。例如,某个用户执行 drop 操作,如果没有该权限,那么操作不会成功。

权限检查基本流程为:
检查表 user ---->检查表 db ----> 检查表 host ----> 检查表 tables_priv ----> 检查表 columns_priv
上面流程的具体含义为:
当用户发起连接时,MySQL 首先检查 user 表,检查的方式是通过用户名,密码,主机的组合,判断用户是否为授权用户,如果不是则直接拒绝。如果用户通过了检查,那么对于提交的请求,MySQL 将通过顺序检查 db, host, tables_priv, columns_priv 判断是否存在访问权限。对于访问权限的检查是“或”的关系,即本次如果通过,那么直接执行,如果不通过则进一步去检查,看是否本权限在其他表中有定义,直到检查完毕,如果还未获得授权,那么返回错误信息。

如果一个用户在数据库层级拥有写入记录的权限,而在表层级并没获得授权,那么他让仍然有权限将记录写入该表,反之亦然,这个事实符合上面所说的访问权限是按“或”关系来检查的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-4 00:05 , Processed in 0.076351 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表