探索MySQL的权限控制

举报
GaussDB数据库 发表于 2019/06/12 11:32:36 2019/06/12
【摘要】 一.MySQL的权限表 MySQL的权限表包括mysql.user,mysql.db,mysql.tables,mysql.tables_priv, mysql.columns_priv, mysql.procs_priv这五张表。 user表:记录账号,密码,全局性权限信息等 (1)*_priv:权限列,适用于mysql服务器全局性的权限; (2)Max_*:...

.MySQL的权限表

   MySQL的权限表包括mysql.user,mysql.db,mysql.tables,mysql.tables_priv, mysql.columns_priv, mysql.procs_priv这五张表。

  1. user表:记录账号,密码,全局性权限信息等

    (1)*_priv:权限列,适用于mysql服务器全局性的权限;

    (2)Max_*:资源管理列,适用于规定账号的资源使用上限,其中:

    (3)Mas_questions:每小时发出的语句数上限;max_updates:每小时发出的修改类语句数上限

    (4)Max_connections:每小时连接数上限;max_user_connection:允许保有的连接数上限   

  2. db表:记录数据库相关权限

    *_priv:适用于某个数据库的权限

  3. tables_priv表:表级别的权限

  4. columns_priv:列级别的权限

  5. procs_priv:存储过程和函数的权限

.MySQL服务控制客户访问流程

    信息系统中,访问控制分为自主访问控制(DAC)强制访问控制(MAC)。具体到DBMS,自主访问控制就是我们所熟悉的GRANT,REVOKE,大多数数据库都支持自助的访问控制。强制访问控制就是ORACLE中的LABEL,只有很少的一些系统支持MAC。严格来说,登录并不属于访问控制机制,而应该属于用户身份识别和认证。在Mysql中,将登录和DAC的相关接口都实现在了sql_acl.cc中(其实说登录是用户拥有的一种权限也未尝不可,正如ORACLE中的CREATE SESSION,不过登录并不仅仅是一种权限,还包含很多其他的属性),从文件名大家可以看出来,ACL即ACCESS CONTROL LIST,访问控制列表,这是实现访问控制的

基本方法。下图是Mysql的整个访问控制的流程

 截图2.PNG

1.用户连接时的检查

1)当用户连接时,MySQL服务器首先从user表里匹配host, user, password,匹配不到则拒绝该连接

2)接着检查user表的max_connections和max_user_connections,如果超过上限则拒绝连接

3)检查user表的SSL安全连接,如果有配置SSL,则需确认用户提供的证书是否合法

只有上面3个检查都通过后,服务器才建立连接,连接建立后,当用户执行SQL语句时,需要如下检查。

2.执行sql语句时的检查

1)从user表里检查max_questions和max_updates,如果超过上限则拒绝执行SQL

下面几步是进行权限检查:

2)首先检查user表,看是否具有相应的全局性权限,如果有,则执行,没有则继续下一步检查

3)接着到db表,看是否具有数据库级别的权限,如果有,则执行,没有则继续下一步检查

4)最后到tables_priv, columns_priv, procs_priv表里查看是否具有相应对象的权限

从以上的过程我们可以知道,MySQL检查权限是一个比较复杂的过程,所以为了提高性能,MySQL的启动时就会把这5张权限表加载到内存。

.注意事项

1、尽量使用create user, grant等语句,而不要直接修改权限表。

虽然create user, grant等语句底层也是修改权限表,和直接修改权限表的效果是一样的,但是,对于非高手来说,采用封装好的语句肯定不会出错,而如果直接修改权限表,难免会漏掉某些表。而且,修改完权限表之后,还需要执行flush privileges重新加载到内存,否则不会生效。

2、把匿名用户删除掉。

匿名用户没有密码,不但不安全,还会产生一些莫名其妙的问题,强烈建议删除

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。