赞
踩
MySQL数据库系统在管理用户访问控制时,除了传统的静态权限之外,还引入了动态权限的概念。动态权限机制为系统管理员提供了更为灵活和细致的权限管理方式,允许根据运行时环境和特定组件的需求来定义和授予权限。本文将深入探讨MySQL动态权限的特性和应用方法。
动态权限与服务器启动时即已内置的静态权限相对,它们是在运行时由服务器或特定组件定义的。这意味着动态权限的存在与否依赖于相关组件是否被启用。例如,某些插件可能在安装时注册自己的动态权限,而这些权限只有在该插件激活时才生效。动态权限的设计使得权限管理能够更加适应多样化的应用场景和安全需求。
RETAIN CURRENT PASSWORD
和DISCARD OLD PASSWORD
子句。SYSTEM_VARIABLES_ADMIN
,允许使用SET PERSIST_ONLY
命令只将只读系统变量持久化到配置文件,不影响运行时值。mysqlbinlog
输出中的BINLOG语句。START REPLICA
和STOP REPLICA
管理复制,以及变更复制源设置。FLUSH_OPTIMIZER_COSTS
、FLUSH_STATUS
等,允许执行相应的FLUSH
语句,用于优化器成本刷新、状态刷新等。MySQL服务器内部维护着一个动态权限的注册表,这些权限存储在内存中,并在服务器关闭时进行注销。组件(如插件)在安装初始化阶段通常会自动注册其定义的动态权限,但在卸载时并不会自动注销这些权限。重复安装同一组件不会因为权限已经注册而产生警告或错误。
动态权限仅在全球级别(全局范围)有效,且服务器通过mysql.global_grants
系统表记录用户账户的动态权限分配情况。当服务器启动时(除非使用了--skip-grant-tables
选项),会自动注册这个表中列出的所有动态权限。此外,GRANT
和REVOKE
语句可以修改这些权限的分配状态,且这些更改是持久化的,不会因服务器重启而丢失。
在使用GRANT
和REVOKE
语句时,如果指定了非静态权限,服务器会检查当前已注册的动态权限列表,如果找到匹配项则进行授权,否则报错提示未知权限。当使用GRANT ALL [PRIVILEGES]
全局级别指令时,它会授予所有静态全局权限及当前已注册的所有动态权限,但之后新注册的动态权限不会追溯性地授予任何账户。相反,REVOKE ALL
则会撤销所有已授予的静态和动态权限。
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
表查询得知。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。