当前位置: > 数据库 > MySQL >

MySQL权限系统

时间:2018-07-04 17:00来源:linux.it.net.cn 作者:IT

MySQL的权限系统围绕着两个概念:

1:认证——确定用户是否允许连接数据库服务器;

2:授权——确定用户是否拥有足够的权限执行查询请求等。

 

与权限相关的表有user,db,host,tables_priv,columns_priv。每个表的字段都可分为两类,一类为作用域字段,一类为权限字段。作用域字段用来标识主机、用户或者数据库;而权限字段则用来确定对于给定主机、用户或者数据库来说,哪些动作是允许的。

 

  • user表——该表决定是否允许用户连接到服务器。如果允许连接,权限字段则为该用户的全局权限。
  • db表——用于决定哪些用户可以从哪些主机访问哪些数据库。包含在db表中的权限适用于这个表标识的数据库。
  • host表——当您想在db表的范围之内扩展一个条目时,就会用到这个表。举例来说,如果某个db允许通过多个主机访问的话,那么超级用户就可以让db表内将host列为空,然后用必要的主机名填充host表。
  • tables_priv表——该表与db表相似,不同之处是它用于表而不是数据库。这个表还包含一个其他字段类型,包括timestamp和grantor两个字段,用于存储时间戳和授权方。
  • columns_priv——该表作用几乎与db和tables_priv表一样,不同之处是它提供的是针对某些表的特定列的权限。这个表也多出了一个字段类型,包括了一个timestamp列,用于存放时间戳。

 

可以用SHOW CREATETABLE mysql.user;来查看建立user表的语句。同样也可以查看其它表的建立语句。

 

user表在某种程度上是独一无二的,因为它是唯一一个在权限请求的认证和授权阶段都起作用的表。在认证阶段,它只是负责为用户授权访问MySQL服务器,确定用户每小时的最大连接数和最大并发数;在授权阶段,user确定允许访问服务器的用户是否被赋予了操作数据库的全局权限,确定用户每小时的最大查询数和更新数。

 

一旦连接到了服务器,一个用户可以使用两种类型的请求:

管理请求(shutdown,reload,等)

数据库相关的请求(insert,delete,等)

当用户提交管理请求时,服务器只需查看user表,这是因为user表是唯一包含与管理工作有关的权限的一个表。然而,当用户提交数据库请求时,要查看的表就要更多了。

进行权限分配时,按照user,db,tables_priv,columns_priv的顺序进行分配。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db,tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。

 

tables_priv和columns_priv表

通配符可以用于这两个表的host字段,但是不允许在Db、Table_name和Column_name字段使用通配符。

权限字段被声明为SET字段。

tables_priv和columns_priv表只应当通过GRANT/REVOKE命令进行修改。通过INSERT命令向这两个表插入数据会导致服务器不稳定!

tables_priv表中的table_priv字段可以允许下列命令:Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter。

tables_priv表中的column_priv字段允许下列命令:Select、Insert、Update和References。

columns_priv表中的type字段允许下列命令:Select、Insert、Update和References。

 

参考文献

MySQL权限系统

http://blog.csdn.net/liuyuan185442111/article/details/42793805

深入学习MySQL授权表

http://tech.it168.com/a2010/0114/837/000000837456.shtml

 



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容