介绍
MySQL 支持 RELOAD 权限。现在,想象一个数据库用户被授予了 RELOAD 权限,这允许该用户在系统上执行 FLUSH PRIVILEGES 语句。假设该用户意外地执行了另一个强大的语句,比如 RESET 或 FLUSH TABLES。这可能会导致一些问题,对吧?

考虑一个数据库管理员创建一个用户,目的是允许该用户仅执行 FLUSH PRIVILEGES 语句。然后管理员为此目的授予了 RELOAD 权限,只是意识到这也赋予了用户执行许多强大操作的能力,比如:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

mysql> RESET BINARY LOGS AND GTIDS;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH TABLES;
Query OK, 0 rows affected (0.01 sec)

在MySQL 8.0版本及之前的版本中,RELOAD 权限存在的问题是允许用户在服务器上执行各种强大的语句,包括任何类型的 FLUSH 或 RESET 命令。这会阻止管理员对执行特定语句的用户进行更精细的控制。

为了解决这个问题,在 MySQL 8.4 Community 和 Enterprise 版本以及 HeatWave 中,我们引入了一种新的权限:FLUSH_PRIVILEGES。当授予了这个权限时,它允许用户执行 FLUSH PRIVILEGES 语句,而无需 RELOAD 权限,从而提供了对执行 FLUSH PRIVILEGES 语句的更精细级别控制,这是在对 MySQL 权限表进行更改后刷新内存权限的关键操作。

用法
让我们看看在 MySQL 8.4 中如何使用这个新的权限:

以 root 用户身份连接,创建一个测试用户,并为该用户分配 FLUSH_PRIVILEGES 权限,而不是 RELOAD,就像这样:
mysql> CREATE USER test@localhost identified by 'Shukuinfo123.';
Query OK, 0 rows affected (0.07 sec)

mysql> GRANT FLUSH_PRIVILEGES ON *.* TO test@localhost;
Query OK, 0 rows affected (0.01 sec)

测试用户test@localhost 现在可以无问题地执行FLUSH PRIVILEGES语句,但不允许执行其他FLUSH或RESET语句。你可以在这里看到这一点:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> RESET BINARY LOGS AND GTIDS;
ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD or FLUSH_TABLES privilege(s) for this operation

mysql> FLUSH TABLES;
ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD or FLUSH_TABLES privilege(s) for this operation

附加信息:
FLUSH_PRIVILEGES可以与角色一起使用。

要查看这个功能,创建一个名为privs_flush的角色,并将FLUSH_PRIVILEGES权限分配给这个角色。然后将这个角色分配给另一个测试用户'test2';这允许用户test2执行FLUSH PRIVILEGES语句。你可以通过执行这里显示的语句来实现这一点:
mysql> CREATE ROLE privs_flush;
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT FLUSH_PRIVILEGES ON *.* TO privs_flush@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE USER test2@localhost identified by 'Shukuinfo123.';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT privs_flush TO test2@localhost;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS FOR test2@localhost;
+------------------------------------------------+
| Grants for test2@localhost |
+------------------------------------------------+
| GRANT USAGE ON *.* TO `test2`@`localhost` |
| GRANT `privs_flush`@`%` TO `test2`@`localhost` |
+------------------------------------------------+
2 rows in set (0.00 sec)

以test2用户身份连接后,你可以看到这个角色如何影响用户的权限:

mysql> FLUSH PRIVILEGES;
ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD or FLUSH_PRIVILEGES privilege(s) for this operation

mysql> SET ROLE privs_flush;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH TABLES;
ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD or FLUSH_TABLES privilege(s) for this operation

请注意,root账户默认拥有FLUSH_PRIVILEGES权限。

升级/降级注意事项
为了确保升级过程中的顺利过渡,拥有RELOAD权限的用户在升级时会自动获得新权限。

如果MySQL服务器被降级,那么有两种可能的情况:

1.降级后的服务器版本不支持FLUSH_PRIVILEGES权限:
在这种情况下,该权限没有效果,也就是说,除非用户拥有RELOAD权限,否则无法执行FLUSH PRIVILEGES语句。降级后,如果存在FLUSH_PRIVILEGES授权,FLUSH_PRIVILEGES仍然可以被授予或撤销,但没有任何效果。一旦最后一个授权被撤销,并且服务器重启后,就不再可能授予FLUSH_PRIVILEGES权限。
2.降级后的服务器版本支持FLUSH_PRIVILEGES权限:
拥有FLUSH_PRIVILEGES权限的用户仍然能够执行FLUSH PRIVILEGES语句。仍然可以使用GRANT或REVOKE来授予或撤销FLUSH_PRIVILEGES权限。

