首页 > 数据库 >【昌哥IT课堂】MySQL8.4.0新特性:FLUSH_PRIVILEGES动态权限细化与隔离[译]

【昌哥IT课堂】MySQL8.4.0新特性:FLUSH_PRIVILEGES动态权限细化与隔离[译]

时间:2024-10-29 18:22:49浏览次数:4  
标签:昌哥 PRIVILEGES FLUSH MySQL8.4 rows sec mysql 权限

介绍
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

 

标签:昌哥,PRIVILEGES,FLUSH,MySQL8.4,rows,sec,mysql,权限
From: https://www.cnblogs.com/shukuinfo/p/18514114

相关文章

  • windows安装MySQL8.4.3LTS
    windows安装MySQL8.4.3LTS第一步:下载压缩文件https://dev.mysql.com/downloads/mysql/第二步:解压压缩包以及编写配置my.ini配置[mysqld]#skip_grant_tables#设置3306端口port=3306#设置mysql的安装目录basedir=D:\\Software\\mysql-8.4.3-winx64#设置mysql数据库......
  • CentOS7下安装Mysql8.4
    一、检查先检查下有没有安装过MySqlpsajx|grepmysql#检查是否有mysql的进程psajx|grepmariabd#检查是否有mariabd的进程如果有,先停掉systemctlstopmysqld#关闭进程再看是否有Mysql安装包rpm-qa|grepmysql如果有,批量化删除安装包rpm-qa|......
  • mysql8.4:搭建主从复制(mysql 8.4.1)
    一,主库上:修改配置文件1,配置文件:/etc/my.cnf中,增加:server-id=1说明:无需指明logbin的值,因为它的默认值就是打开的,SHOWVARIABLESLIKE'log_bin';返回:说明:主库的server-id要和从库的server-id区分开,一般主库用1,其他各从库用2及以后的数字二,主库上:创建备份账号1,......
  • MySQL8.4.0安装
    1.官网下载压缩包官网地址:https://downloads.mysql.com/archives/community/2.选取需要的包上传Linux下载完成:解压完成:从中选取下列rpm包:上传至linux:这里上传到路径:/usr/local/mysql(cd/usr/local/;sudomkdirmysql#没有就创建 )3.按顺序下载(rpm)  ......
  • [昌哥IT课堂]|欢迎 MySQL 9.0,回顾 Oracle 在 8.0 版中的管理(译)
    对于新兴技术和社区的管理是相对容易的。经过29年发展,MySQL已成为全球数百万用户中使用最广泛且备受信任的开源数据库之一。在这一规模的社区领导中可能存在复杂性。我们努力寻求稳定和创新的平衡,为客户提供稳定可预测的平台,并为技术用户提供新功能。Oracle通过投资于技术的工......
  • rocky linux mysql8.4主从环境搭建以及数据库备份全过程
    准备工作切换到root账户ubuntu系统执行sudo-i切换到root方便操作查看系统是否支持glibc2.28因为安装的版本比较新需要新版glic2.28redhat、centos系列使用以下命令strings/lib64/libc.so.6|grepGLIBC_2.281有输出版本号证明支持debian、ubuntu系列使用以下命令s......
  • [昌哥IT课堂]|如何确定 MySQL 服务器是否为 LTS 版本(译)
     根据支持LTS(长期支持)发布的新发布模型,给定的MySQL服务器将分为以下两类:要么是LTS版本。要么是创新版本。本博客文章将解释如何确定给定的MySQL服务器是否为LTS版本。 定义发布类型MySQL服务器源代码存储库中包含一个名为MYSQL_VERSION的文件,用于定义当前发......
  • 【昌哥IT课堂】MySQL8.0新特性之不可见主键
     一、概述作为MySQLDBA,相信大家都经历过在复制模式下,如果没有主键,遇到loaddata,大事务,ddl等有大量表数据行扫描的行为时,会带来严重的主从延迟,给数据库稳定性和数据一致性带来隐患。MySQL8.0.30新版本为我们提供了一个新特性-(GeneratedInvisiblePrimaryKeys)简称GI......
  • [20240826]奇怪ORA-01031 insufficient privileges报错.txt
    [20240826]奇怪ORA-01031insufficientprivileges报错.txt--//遇到的奇怪ORA-01031insufficientprivileges情况,做一个分析:1.环境:SYS@book01p>@ver2==============================PORT_STRING                  :x86_64/Linux2.4.xxVERSION     ......
  • [昌哥IT课堂]使用MySQL Shell 部署沙盒数据库实例详解
     概述:这部分解释了如何使用AdminAPI设置沙盒部署。部署和使用本地MySQL的沙盒实例是开始探索AdminAPI的好方法。在将功能部署到生产服务器之前,您可以在本地测试功能。AdminAPI具有内置功能,用于创建正确配置的沙箱实例,以便在本地部署的情况下与InnoDBCluster、InnoDBClusterS......