首页 > 数据库 >MySQL动态权限详解

MySQL动态权限详解

时间:2024-06-18 13:03:42浏览次数:18  
标签:8.0 动态 ADMIN 详解 MySQL 服务器 权限

MySQL数据库系统在管理用户访问控制时,除了传统的静态权限之外,还引入了动态权限的概念。动态权限机制为系统管理员提供了更为灵活和细致的权限管理方式,允许根据运行时环境和特定组件的需求来定义和授予权限。本文将深入探讨MySQL动态权限的特性和应用方法。

动态权限的基本概念

动态权限与服务器启动时即已内置的静态权限相对,它们是在运行时由服务器或特定组件定义的。这意味着动态权限的存在与否依赖于相关组件是否被启用。例如,某些插件可能在安装时注册自己的动态权限,而这些权限只有在该插件激活时才生效。动态权限的设计使得权限管理能够更加适应多样化的应用场景和安全需求。

动态权限概览:

  • APPLICATION_PASSWORD_ADMIN(从MySQL 8.0.14起):为双密码功能服务,允许用户在修改自身账户时使用RETAIN CURRENT PASSWORDDISCARD OLD PASSWORD子句。
  • AUDIT_ABORT_EXEMPT(自MySQL 8.0.28始):允许查询绕过审计日志过滤器中的“abort”限制,由audit_log插件定义。
  • AUDIT_ADMIN:支持审计日志的管理。
  • NDB_STORED_USER(自NDB 8.0.18起):允许用户在NDB集群中存储,角色带有此权限也会被存储。
  • PASSWORDLESS_USER_ADMIN(自MySQL 8.0.27起):用于无密码账户的管理,创建无密码账户或处理复制用户时需要此权限。
  • PERSIST_RO_VARIABLES_ADMIN:结合SYSTEM_VARIABLES_ADMIN,允许使用SET PERSIST_ONLY命令只将只读系统变量持久化到配置文件,不影响运行时值。
  • REPLICATION_APPLIER:使账户能作为复制通道的权限检查用户,并执行mysqlbinlog输出中的BINLOG语句。
  • REPLICATION_SLAVE_ADMIN:允许连接到复制源服务器,使用START REPLICASTOP REPLICA管理复制,以及变更复制源设置。
  • RESOURCE_GROUP_ADMIN:提供资源组的全面管理能力,包括创建、修改和删除资源组,以及线程和语句的分配。
  • RESOURCE_GROUP_USER:仅允许用户将其线程和语句分配给资源组。
  • SET_USER_ID:允许在执行视图或存储程序时设定有效的授权ID,可指定任何账户作为DEFINER,且自MySQL 8.0.22起,能绕过防止存储对象成为孤儿或被意外采用的安全检查。
  • SHOW_ROUTINE(自MySQL 8.0.20起):允许访问所有存储例程的定义和属性,即使用户不是定义者。
  • SKIP_QUERY_REWRITE(自MySQL 8.0.31起):发出的查询不受Rewriter插件重写影响。
  • SYSTEM_USER(自MySQL 8.0.16起):区分系统用户与普通用户,系统用户拥有此权限。
其他特定场景权限包括:
  • FIREWALL_ADMINFIREWALL_EXEMPTFIREWALL_USER:分别用于管理、豁免和更新个人防火墙规则,由MYSQL_FIREWALL插件定义。
  • FLUSH_* 系列权限:如FLUSH_OPTIMIZER_COSTSFLUSH_STATUS等,允许执行相应的FLUSH语句,用于优化器成本刷新、状态刷新等。
  • GROUP_REPLICATION_ADMIN:管理Group Replication,包括启动/停止、一致性设置等。
  • GROUP_REPLICATION_STREAM:允许账户用于Group Replication的组通信连接。
  • INNODB_REDO_LOG_ARCHIVEINNODB_REDO_LOG_ENABLE:管理InnoDB重做日志存档和启用/禁用。
  • MASKING_DICTIONARIES_ADMIN:管理数据屏蔽词典,增删词典条目。

动态权限的注册与管理

MySQL服务器内部维护着一个动态权限的注册表,这些权限存储在内存中,并在服务器关闭时进行注销。组件(如插件)在安装初始化阶段通常会自动注册其定义的动态权限,但在卸载时并不会自动注销这些权限。重复安装同一组件不会因为权限已经注册而产生警告或错误。

动态权限仅在全球级别(全局范围)有效,且服务器通过mysql.global_grants系统表记录用户账户的动态权限分配情况。当服务器启动时(除非使用了--skip-grant-tables选项),会自动注册这个表中列出的所有动态权限。此外,GRANTREVOKE语句可以修改这些权限的分配状态,且这些更改是持久化的,不会因服务器重启而丢失。

动态权限的授予与撤销

在使用GRANTREVOKE语句时,如果指定了非静态权限,服务器会检查当前已注册的动态权限列表,如果找到匹配项则进行授权,否则报错提示未知权限。当使用GRANT ALL [PRIVILEGES]全局级别指令时,它会授予所有静态全局权限及当前已注册的所有动态权限,但之后新注册的动态权限不会追溯性地授予任何账户。相反,REVOKE ALL则会撤销所有已授予的静态和动态权限。

迁移账户从SUPER到动态权限

MySQL 8.0版本中,许多原本需要SUPER权限的操作现在关联有更具体范围的动态权限。这一改变旨在提高安全性,使数据库管理员能够避免广泛授予SUPER权限,而是根据实际操作需求精细化定制用户权限。由于SUPER权限已被废弃,未来版本中可能会被移除,因此,对于拥有SUPER权限的账户,应提前迁移至相应的动态权限上,以确保在SUPER权限移除后,这些账户仍能执行必要的操作。

示例与实践

例如,若要授予用户u1控制复制(包括组复制)和修改系统变量的权限,可使用以下GRANT语句:

GRANT REPLICATION_SLAVE_ADMIN, GROUP_REPLICATION_ADMIN, BINLOG_ADMIN
ON . TO 'u1'@'localhost';

动态权限的授予情况可通过SHOW GRANTS命令和INFORMATION_SCHEMA.USER_PRIVILEGES表查询得知。

标签:8.0,动态,ADMIN,详解,MySQL,服务器,权限
From: https://blog.csdn.net/jkzyx123/article/details/139748695

相关文章

  • bitset详解以及用法
    butset详解以及用法bitset是C++标准库中的一个类,它提供了一种方便的方式来操作位序列,常用于位运算和状态压缩。下面我将为您详细介绍bitset的基本概念、基本用法以及一些常用的成员函数。基本概念1、bitset可以看作是一个多位二进制数,其每一位都是0或1。2、它是......
  • 【MySQL】复合查询和内外连接
    文章目录MySQL复合查询和内外连接1.复合查询1.1多表查询1.2自连接1.3子查询单行子查询多行子查询多列子查询from中使用子查询合并查询2.内外连接1.INNERJOIN2.LEFTJOIN3.RIGHTJOIN4.FULLJOIN5.CROSSJOINMySQL复合查询和内外连接1.复合查询1.1......
  • MySQL:创建账户及修改密码
    1、创建账户MySQL5.8:grantallprivilegeson*.*totst@%identifiedby'123456';MySQL8.0:createuser'tst'@'%'identifiedby'123456';grantallprivilegeson*.*to'tst'@'%'withgrantoption;......
  • 【JVM】详解双亲委派机制
    双亲委派机制是Java类加载器的一种工作模式,确保类加载的一致性和安全性。以下是详细的定义、优缺点以及如何破坏双亲委派机制的描述。双亲委派机制的定义双亲委派机制(ParentDelegationModel)是一种类加载器的工作模式。在这种模式下,类加载器在加载类时,会先将加载请求委派......
  • mysql数据库名带下划线等特殊字符时,分权限报错
    原文链接:mysql数据库名带下划线分权限报错_mob64ca12f24f3a的技术博客_51CTO博客 MySQL数据库名带下划线分权限报错解析在使用MySQL进行数据库操作时,我们经常会遇到数据库名带下划线导致权限报错的情况。这是因为MySQL对于数据库名中的下划线有特殊的处理机制,容易导致权限控制......
  • MySQL入门学习.子查询.IN
        IN子查询是MySQL中一种常见的子查询类型,用于在查询中确定一个值是否在另一个查询的结果集中。IN子查询的特点是简洁明了,它可以在一个查询中方便地检查一个值是否在一组值中,非常适用于需要进行条件验证或关联查询的情况。   在MySQL中,有以下几种常见的......
  • MySQL入门学习-子查询.EXISTS
        子查询EXISTS是MySQL中的一种子查询类型,用于检查子查询结果集是否为空。如果子查询结果集不为空,则EXISTS子查询返回TRUE;否则,返回FALSE。    子查询EXISTS的特点是它只关心子查询结果集是否为空,而不关心结果集中的具体内容。这使得EXISTS子查......
  • MySQL 情节:SQL 语句的表演
    本文由ChatMoney团队出品第一幕:解析与优化-“翻译官与谋士”SQL解析器是第一个上场的角色,任务就是把SQL请求翻译成MySQL能听懂的语言。就像你点餐时,服务员得听懂你到底要什么菜。不然你说“我要一盘炒青菜”,结果服务员听成了“我要一盘草皮”,那谁也吃不下去啊!接下来......
  • MySQL 的故事:一场 SQL 语句的戏剧演绎
    本文由ChatMoney团队出品第一幕:解析与优化-“翻译官与谋士”SQL解析器是第一个上场的角色,任务就是把SQL请求翻译成MySQL能听懂的语言。就像你点餐时,服务员得听懂你到底要什么菜。不然你说“我要一盘炒青菜”,结果服务员听成了“我要一盘草皮”,那谁也吃不下去啊!接下来......
  • Windows11[虚拟机] Kettle 通过SSH隧道 连接远程[Mac] Mysql数据库
    Kettle无法直接连接使用SSH通道的MySQL,需要通过SSH隧道(推荐),具体操作如下所示:一、搭建XshellSSH隧道转发1、点击“连接”借助Xshell7,首先创建会话mac(名字随便写),右键-->属性,在弹出窗口中填写名称(随便写),填写主机:SSH隧道的ip地 点击“添加”按钮出现如下,填写源主机:localh......