浅谈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 覆盖索引的优点
May 19 MySQL
Mysql排序的特性详情
Nov 01 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
MySQL的存储过程和相关函数
Apr 26 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
mysql sql常用语句大全
Jun 21 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 MySQL
delete in子查询不走索引问题分析
Jul 07 MySQL
DQL数据查询语句使用示例
Dec 24 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
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
JS原型链怎么理解
2016/06/27 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
python构建深度神经网络(DNN)
2018/03/10 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python匿名函数的使用方法解析
2019/10/10 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python实现PCA降维的示例详解
2020/02/24 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
逻辑链路控制协议
2016/10/01 面试题
《影子》教学反思
2014/02/21 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL