前面我们已经完整的介绍了performance_schema 、sys、information_schema三个系统库,今天开始我们为大家开启"全方位认识 mysql 系统库"系列,这也是MySQL中的最后一个系统库 ,在更早之前,我们在《MySQL 的 help 命令你真的会用吗?》一文中其实已经介绍过mysql 系统库的帮助信息表了。在接下来的系列文章中,我们将全面介绍 mysql 系统库。下面,请跟随我们一起开始mysql 系统库 的学习之旅吧。

MySQL 访问权限系统表包含如下几张表:

  • user:包含用户帐户和全局权限和其他非权限列表(安全配置选项和资源控制选项列)

  • db:数据库级别的权限表

  • tables_priv:表级别的权限表

  • columns_priv:列级权限表

  • procs_priv:存储过程和函数权限表

  • proxies_priv:代理用户权限表

PS:

  • 要更改权限表的内容,推荐使用帐号管理语句(如:CREATE USER、GRANT、REVOKE等)来间接修改,不建议直接使用DML语句修改权限表,否则后果自负

  • 以下内容主要针对MySQL 5.7版本进行整理

1、user

该表提供查询全局权限信息,该表中的帐号密码信息在认证1阶段(关于认证阶段相关的内容我们会在下一期进行介绍)决定着是否允许用户连接,对于通过帐号密码认证阶段的连接,如果同时通过user表中的权限检查,那么就代表着该用户拥有全局权限,该表中记录的权限信息代表着用户是否拥有该实例下所有数据库的相应全局权限

  • 注意:在user表中有任意一个权限列为Y的,就被认为拥有全局权限,所以用户在使用show databases或者使用information_schema的schemata表查询时,可以查询到所有数据库名称列表

下面是该表中存储的信息内容

root@localhost : mysql 12:51:40> select * from mysql.user limit 1\G;
*************************** 1. row ***************************Host: %User: qfsysSelect_priv: YInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NReload_priv: YShutdown_priv: YProcess_priv: YFile_priv: YGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: NShow_db_priv: NSuper_priv: YCreate_tmp_table_priv: NLock_tables_priv: YExecute_priv: NRepl_slave_priv: YRepl_client_priv: YCreate_view_priv: NShow_view_priv: NCreate_routine_priv: N
Alter_routine_priv: NCreate_user_priv: NEvent_priv: NTrigger_priv: N
Create_tablespace_priv: Nssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *3B3D7D2FD587C29C730F36CD52B4BA8CCF4C744Fpassword_expired: Npassword_last_changed: 2017-07-01 14:37:32password_lifetime: NULLaccount_locked: N
1 row in set (0.00 sec)

表字段含义:

  • host和user两个列官方称为范围列,可以理解为这两个字段构成了允许访问的客户端范围以及客户端可以访问的数据库资源范围(这里没有像db表那样的db字段限制库范围,可以理解为整个实例范围的数据库) 
    * host:代表允许用户从哪些主机访问数据库,可以用通配符和DNS
    * user:用户名

  • 权限列:从 Select_priv到Create_tablespace_priv及其之间的列,官方称为权限列,每一个列对应一个具体的权限,为Y代表有权限,为N代表没权限

  • 以下列官方称为安全列,与客户端与服务端之间的安全、加密通讯有关 
    * ssl_type:如果用户配置了使用加密ssl连接,则该字段记录用户使用的加密证书类型 
    * ssl_cipher:表示用于SSL连接握手中可能使用到的密码列表 
    * x509_issuer:x509证书相关字段 
    * x509_subject:x509证书相关字段 
    * plugin:代表该用户使用的密码认证插件名称 
    * authentication_string:表示用户密码的md5加密字符串 
    * password_expired:表示用户密码是否过期,为Y试表示用户密码会过期,为N表示用户密码永不过期 
    * password_last_changed:表示用户密码的最近一次修改时间,该字段如果使用MySQL内建的认证插件(mysql_native_password or sha256_password)则该字段为非空,如果是使用外部认证插件则该字段为空,当使用MySQL内建的认证插件时,该字段初始值为CREATE USER、ALTER USER、SET PASSWORD、GRANT语句执行创建用户或者修改密码时的时间 
    * password_lifetime:如果password_expired字段为Y,则该字段记录该用户剩余的密码未过期天数,假设该字段值为N,则表示用户需要每N天修改一次密码。如果用户未单独指定该值,则使用全局系统变量default_password_lifetime的值代替。当该字段值为NULL且全局系统变量default_password_lifetime为0时或者该字段值为0时,表示该用户的密码永不过期 
    * account_locked:代表用户当前状态是锁定状态还是处于激活可用状态

  • 以下列官方称为资源控制列,用于限制用户的一些访问资源 
    * max_questions:代表所有用户每小时的最大并发查询数 
    * max_updates:代表所有用户每小时最大并发更新次数 
    * max_connections:代表所有用户每小时的最大并发连接数 
    * max_user_connections:代表该行记录中的用户每小时的最大并发连接数