结论
新权限为管理员提供了对用户权限更精细的控制,从而满足了对FLUSH PRIVILEGES语句进行更细粒度访问控制的需求。在MySQL 8.4社区版和企业版以及HeatWave中寻找FLUSH_PRIVILEGES。

一如既往,非常感谢您使用MySQL!

翻译转载地址:https://blogs.oracle.com/mysql/post/flushprivileges-a-new-dynamic-privilege-to-execute-flush-privileges

【昌哥IT课堂】MySQL8.4.0新特性:FLUSH_PRIVILEGES动态权限细化与隔离[译]的更多相关文章

  1. 跨时代的MySQL8.0新特性解读

    目录 MySQL发展历程 MySQL8.0新特性 秒级加列 性能提升 文档数据库 SQL增强 共用表表达式(CTEs) 不可见索引(Invisible Indexes) 降序索引(Descending ...

  2. Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)

    1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...

  3. Mysql 8.0 新特性测试

    Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Po ...

  4. 【mysql】mysq8.0新特性

    一.MySQL8.0简介   mysql8.0现在已经发布,2016-09-12第一个DM(development milestone)版本8.0.0发布.新的版本带来很多新功能和新特性,对性能也得到 ...

  5. MySQL 8.0 新特性梳理汇总

    一 历史版本发布回顾 从上图可以看出,基本遵循 5+3+3 模式 5---GA发布后,5年 就停止通用常规的更新了(功能不再更新了): 3---企业版的,+3年功能不再更新了: 3 ---完全停止更新 ...

  6. 浅谈Tuple之C#4.0新特性那些事儿你还记得多少?

    来源:微信公众号CodeL 今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的: 看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办 ...

  7. Java基础和JDK5.0新特性

    Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...

  8. Visual Studio 2015速递(1)——C#6.0新特性怎么用

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  9. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  10. 背水一战 Windows 10 (1) - C# 6.0 新特性

    [源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...

随机推荐

  1. IDEA - ruoyi - srpingboot - 离线运行

    前提:有项目对应的repository文件,RY的DB配置正常(mysql新增schema ry, 执行 /sql下的sql文件,同步调整ruoyi-admin下的application-druid. ...

  2. 数据库中查询含有某个emoji表情的行数据

    数据库中查询含有某个emoji表情的行数据 MySQL的情况 代码如下 ​ create table tt6(id int, name varchar(800)); insert into tt6 s ...

  3. C++: 虚函数,一些可能被忽视的细节

    C++: 虚函数,一些可能被忽视的细节 引言:关于C++虚函数,对某些细节的理解不深入,可能导致我们的程序无法按预期结果运行,或是表明我们对其基本原理理解不够透彻.本文详细解答以下几个问题:实现多态, ...

  4. 补: Rest 风格请求处理的的内容补充(1)

    补: Rest 风格请求处理的的内容补充(1) Rest风格请求:注意事项和细节 客户端是PostMan 可以直接发送Put,delete等方式请求,可不设置Filter 如果哟啊SpringBoot ...

  5. Ubuntu开机直接进入grub终极解决方法

    https://zhuanlan.zhihu.com/p/59062434 我遇到的问题是,每一步都操作没问题,但是开机还是会进入grub.最后只能进bios解决了. 我的服务器是supermicro ...

  6. SNERT内部集训-WEB

    SNERT内部集训-WEB Day1-2 文件上传 靶场搭建 docker安装,docker pull c0ny1/upload-labs,docker run -it -d -p 8080:80 a ...

  7. Hadoop & Redis未授权漏洞实战——Vulfocus服务攻防

    什么是未授权访问漏洞?Hadoop & Redis靶场实战--Vulfocus服务攻防 一.介绍 未授权访问,也称为未经授权的访问或非法访问,是指在没有得到适当权限或授权的情况下,个人或系统访 ...

  8. 如何使用hugo搭建个人博客

    整体架构 在 github 托管两个仓库,仓库 1 保存博客内容源文件,仓库 2 保存 Hugo 生成的网站文件,博客内容仓库通过 git submodule 的方式在仓库 2 管理.使用 Obsid ...

  9. Shiro-721—漏洞分析(CVE-2019-12422)

    目录 Padding Oracle Attack 原理 PKCS5填充 怎么爆破攻击 漏洞原理 源码分析 漏洞复现 本文基于shiro550漏洞基础上分析,建议先看上期内容: https://blog ...

  10. mac M1,M2,M3芯片踩坑 nodejs ruby brew

    问题&解决方法 先说解决方法, 感兴趣的可以了解事情的经过, 也许我描述的问题不专业, 但确实解决了当下的问题, 欢迎留言讨论 这里主要是两个问题, 一个是启用rosetta模式失败, 一个是 ...