浅谈MySQL user权限表


Posted in MySQL onJune 18, 2021

MySQL 在安装时会自动创建一个名为 mysql 的数据库,mysql 数据库中存储的都是用户权限表。用户登录以后,MySQL 会根据这些权限表的内容为每个用户赋予相应的权限。

user 表是 MySQL 中最重要的一个权限表,用来记录允许连接到服务器的账号信息。需要注意的是,在 user 表里启用的所有权限都是全局级的,适用于所有数据库。

user 表中的字段大致可以分为 4 类,分别是用户列、权限列、安全列和资源控制列,下面主要介绍这些字段的含义。

用户列

用户列存储了用户连接 MySQL 数据库时需要输入的信息。需要注意的是 MySQL 5.7 版本不再使用 Password 来作为密码的字段,而改成了 authentication_string。

MySQL 5.7 版本的用户列如表 1 所示。

 

字段名 字段类型 是否为空 默认值 说明
Host char(60) NO 主机名
User char(32) NO 用户名
authentication_string text YES 密码

表 1:user 表的用户列

用户登录时,如果这 3 个字段同时匹配,MySQL 数据库系统才会允许其登录。创建新用户时,也是设置这 3 个字段的值。修改用户密码时,实际就是修改 user 表的 authentication_string 字段的值。因此,这 3 个字段决定了用户能否登录。

权限列

权限列的字段决定了用户的权限,用来描述在全局范围内允许对数据和数据库进行的操作。

权限大致分为两大类,分别是高级管理权限和普通权限:

  • 高级管理权限主要对数据库进行管理,例如关闭服务的权限、超级权限和加载用户等;
  • 普通权限主要操作数据库,例如查询权限、修改权限等。

user 表的权限列包括 Select_priv、Insert_ priv 等以 priv 结尾的字段,这些字段值的数据类型为 ENUM,可取的值只有 Y 和 N:Y 表示该用户有对应的权限,N 表示该用户没有对应的权限。从安全角度考虑,这些字段的默认值都为 N。

 

字段名 字段类型 是否为空 默认值 说明
Select_priv enum('N','Y') NO N 是否可以通过SELECT 命令查询数据
Insert_priv enum('N','Y') NO N 是否可以通过 INSERT 命令插入数据
Update_priv enum('N','Y') NO N 是否可以通过UPDATE 命令修改现有数据
Delete_priv enum('N','Y') NO N 是否可以通过DELETE 命令删除现有数据
Create_priv enum('N','Y') NO N 是否可以创建新的数据库和表
Drop_priv enum('N','Y') NO N 是否可以删除现有数据库和表
Reload_priv enum('N','Y') NO N 是否可以执行刷新和重新加载MySQL所用的各种内部缓存的特定命令,包括日志、权限、主机、查询和表
Shutdown_priv enum('N','Y') NO N 是否可以关闭MySQL服务器。将此权限提供给root账户之外的任何用户时,都应当非常谨慎
Process_priv enum('N','Y') NO N 是否可以通过SHOW PROCESSLIST命令查看其他用户的进程
File_priv enum('N','Y') NO N 是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令
Grant_priv enum('N','Y') NO N 是否可以将自己的权限再授予其他用户
References_priv enum('N','Y') NO N 是否可以创建外键约束
Index_priv enum('N','Y') NO N 是否可以对索引进行增删查
Alter_priv enum('N','Y') NO N 是否可以重命名和修改表结构
Show_db_priv enum('N','Y') NO N 是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库
Super_priv enum('N','Y') NO N 是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程;使用SET GLOBAL命令修改全局MySQL变量,执行关于复制和日志的各种命令。(超级权限)
Create_tmp_table_priv enum('N','Y') NO N 是否可以创建临时表
Lock_tables_priv enum('N','Y') NO N 是否可以使用LOCK TABLES命令阻止对表的访问/修改
Execute_priv enum('N','Y') NO N 是否可以执行存储过程
Repl_slave_priv enum('N','Y') NO N 是否可以读取用于维护复制数据库环境的二进制日志文件
Repl_client_priv enum('N','Y') NO N 是否可以确定复制从服务器和主服务器的位置
Create_view_priv enum('N','Y') NO N 是否可以创建视图
Show_view_priv enum('N','Y') NO N 是否可以查看视图
Create_routine_priv enum('N','Y') NO N 是否可以更改或放弃存储过程和函数
Alter_routine_priv enum('N','Y') NO N 是否可以修改或删除存储函数及函数
Create_user_priv enum('N','Y') NO N 是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户
Event_priv enum('N','Y') NO N 是否可以创建、修改和删除事件
Trigger_priv enum('N','Y') NO N 是否可以创建和删除触发器
Create_tablespace_priv enum('N','Y') NO N 是否可以创建表空间