2、db

该表提供查询库级别对象权限信息, 该表中记录的权限信息代表着用户是否可以使用这些权限来访问哪些数据库下的所有对象(表或存储程序)

下面是该表中存储的信息内容

root@localhost : mysql 12:53:28> select * from db limit 1\G;
*************************** 1. row ***************************Host: localhostDb: performance_schemaUser: mysql.sessionSelect_priv: YInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: N
Create_tmp_table_priv: NLock_tables_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NExecute_priv: NEvent_priv: NTrigger_priv: N
1 row in set (0.00 sec)

表字段含义:

  • host、db、user三个列官方称为范围列,可以理解为这两个字段构成了允许访问的客户端范围以及客户端可以访问的数据库资源范围 
    * host:与user表的host字段含义相同 
    * db:代表该用户权限记录所属的哪个库级别范围 
    * user:与user表的user字段含义相同

  • xxx_priv:与user表的xxx_priv字段含义相同,每一个字段对应相应的权限,,为Y代表有权限,为N代表没权限 
    * 与user表相比,少了Reload_priv 、Shutdown_priv 、Process_priv 、File_priv、Show_db_priv、Super_priv、Repl_slave_priv、Repl_client_priv、Create_user_priv、Create_tablespace_priv等字段,即代表着这些字段对应的权限是全局范围的,不区分库表级别

3、tables_priv

该表提供查询表表级别权限信息,与db表类似,但粒度更细,tables_priv表中记录的权限信息代表着用户是否可以使用这些权限访问某个表中的所有列

下面是该表中存储的信息内容

root@localhost : mysql 12:54:14> select * from tables_priv;
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| Host      | Db     | User          | Table_name | Grantor        | Timestamp           | Table_priv                                                                                   | Column_priv          |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| localhost | sys    | mysql.sys     | sys_config | root@localhost | 2017-07-01 14:31:32 | Select                                                                                       |                      |
| localhost | mysql  | mysql.session | user       | root@localhost | 2017-12-11 23:41:19 | Select                                                                                       |                      |
| %         | sbtest | xx            | sbtest1    | root@localhost | 0000-00-00 00:00:00 |                                                                                              | Select,Insert,Update |
| %         | sbtest | test_table    | sbtest1    | root@localhost | 0000-00-00 00:00:00 | Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger |                      |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
4 rows in set (0.00 sec)

表字段含义:

  • host、db、user、Table_name四个列官方称为范围列,可以理解为这两个字段构成了允许访问的客户端范围以及客户端可以访问的表对象资源范围

  • Table_priv和Column_priv官方称为权限列,对应这表级别权限和列级别权限,需要注意的是,这两列权限列与user和db表不同,这两列是set类型,记录着表级别和列级别的权限集合,而不是对应具体的某个权限。Table_priv对应着表级别的'Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger'权限,Column_priv对应着列级别的'Select','Insert','Update','References'权限

  • 其他字段: 
    * Grantor:代表该表中记录的用户权限被谁授予的,即该表中的用户权限在被授予时的current_user函数返回的用户值(account形式) 
    * Timestamp:代表授予Grantor表示的帐号权限时的时间戳

4、columns_priv

该表提供查询列级别权限信息, 与db表类似,但粒度更细,columns_priv表中记录的权限信息代表着用户可以使用这些权限来访问某个表的指定列

下面是该表中存储的信息内容

root@localhost : mysql 12:55:13> select * from columns_priv;
+------+--------+------+------------+-------------+---------------------+----------------------+
| Host | Db     | User | Table_name | Column_name | Timestamp           | Column_priv          |
+------+--------+------+------------+-------------+---------------------+----------------------+
| %    | sbtest | xx   | sbtest1    | id          | 0000-00-00 00:00:00 | Select,Insert,Update |
+------+--------+------+------------+-------------+---------------------+----------------------+
1 row in set (0.00 sec)

表字段含义:

  • host、db、user、Table_name、Column_name五个列官方称为范围列,可以理解为这两个字段构成了允许访问的客户端范围以及客户端可以访问的列对象资源范围

  • Column_priv官方称为权限列,与tables_priv表中的Column_priv列含义相同,也是一个集合,对应列级别的'Select','Insert','Update','References'权限

  • 其他字段 
    * Timestamp:与tables_priv表中的Timestamp列含义相同

5、procs_priv

该表提供查询存储程序的权限信息,该表中记录的权限信息代表着用户是否可以使用这些权限来访问指定的存储程序(存储过程和函数)

表字段含义:

  • host、db、user、Routine_name、Routine_type五个列官方称为范围列,可以理解为这两个字段构成了允许访问的客户端范围以及客户端可以访问的存储对象资源

  • Proc_priv官方称为权限列,该权限列也是一个集合类型,代表存储程序的'Execute','Alter Routine','Grant'权限

  • 其他列: 
    * Timestamp:和tables_priv表中的Timestamp字段含义相同 
    * Grantor:和tables_priv表中的Grantor字段含义相同

PS:该表权限数据为空,目前并未找到使表中填充数据的方法

6、proxies_priv

该表提供查询代理用户权限信息, 该表中记录的权限信息代表着用户可以充当哪些用户的代理,以及用户是否可以将PROXY权限授予其他用户

  • 如果一个用户需要将它的PROXY权限授予其他帐号,那么它必须在该表中有一行权限信息,且With_grant字段必须为1

下面是该表中存储的信息内容

root@localhost : mysql 12:58:16> select * from proxies_priv;
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| Host      | User | Proxied_host | Proxied_user | With_grant | Grantor              | Timestamp           |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| localhost | root |              |              |          1 | boot@connecting host | 0000-00-00 00:00:00 |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
1 row in set (0.00 sec)

表字段含义:

  • host、user字段含义与前面其他权限表相同

  • Proxied_host和Proxied_user表示被授予proxy权限的account(对应的host和user字符串)

  • 其他列的含义和tables_priv含义相同

注意事项:权限表中一些字段有长度存储限制,具体如下:

  • Host, Proxied_host:长度限制 60个字符

  • User, Proxied_user:长度限制 32个字符

  • Password:长度限制 41个字符

  • Db:长度限制 64个字符

  • Table_name:长度限制 64个字符

  • Column_name:长度限制 64个字符

  • Routine_name:长度限制 64个字符

本期内容就介绍到这里,本期内容参考链接如下:

  • https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html

| 作者简介

罗小波·ScaleFlux数据库技术专家

《千金良方——MySQL性能优化金字塔法则》、《数据生态:MySQL复制技术与生产实践》作者之一。

熟悉MySQL体系结构,擅长数据库的整体调优,喜好专研开源技术,并热衷于开源技术的推广,在线上线下做过多次公开的数据库专题分享,发表过近100篇数据库相关的研究文章。

全文完。

Enjoy MySQL :)

叶老师的「MySQL核心优化」大课已升级到MySQL 8.0,扫码开启MySQL 8.0修行之旅吧

权限系统表 | 全方位认识 mysql 系统库(一)相关推荐

  1. mysql timestamp 当前_时区信息记录表|全方位认识 mysql 系统库

    作者  罗小波 · 沃趣科技高级数据库技术专家 出品  沃趣科技 在上一期<优化器成本记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql 系统库中的优化器成本记录表,本期 ...

  2. mysql 默认当前时间_复制信息记录表|全方位认识 mysql 系统库

    在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...

  3. mysql 单表字段多少合适_复制信息记录表|全方位认识 mysql 系统库

    在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...

  4. 组复制系统变量 | 全方位认识 MySQL 8.0 Group Replication

    本节列出特定于 MGR 插件的系统变量.每个系统变量的前缀都是"group_replication"字符串. 组复制的大多数系统变量都是动态的,它们的值可以在MySQL Serve ...

  5. MySQL系统库之mysql

    权限系统表 因为权限管理是DBA的职责,所以对于这个部分的表,我们大概了解下即 可.在mysql系统库中,MySQL访问权限系统表,放在mysql库中,主要包含如 下几个表: user:包含用户账户. ...

  6. mysql管理员权限哪个表_Mysql 用户权限管理(权限列表)

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...

  7. Mysql权限系统工作原理(转)

    Mysql权限系统工作原理: MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情.当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和 ...

  8. MySQL系统表空间和独立表空间

    文章目录 第1章 基础环境和官方架构图 1.1 我的实践环境 1.2 官方的架构图 第2章 系/独表空间的基本认识一 2.1 系统表空间的认识 2.2 独立表空间的认识 第1章 基础环境和官方架构图 ...

  9. 架构设计参考项目系列主题:最全的权限系统设计方案

    本文转自:Java高性能架构 目录 1 为什么需要权限管理 2 权限模型 2.1 权限设计 2.2 为什么需要角色 2.3 权限模型的演进 2.4 用户划分 2.5 理想的RBAC模型 3 权限系统表 ...

最新文章

  1. js通过正则表达式解析xml 获取指定的内容
  2. 国际大师Stan Lippman访华布道C++技术大会
  3. 12cR2 RAC+RAC+ADG ORA-16854
  4. python基础知识面试题-[面试] 1. 关于Python的基础知识
  5. JETSON NANO 查看 CUDA 版本:NVCC -V 报错:BASH: NVCC: 未找到命令
  6. Python学习笔记:常用第三方模块3
  7. Python爬虫开发:requests库的使用--ip代理参数的设置
  8. java 单例 缓存hashmap_java 、HashMap 和单例
  9. Linux vi常用指令使用案例汇总
  10. Vue入门到TodoList练手
  11. hibernate 与 spring 松散配置的问题
  12. 程序员千万不要做舔狗啊!
  13. Vmware虚拟机宕机问题处理
  14. Lockdir 文件夹加密 破解
  15. 兄弟打印机内存已满清零方法_打印机内存已满怎么处理
  16. codeblocks20.03汉化版 附汉化补丁|codeblocks汉化版
  17. lenovo服务器换系统重装系统_联想电脑重装系统详细步骤?
  18. 计算机系统相机怎么卸载,如何卸载摄像头驱动
  19. linux vsftpd共享位置,文件共享服务之vsftpd
  20. 2022中国汽车测试及质量监控博览会邀请函

热门文章

  1. 搭建简易的物联网服务端和客户端-Maibu控制(二十一)
  2. NSIS终极篇(安装包、常用网站)
  3. SC4020/SCv2020 控制器更换流程步骤和可能遇到的问题
  4. 知识回顾:什么是封装?封装的作用?如何封装?
  5. 验证手机号是否注册过爱奇艺
  6. matlab类中增加公共属性,在面向对象的MATLAB中,属性如何工作?
  7. 奇舞周刊第 330 期:别让自己“墙”了自己
  8. 我为什么要写博客,写博客的意义是什么
  9. 更换Tomcat默认主页
  10. 在C#控制台输出的爱心图案