前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL8.0账户system_user权限,你了解吗?

MySQL8.0账户system_user权限,你了解吗?

作者头像
AsiaYe
发布于 2022-07-27 07:55:05
发布于 2022-07-27 07:55:05
1.8K00
代码可运行
举报
文章被收录于专栏:DBA随笔DBA随笔
运行总次数:0
代码可运行

MySQL8.0账户system_user权限,你了解吗?

01

MySQL system_user权限介绍

MySQL从8.0.16版本开始,MySQL利用system_user权限来区分普通用户和系统用户。具体表现是:

1、拥有system_user权限的账号,是系统账号

2、没有system_user权限的账号,是普通账号

系统账号可以修改系统账号自身和普通账号;

普通账号只能修改普通账号自身。

system_user权限的影响范围:

1、账号管理方面

具有system_user权限的系统账号,可以对普通账号和其他系统账号进行管理,包含账号的创建、删除、修改,权限的授予和回收,密码修改,或者密码属性修改等(例如修改密码过期时间);

2、kill会话方面

a、kill一个具有system_user权限的账号A持有的会话,你自身执行kill命令的账号B也必须有system_user权限;

b、从MySQL8.0.30开始,

如果账号A将MySQL server置为下线模式(参数offline-mode控制),除非账号B拥有connection_admin权限或者super权限,否则账号B无法创建新的连接,但是账号B老的连接不会被打断。

c、MySQL8.0.16 之前,如果一个用户拥有connection_admin权限或者super权限,则它可以kill任何正在执行的会话和语句。

3、修改存储过程、事件或者视图的定义

想要修改某个存储过程的定义用户,如果原来的账号A拥有system_user权限,那么修改的账号也需要拥有system_user权限。

4、定义强制角色(mandatory role)

首先,我们简单解释下强制角色的概念,mandatory role,它是MySQL8.0里面的一个配置,可以通过下面的语句查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
show variables like '%manda%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| mandatory_roles |       |
+-----------------+-------+
1 row in set (0.00 sec)

这个参数里面可以写入一些定义好的角色,对于任意一个定义的用户,这些角色都会被强加在这个用户上。一个常见的用法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET  mandatory_roles = '`role1`@`%`,`role2`,role3,role4@localhost';

了解了强制角色概念之后,说回到system_user权限,在MySQL8.0.16版本以后,如果一个角色role有system_user权限,那么它不能被放在强制角色列表中,而之前,任何角色role都可以放在这个列表中。

5、审计方面的影响。

这个特点很少使用,这里我不做赘述了。有兴趣可以查看官网。

02

具体案例分析

1、system_user权限对账号安全性的影响

MySQL5.7版本下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
一、
利用root用户登录,创建root和test 2个账号,
其中,test账号只有create user权限
create user root@'10.%' ;
grant all privileges on *.* to root@'10.%';

create user test@'%';
grant create user on *.* to test@'%';

二、
再次利用test账号登录,并删除root@''账号:
drop user root@'10.%' ;
Query OK, 0 rows affected (0.00 sec)

执行成功

MySQL 8.0 版本下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
一、
利用root用户登录,创建root和test 2个账号,
其中,test账号只有create user权限
create user root@'10.%' ;
grant all privileges on *.* to root@'10.%';

create user test@'%';
grant create user on *.* to test@'%';

二、
再次利用test账号登录,并删除root@''账号:
drop user root@'10.%' ;
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

执行失败!!!

上述例子中不难看出:

MySQL5.7版本下,只要一个账号有create user权限,就可以对其他账号进行删除操作,甚至root账号它都可以删除,也就是说普通账号可以删除root这种高权限的系统账号;

MySQL8.0版本下,一个账号A有create user权限,无法对拥有system_user权限的root账号进行删除。

A账号还需要拥有system_user权限,才可以对root账号进行删除,因为root用户本身拥有system_user权限,也是一个系统账号,只有系统账号才能操作系统账号

2、system_user权限,对账号密码的修改

看下面MySQL8.0.22版本下的例子,让我们对system_user权限更加理解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create user a,b,c,d;
grant create user             on *.* to a;
grant system_user             on *.* to b;
grant create user,system_user on *.* to c;
grant all                     on *.* to d;

1、用 a 用户登录,去改 c 用户的密码,提示需要SYSTEM_USER 权限
alter user c identified by 'c';
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

理由:a用户是一个普通用户,无法修改具有system_user权限的系统用户

2、用 b 用户登录,去改 c 用户的密码,提示需要CREATE USER 权限
alter user c identified by 'c';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

理由:b用户是一个系统用户,但是由于缺少create user权限,所以不能修改系统用户c的密码

、用 c 用户登录,去改 c 用户的密码,修改成功
alter user c identified by 'c'; 
Query OK, 0 rows affected (0.01 sec)

理由:c用户是一个系统用户,本身有create user和system_user的权限,所以修改自己也能成功

、用 c 用户登录,去改 d 用户的密码,修改成功(d用户有all的权限)
alter user d identified by 'd'; 
Query OK, 0 rows affected (0.01 sec)

理由:c用户是一个系统用户,本身有create user和system_user的权限,所以可以修改其他任意的系统账号

可以看到:

普通账号想要修改系统账号的密码,必须将普通账号变成系统账号,也就是添加system_user的权限。

03

总结

从MySQL8.0版本开始,系统账号和普通账号之间有了鸿沟,具体表现在:

1、拥有system_user权限的账号,是系统账号

2、没有system_user权限的账号,是普通账号

3、在拥有create user权限的情况下,系统账号可以修改其他系统账号和所有普通账号;

4、在拥有create user权限的情况下,普通账号只能修改其他普通账号。

PS:这里还有一个细节。

如果一个账号本身没有system_user的权限,但是被赋予了一个角色,这个角色拥有system_user权限,那么相当于这个账号也就拥有了system_user权限。也就变成了一个系统账号。

更多更详细的内容,可以参考官方文档:

https://dev.mysql.com/doc/refman/8.0/en/account-categories.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
嵩天老师-Python语言程序设计-Python123配套练习测验题目汇总整理
普遍认为Python语言诞生于1991年Python语言中的缩进在程序中长度统一且强制使用,只要统一即可,不一定是4个空格(尽管这是惯例)IPO模型指:Input Process Output字符串的正向递增和反向递减序号体系:正向是从左到右,0到n-1,反向是从右到左,-1到-n,举例
用户7886150
2020/11/25
3K0
中国大学 MOOC 课程Python语言程序设计 (第11期)测试答案(1-5周)
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬#0032003700380032003300331588486939470Guido van Rossum正式对外发布Python版本的年份是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
SingYi
2022/07/14
1.9K0
中国大学 MOOC 课程Python语言程序设计 (第11期)测试答案(1-5周)
2万字用Python探索金庸小说世界
本文从传统匹配逻辑分析过渡到机器学习的词向量,全方位进行文本分析,值得学习,干货满满。
可以叫我才哥
2022/11/11
7550
2万字用Python探索金庸小说世界
二级Python选择题_二级python选择题题库
以下对Python程序设计风格描述错误的选项是: A Python中不允许把多条语句写在同一行 B Python语句中,增加缩进表示语句块的开始,减少缩进表示语句块的退出 C Python可以将一条长语句分成多行显示,使用续航符“\” D Python中不允许把多条语句写在同一行 正确答案: D
全栈程序员站长
2022/09/27
3.6K0
c语言程序设计 向艳主编 第5章课后习题答案-C语言程序设计(第2版)-- 课后题答案
  2.已知立方体的长、宽、高分别是10cm、20cm、15cm,编写程序,求立方体体积。 解:
宜轩
2022/12/29
1.1K0
《Python程序设计与算法基础教程(第二版)》
标识符的第一个字符必须是字母,下划线(_);其后的字符可以是字母、下划线或数字。一些特殊的名称,作为python语言的保留关键字,不能作为标识符以双下划线开始和结束的名称通常具有特殊的含义。例如__init__为类的构造函数,一般应避免使用
用户7886150
2020/11/29
5.3K0
零基础入门Python:基本命令、函数、数据结构
导读:本文对Python的基本使用做一个简单的介绍。限于篇幅,本文不可能详细讲解Python的使用,只是针对本书涉及的数据挖掘案例所用到的代码进行基本讲解。如果读者是初步接触Python,并且使用Python的目的就是数据挖掘,那么相信本文的介绍对你来说是比较充足的了。
IT阅读排行榜
2020/04/12
8150
【python语言学习】基础合集
eval()函数经常和input函数一起使用,用来获取用户输入的数字 变量=eval(input(‘提示性文字’))
司六米希
2022/11/15
2.2K0
【python语言学习】基础合集
实验三 序列数据处理程序设计
2、掌握字符串的输入和输出,会使用切片的方式访问字符串中的值,掌握常见的字符串的内建函数。
背雷管的小青年
2020/06/07
2K0
Python语言程序设计之三--列表Li
最近在学习列表,在这里卡住了很久,主要是课后习题太多,而且难度也不小。像我看的这本《Python语言程序设计》--梁勇著,列表和多维列表两章课后习题就有93道之多。我的天!但是题目出的非常棒,许多题目都具有相似性。这倒不是说这些题目类似,而是它们都会用到某一个特定的函数,或者会用到某一个特定的算法。这里我要整理一下常见的列表操作和容易犯错的地方。
py3study
2020/01/17
1.2K0
python123《Python语言程序设计》程序题答案 (第1周)
Python基本语法元素 (第1周)一、测验题(一)Hello World的条件输出(二)数值运算
用户7886150
2021/01/27
3.4K0
Python基础入门笔记(一)
既然学习 Python,那么至少得了解下这门语言,知道 Python 代码执行过程吧。Python 的历史有兴趣的百度百科下就有,这个不多说了。
py3study
2020/01/10
9150
Python小白的蜕变之旅:从环境搭建到代码规范(1/10)
【该文详细指导如何从Python官网下载对应Windows、Linux和Mac版本,包括自定义安装并添加至系统路径。还介绍了Windows环境下安装验证及使用pip扩展知识的过程。】
正在走向自律
2025/05/02
3530
Python小白的蜕变之旅:从环境搭建到代码规范(1/10)
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
这里,switch表达式choice的值会依次与case 1、case 2、case 3进行比较,如果choice等于1,就会执行printf("打开文件\n");,然后遇到break语句,跳出switch结构;如果choice的值与所有case常量都不匹配,就会执行default分支下的语句,提示用户输入无效。
Rossy Yan
2024/12/27
1200
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
Python计算机二级模拟题,现在开始!
2016年开始人工智能大数据的火热引发了python学习的狂潮,也引发了全国计算机等级考试(National Computer Rank Examination,简称NCRE)的注意,NCRE赶紧趁热打铁弄个python计算机二级考试,众多网友一下子乐呵呵,总所周知python易学,面向对象和解释性的特性让编程不再困难,这几天恰逢计算机等级考试,我从python123网站弄了一套模拟题给大家做做,说不定你们做完后,马上端正态度摩拳擦掌跃跃欲试准备报考还说不定呢。
昱良
2019/08/23
2.4K0
Python计算机二级模拟题,现在开始!
【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识
Python是一种高级、解释型、通用的编程语言,由Guido van Rossum于20世纪90年代初创立。Python以其简洁易读的语法和强大的功能而闻名,使其成为新手和经验丰富的开发人员的首选语言之一。
空白诗
2024/06/24
2320
《Python语言程序设计基础》嵩天著-第2章程序部分练习题答案
《Python语言程序设计基础》嵩天著-第2章程序部分练习题答案2.11思考与联系 画同心圆靶盘程序练习题 2.1 方法一程序练习题 2.1 方法二程序练习题 2.2 汇率兑换程序程序练习题 2.3 七彩蟒蛇程序练习题 2.4 绘制三角形程序练习题 2.5 叠边等边三角形 方法一程序练习题 2.5 叠边等边三角形 方法二程序练习题 2.6 无角正方形程序练习题 2.7 六角形程序练习题 2.8 正方形螺旋线
用户7886150
2020/12/04
1K0
Python计算机二级考试指南
6. 了解Python计算生态在以下方面(不限于)的主要第三方库名称:网络爬虫、数据分析、数据可视化、机器学习、Web开发等。
乐心湖
2020/07/31
9380
「Python爬虫系列讲解」二、Python知识初学
Python是Guido Van Rossum在1989年开发的一种脚本新解释语言,是ABC语言的一种继承。 由于作者是Monty Python喜剧团的一名爱好者,故将其命名为Python(蟒蛇)
荣仔_最靓的仔
2021/02/02
8970
「Python爬虫系列讲解」二、Python知识初学
C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
《C程序设计(第五版》是由谭浩强编著,2017年清华大学出版社出版的“十二五”普通高等教育本科国家级规划教材、北京市高等教育精品立项项目教材、中国高等院校计算机基础教育课程体系规划教材。该教材是既可作为高等学校各专业的正式教材,也适合读者自学。 该教材共10章,主要内容包括:设计和C语言,算法——程序的灵魂,最简单的C程序设计——顺序程序设计,选择结构程序设计等。
MIKE笔记
2023/03/22
3.6K0
推荐阅读
相关推荐
嵩天老师-Python语言程序设计-Python123配套练习测验题目汇总整理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档