表 2:user表的权限列

如果要修改权限,可以使用 GRANT 语句为用户赋予一些权限,也可以通过 UPDATE 语句更新 user 表的方式来设置权限。

安全列

安全列主要用来判断用户是否能够登录成功,user 表中的安全列如表 3 所示:

 

字段名 字段类型 是否为空 默认值 说明
ssl_type enum('','ANY','X509','SPECIFIED') NO   支持ssl标准加密安全字段
ssl_cipher blob NO   支持ssl标准加密安全字段
x509_issuer blob NO   支持x509标准字段
x509_subject blob NO   支持x509标准字段
plugin char(64) NO mysql_native_password 引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户
password_expired enum('N','Y') NO N 密码是否过期 (N 未过期,y 已过期)
password_last_changed timestamp YES   记录密码最近修改的时间
password_lifetime smallint(5) unsigned YES   设置密码的有效时间,单位为天数
account_locked enum('N','Y') NO N 用户是否被锁定(Y 锁定,N 未锁定)

表 3:user 表的安全列

注意:即使 password_expired 为“Y”,用户也可以使用密码登录 MySQL,但是不允许做任何操作。

通常标准的发行版不支持 ssl,读者可以使用 SHOW VARIABLES LIKE "have_openssl" 语句来查看是否具有 ssl 功能。如果 have_openssl 的值为 DISABLED,那么则不支持 ssl 加密功能。

资源控制列

资源控制列的字段用来限制用户使用的资源,user 表中的资源控制列如表 4 所示。

 

字段名 字段类型 是否为空 默认值 说明
max_questions int(11) unsigned NO 0 规定每小时允许执行查询的操作次数
max_updates int(11) unsigned NO 0 规定每小时允许执行更新的操作次数
max_connections int(11) unsigned NO 0 规定每小时允许执行的连接操作次数
max_user_connections int(11) unsigned NO 0 规定允许同时建立的连接次数

表 4:user 表的资源控制列

以上字段的默认值为 0,表示没有限制。一个小时内用户查询或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时才可以在此执行对应的操作。可以使用 GRANT 语句更新这些字段的值。

到此这篇关于浅谈MySQL user权限表 的文章就介绍到这了,更多相关MySQL user权限表 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
SQL实现LeetCode(177.第N高薪水)
Aug 04 MySQL
mysql函数全面总结
Nov 11 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
MySQL的存储过程和相关函数
Apr 26 MySQL
mysql如何查询连续记录
May 11 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 #MySQL
MySQL 亿级数据导入导出及迁移笔记
如何使用分区处理MySQL的亿级数据优化
Jun 18 #MySQL
详解MySQL中的pid与socket
Jun 15 #MySQL
MySQL 如何设计统计数据表
Jun 15 #MySQL
浅谈MySQL 亿级数据分页的优化
解析MySQL binlog
You might like
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
中国医药集团国药在线:国药网
2017/02/06 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
几道PHP面试题
2013/04/14 面试题
工商管理应届生求职信
2013/10/07 职场文书
大学生入党思想汇报
2014/01/01 职场文书
出生医学证明样本
2014/01/17 职场文书
总经理助理工作职责
2014/02/06 职场文书
经销商年会策划方案
2014/05/29 职场文书
民政局个人整改措施
2014/09/24 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL