授予MySQL帐户的特权决定了该帐户可以执行哪些操作。MySQL特权在应用的上下文和不同的操作级别上有所不同:
管理权限允许用户管理MySQL服务器的操作。这些特权是全局的,因为它们不特定于特定的数据库。
数据库特权适用于数据库及其中的所有对象。可以为特定数据库授予这些特权,也可以全局授予这些特权,以便它们适用于所有数据库。
数据库对象(如表、索引、视图和存储例程)的特权可以授予给数据库中的特定对象,授予给数据库中给定类型的所有对象(例如,数据库中的所有表),或者全局授予给所有数据库中给定类型的所有对象。
特权的区别还在于它们是静态的(内置于服务器中)还是动态的(在运行时定义)。特权是静态的还是动态的都会影响将其授予用户帐户和角色的可用性。有关静态和动态特权之间区别的信息,请参见静态与动态特权)。
的授权表中存储有关帐户特权的信息mysql
系统数据库。有关这些表的结构和内容的描述,请参见第6.2.3节“授予表格”.MySQL服务器在启动时将授权表的内容读入内存,并在中指定的情况下重新加载它们第6.2.13节,“当特权更改生效时”.服务器将访问控制决策建立在授权表的内存副本上。
一些MySQL版本对授权表进行了更改,以添加新的特权或特性。为了确保可以利用任何新功能,每当升级MySQL时,请将授权表更新为当前结构。看到第2.11节“升级MySQL”.
下面的部分总结了可用的特权,提供了每个特权的更详细的描述,并提供了使用指南。
中使用的静态特权名格兰特
而且撤销
语句,以及与授予表中的每个特权相关联的列名,以及应用该特权的上下文。
表6.2 GRANT和REVOKE允许的静态特权
特权 | 格兰特表列 | 上下文 |
---|---|---|
所有(特权) |
的同义词”所有权限” | 服务器管理 |
改变 |
Alter_priv |
表 |
改变日常 |
Alter_routine_priv |
存储程序 |
创建 |
Create_priv |
数据库、表或索引 |
创建角色 |
Create_role_priv |
服务器管理 |
创建程序 |
Create_routine_priv |
存储程序 |
创建表空间 |
Create_tablespace_priv |
服务器管理 |
创建临时表 |
Create_tmp_table_priv |
表 |
创建用户 |
Create_user_priv |
服务器管理 |
创建视图 |
Create_view_priv |
的观点 |
删除 |
Delete_priv |
表 |
下降 |
Drop_priv |
数据库、表或视图 |
下降的作用 |
Drop_role_priv |
服务器管理 |
事件 |
Event_priv |
数据库 |
执行 |
Execute_priv |
存储程序 |
文件 |
File_priv |
对服务器主机的文件访问 |
GRANT选项 |
Grant_priv |
数据库、表或存储例程 |
指数 |
Index_priv |
表 |
插入 |
Insert_priv |
表或列 |
锁表 |
Lock_tables_priv |
数据库 |
过程 |
Process_priv |
服务器管理 |
代理 |
看到proxies_priv 表格 |
服务器管理 |
参考文献 |
References_priv |
数据库或表 |
重新加载 |
Reload_priv |
服务器管理 |
复制客户端 |
Repl_client_priv |
服务器管理 |
复制的奴隶 |
Repl_slave_priv |
服务器管理 |
选择 |
Select_priv |
表或列 |
显示数据库 |
Show_db_priv |
服务器管理 |
显示视图 |
Show_view_priv |
的观点 |
关闭 |
Shutdown_priv |
服务器管理 |
超级 |
Super_priv |
服务器管理 |
触发 |
Trigger_priv |
表 |
更新 |
Update_priv |
表或列 |
使用 |
的同义词”没有特权” | 服务器管理 |
中使用的动态特权名格兰特
而且撤销
语句,以及应用该特权的上下文。
表6.3 GRANT和REVOKE允许的动态权限
特权 | 上下文 |
---|---|
APPLICATION_PASSWORD_ADMIN |
双重密码管理 |
AUDIT_ADMIN |
审计日志管理 |
BACKUP_ADMIN |
备份管理 |
BINLOG_ADMIN |
备份和复制管理 |
BINLOG_ENCRYPTION_ADMIN |
备份和复制管理 |
CLONE_ADMIN |
克隆管理 |
CONNECTION_ADMIN |
服务器管理 |
ENCRYPTION_KEY_ADMIN |
服务器管理 |
FIREWALL_ADMIN |
防火墙管理 |
FIREWALL_USER |
防火墙管理 |
FLUSH_OPTIMIZER_COSTS |
服务器管理 |
FLUSH_STATUS |
服务器管理 |
FLUSH_TABLES |
服务器管理 |
FLUSH_USER_RESOURCES |
服务器管理 |
GROUP_REPLICATION_ADMIN |
复制管理 |
INNODB_REDO_LOG_ARCHIVE |
重做日志归档管理 |
NDB_STORED_USER |
NDB集群 |
PERSIST_RO_VARIABLES_ADMIN |
服务器管理 |
REPLICATION_APPLIER |
PRIVILEGE_CHECKS_USER 对于复制区域通道 |
REPLICATION_SLAVE_ADMIN |
复制管理 |
RESOURCE_GROUP_ADMIN |
资源组管理 |
RESOURCE_GROUP_USER |
资源组管理 |
ROLE_ADMIN |
服务器管理 |
SESSION_VARIABLES_ADMIN |
服务器管理 |
SET_USER_ID |
服务器管理 |
SHOW_ROUTINE |
服务器管理 |
SYSTEM_USER |
服务器管理 |
SYSTEM_VARIABLES_ADMIN |
服务器管理 |
TABLE_ENCRYPTION_ADMIN |
服务器管理 |
VERSION_TOKEN_ADMIN |
服务器管理 |
XA_RECOVER_ADMIN |
服务器管理 |
与在运行时定义的动态特权相比,静态特权内置于服务器中。下面的列表描述了MySQL中可用的每个静态特权。
特定的SQL语句可能具有比这里所指出的更具体的特权需求。如果是,相关语句的描述将提供详细信息。
这些特权说明符是简写的”在给定特权级别上可用的所有特权”(除了
GRANT选项
).例如,授予所有
在全局级或表级,分别授予所有全局特权或所有表级特权。启用使用
ALTER TABLE
语句更改表的结构。ALTER TABLE
还需要创建
而且插入
特权。重命名表需要改变
而且下降
在旧桌子上,创建
,插入
在新桌子上。允许使用更改或删除存储例程(存储过程和函数)的语句。对于属于授予权限范围内且用户不是命名为例程的用户的例程
定义者
,也允许访问例程定义以外的例程属性。允许使用创建新数据库和表的语句。
启用使用
创建角色
声明。(创建用户
权限还允许使用创建角色
声明。)看到第6.2.10节“使用角色”.的
创建角色
而且下降的作用
特权没有特权那么强大创建用户
因为它们只能用于创建和删除帐户。它们不能被用作创建用户
可以修改帐户属性或重命名帐户。看到用户和角色互换性.允许使用创建存储例程(存储过程和函数)的语句。对于属于授予权限范围内且用户不是命名为例程的用户的例程
定义者
,也允许访问例程定义以外的例程属性。允许使用创建、更改或删除表空间和日志文件组的语句。
控件创建临时表
创建临时表
声明。在会话创建临时表之后,服务器不再对该表执行进一步的特权检查。正在创建的会话可以对表执行任何操作,例如
删除表
,插入
,更新
,或选择
.有关更多信息,请参见第13.1.20.2节,“创建临时表语句”.启用使用
创建视图
声明。允许从数据库中的表中删除行。
允许使用删除(删除)现有数据库、表和视图的语句。的
下降
权限使用ALTER TABLE……删除分区
语句。的下降
也需要特权截断表
.启用使用
下降的作用
声明。(创建用户
权限还允许使用下降的作用
声明。)看到第6.2.10节“使用角色”.的
创建角色
而且下降的作用
特权没有特权那么强大创建用户
因为它们只能用于创建和删除帐户。它们不能被用作创建用户
可以修改帐户属性或重命名帐户。看到用户和角色互换性.启用使用为事件调度程序创建、更改、删除或显示事件的语句。
允许使用执行存储例程(存储过程和函数)的语句。对于属于授予权限范围内且用户不是命名为例程的用户的例程
定义者
,也允许访问例程定义以外的例程属性。影响以下操作和服务器行为:
控件允许在服务器主机上读写文件
加载数据
而且选择……到输出文件
语句和LOAD_FILE ()
函数。的用户文件
特权可以读取服务器主机上任何世界可读或MySQL服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问这些文件中的任何一个。)支持在MySQL服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现特权表的文件。
启用使用
数据目录
或索引目录
表选项的创建表
声明。
作为一种安全措施,服务器不会覆盖现有文件。
若要限制可读写文件的位置,请设置
secure_file_priv
系统变量到特定目录。看到第5.1.8节,“服务器系统变量”.使您能够向其他用户授予或撤销您自己所拥有的特权。
的
过程
特权控制对服务器中执行的线程信息(即会话执行的语句信息)的访问。线程信息可用显示PROCESSLIST
声明中mysqladmin processlist命令,INFORMATION_SCHEMA。PROCESSLIST
表和性能架构processlist
表格可访问如下:请注意性能模式
线程
Table也提供线程信息,但是表访问使用不同的特权模型。看到第27.12.21.6节“线程表”.的
过程
权限还允许使用显示引擎
语句,访问INFORMATION_SCHEMA
InnoDB
表(名称以。开头的表)INNODB_
)和(从MySQL 8.0.21开始)访问INFORMATION_SCHEMA
文件
表格允许一个用户模拟或成为另一个用户。看到第6.2.18节“代理用户”.
外键约束的创建需要
参考文献
父表的特权。的
重新加载
启用以下操作:的使用
冲洗
声明。使用mysqladmin命令等价于
冲洗
操作:flush hosts
,flush-logs
,flush-privileges
,flush status
,刷新表
,flush-threads
,刷新
,重新加载
.的
重新加载
命令告诉服务器将授权表重新加载到内存中。flush-privileges
是的同义词吗重新加载
.的刷新
命令关闭并重新打开日志文件并刷新所有表。另一个冲洗,
命令执行的功能类似于xxx
刷新
,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件,flush-logs
是更好的选择吗刷新
.使用, mysqldump执行各种操作的选项
冲洗
操作:——flush-logs
而且——主数据
.的使用
重置的主人
而且重置副本| slave
语句。
启用使用
显示主状态
,显示副本|的slave状态
,显示二进制日志
语句。选项,使帐户可以请求对复制源服务器上的数据库进行的更新
显示副本|显示从主机
,显示RELAYLOG的事件
,显示BINLOG的事件
语句。类也需要此特权mysqlbinlog选项——read-from-remote-server
(- r
),——read-from-remote-master
.将此特权授予被副本用于连接到当前服务器作为其复制源服务器的帐户。允许从数据库中的表中选择行。
选择
声明要求选择
只有当它们实际访问表时才具有特权。一些选择
语句不能访问表,可以在没有任何数据库权限的情况下执行语句。例如,你可以用选择
作为一个简单的计算器,计算不引用表的表达式:选择1 + 1;选择π()* 2;
的
选择
对于读取列值的其他语句也需要特权。例如,选择
的右侧引用的列需要col_name
=expr
分配在更新
类中命名的列在哪里
条款删除
或更新
语句。命令使帐户能够查看数据库名称
显示数据库
声明。不具有此特权的帐户只能看到它们具有某些特权的数据库,如果服务器是用——skip-show-database
选择。启用使用
关闭
而且重新启动
语句,mysqladmin关闭命令,mysql_shutdown ()
C API函数。超级
是一种强大而深远的特权,不应该轻易授予。如果一个帐户只需要执行超级
操作时,可以通过授予一个或多个动态特权来实现所需的特权集,每个动态特权都提供更有限的功能。看到动态权限描述.请注意超级
已经被弃用,在MySQL的未来版本中应该会删除它。看到将帐户从SUPER迁移到动态特权.超级
影响以下操作和服务器行为:允许在运行时更改系统变量:
对应的动态权限为
SYSTEM_VARIABLES_ADMIN
.启用设置需要特殊权限的受限会话系统变量。
对应的动态权限为
SESSION_VARIABLES_ADMIN
.
另请参阅第5.1.9.1节“系统变量特权”.
启用对全局事务特征的更改(请参阅第13.3.7节“SET TRANSACTION语句”).
对应的动态权限为
SYSTEM_VARIABLES_ADMIN
.启用帐户启动和停止复制,包括“组复制”。
对应的动态权限为
REPLICATION_SLAVE_ADMIN
定期复制,GROUP_REPLICATION_ADMIN
组复制。启用使用
将复制源更改为
语句(from MySQL 8.0.23改变主
语句(MySQL 8.0.23之前),和改变复制过滤器
语句。对应的动态权限为
REPLICATION_SLAVE_ADMIN
.对应的动态权限为
BINLOG_ADMIN
.允许在执行视图或存储程序时设置有效授权ID。具有此权限的用户可以在
定义者
视图或存储程序的属性。对应的动态权限为
SET_USER_ID
.启用使用mysqladmin调试命令。
使
InnoDB
加密密钥轮换。对应的动态权限为
ENCRYPTION_KEY_ADMIN
.启用版本令牌用户定义函数的执行。
对应的动态权限为
VERSION_TOKEN_ADMIN
.控件的使用,可以授予和撤销角色
与管理选项
条款的格兰特
声明,非空的< graphml >
元素的内容ROLES_GRAPHML ()
函数。对应的动态权限为
ROLE_ADMIN
.启用对不允许的客户端连接的控制
超级
账户:启用使用
杀了
语句或mysqladmin杀死命令杀死属于其他帐户的线程。(一个帐户总是可以杀死自己的线程。)服务器不执行
init_connect
当系统变量内容超级
客户端连接。对象的一个连接
超级
客户端即使配置了连接限制max_connections
到达系统变量。处于脱机模式的服务器(
offline_mode
已启用)不会终止超级
的客户端连接,并接受新的连接超级
客户。的情况下也可以执行更新
read_only
启用系统变量。这适用于显式表更新和帐户管理语句的使用,如格兰特
而且撤销
它隐式地更新表。
上述连接控制操作对应的动态权限为
CONNECTION_ADMIN
.
您可能还需要
超级
如果启用了二进制日志记录,则可以创建或更改存储函数的特权第25.7节“存储程序二进制日志记录”.使触发操作。您必须对表具有为该表创建、删除、执行或显示触发器的权限。
当触发器被激活时(由具有执行权限的用户激活)
插入
,更新
,或删除
语句),触发器的执行要求定义触发器的用户仍然拥有触发
该表的特权。允许更新数据库中表中的行。
该特权说明符表示”没有特权。”它在全局级别使用
格兰特
指定从句,如使用GRANT选项
在权限列表中不指定特定的帐户权限。秀奖助金
显示使用
表示帐户在特权级别上没有特权。
动态特权是在运行时定义的,而静态特权是内置于服务器的。下面的列表描述了MySQL中可用的每个动态特权。
大多数动态特权在服务器启动时定义。其他则由特定组件或插件定义,如特权描述中所示。在这种情况下,特权是不可用的,除非定义它的组件或插件是启用的。
特定的SQL语句可能具有比这里所指出的更具体的特权需求。如果是,相关语句的描述将提供详细信息。
APPLICATION_PASSWORD_ADMIN
(MySQL 8.0.14新增)对于双密码功能,此特权支持使用
保留当前的密码
而且丢弃旧密码
条款为改变用户
而且设置密码
适用于您自己帐户的对账单。操作您自己的辅助密码需要此特权,因为大多数用户只需要一个密码。如果要允许一个帐户操作所有帐户的辅助密码,则应授予它
创建用户
特权,而不是APPLICATION_PASSWORD_ADMIN
.有关使用双重密码的更多信息,请参见第6.2.15节“密码管理”.
开启审计日志配置。该特权由
audit_log
插件;看到第6.4.5节,“MySQL企业审计”.的执行
为备份锁定实例
语句和对性能架构的访问log_status
表格请注意除了
BACKUP_ADMIN
,选择
上的特权log_status
表也需要对其进行访问。的
BACKUP_ADMIN
权限自动授予给具有重新加载
在执行从早期版本升级到MySQL 8.0的本地升级时。允许设置系统变量
binlog_encryption
,它激活或关闭二进制日志文件和中继日志文件的加密。控件没有提供此功能BINLOG_ADMIN
,SYSTEM_VARIABLES_ADMIN
,或SESSION_VARIABLES_ADMIN
特权。相关系统变量binlog_rotate_encryption_master_key_at_startup
,它在服务器重新启动时自动旋转二进制日志主密钥,不需要这种特权。的执行
克隆
语句。包括BACKUP_ADMIN
而且关闭
特权。启用使用
杀了
语句或mysqladmin杀死命令杀死属于其他帐户的线程。(一个帐户总是可以杀死自己的线程。)允许设置与客户端连接相关的系统变量,或绕过与客户端连接相关的限制。
CONNECTION_ADMIN
适用于这些系统变量的效果:init_connect
:服务器不执行init_connect
当系统变量内容CONNECTION_ADMIN
客户端连接。max_connections
:服务器只接受一个连接CONNECTION_ADMIN
客户端即使配置了连接限制max_connections
到达系统变量。offline_mode
:处于离线状态的服务器(offline_mode
已启用)不会终止CONNECTION_ADMIN
的客户端连接,并接受新的连接CONNECTION_ADMIN
客户。read_only
:即使在read_only
启用系统变量。这适用于显式表更新和帐户管理语句的使用,如格兰特
而且撤销
它隐式地更新表。
使
InnoDB
加密密钥轮换。允许用户为任何用户管理防火墙规则。该特权由
MYSQL_FIREWALL
插件;看到第6.4.7节,“MySQL企业防火墙”.使用户可以更新自己的防火墙规则。该特权由
MYSQL_FIREWALL
插件;看到第6.4.7节,“MySQL企业防火墙”.FLUSH_OPTIMIZER_COSTS
(MySQL 8.0.23新增)启用使用
冲洗OPTIMIZER_COSTS
声明。FLUSH_STATUS
(MySQL 8.0.23新增)启用使用
冲洗状态
声明。FLUSH_TABLES
(MySQL 8.0.23新增)启用使用
刷新表
声明。FLUSH_USER_RESOURCES
(MySQL 8.0.23新增)启用使用
冲洗USER_RESOURCES
声明。启用该帐户使用
开始组复制
而且停止组复制
语句,以更改全局设置group_replication_consistency
系统变量,并使用group_replication_set_write_concurrency ()
而且group_replication_set_communication_protocol ()
udf。将此特权授予用于管理作为复制组成员的服务器的帐户。允许帐户激活和取消激活重做日志归档。
启用使用
修改实例{enable | disable} innodb redo_log
语句来启用或禁用重做日志记录。在MySQL 8.0.21中介绍。看到禁用重做日志.
允许在所有用户之间共享和同步用户或角色及其特权
NDB
当MySQL服务器加入一个给定的NDB集群时,立即启用MySQL服务器。此特权仅在NDB
已启用存储引擎。对给定用户或角色的任何权限更改或撤销都会立即与所有连接的MySQL服务器(SQL节点)同步。您应该意识到,不能保证影响来自不同SQL节点的特权的多条语句以相同的顺序在所有SQL节点上执行。因此,强烈建议从单个指定的SQL节点完成所有用户管理。
NDB_STORED_USER
是否使用必须授予或撤销的全局特权* *。
.试图为该特权设置任何其他作用域都会导致错误。此特权可以授予大多数应用程序和管理用户,但不能授予系统保留帐户,例如mysql.session@localhost
或mysql.infoschema@localhost
.权限的用户
NDB_STORED_USER
特权存储在NDB
(因此由所有SQL节点共享),正如具有此特权的角色一样。仅被授予具有NDB_STORED_USER
是不存储在NDB
;每一个NDB
必须显式地授予存储用户权限。有关如何工作的详细信息
NDB
,请参阅第23.5.12节“NDB_STORED_USER的分布式MySQL特权”.的
NDB_STORED_USER
从NDB 8.0.18开始,该特权可用。用户也有
SYSTEM_VARIABLES_ADMIN
,PERSIST_RO_VARIABLES_ADMIN
允许使用的设置PERSIST_ONLY
将全局系统变量持久化到mysqld-auto.cnf
数据目录中的选项文件。这句话类似于设置保存
但不修改运行时全局系统变量值。这使得设置PERSIST_ONLY
适用于配置只读系统变量,只能在服务器启动时设置。另请参阅第5.1.9.1节“系统变量特权”.
启用帐户作为
PRIVILEGE_CHECKS_USER
对于复制区域通道,并执行BINLOG
语句mysqlbinlog输出。将此特权授予使用将复制源更改为
(从MySQL 8.0.23)改变主
(在MySQL 8.0.23之前)为复制通道提供安全上下文,并处理这些通道上的复制错误。以及REPLICATION_APPLIER
权限时,还必须向帐户授予执行复制区域通道接收的事务或包含在mysqlbinlog输出,例如更新受影响的表。有关更多信息,请参见第17.3.3节“复制权限检查”.启用该帐户连接到复制源服务器,使用
启动|副本slave
而且停止|副本slave
语句,并使用将复制源更改为
语句(从MySQL 8.0.23)或改变主
语句(在MySQL 8.0.23之前)和改变复制过滤器
语句。将此特权授予被副本用于连接到当前服务器作为其复制源服务器的帐户。此权限不适用于组复制;使用GROUP_REPLICATION_ADMIN
的。支持资源组管理,包括创建、修改和删除资源组,以及向资源组分配线程和语句。具有此权限的用户可以执行与资源组相关的任何操作。
支持向资源组分配线程和语句。具有此权限的用户可以使用
设置资源组
声明和RESOURCE_GROUP
优化器提示。控件的使用,可以授予和撤销角色
与管理选项
条款的格兰特
声明,非空的< graphml >
元素的内容ROLES_GRAPHML ()
函数。的值mandatory_roles
系统变量。启用到只允许管理连接的网络接口的连接(请参阅第5.1.12.1节“连接接口”).
SESSION_VARIABLES_ADMIN
(MySQL 8.0.14新增)对于大多数系统变量,设置会话值不需要特殊权限,任何用户都可以对当前会话进行设置。对于某些系统变量,设置会话值可能在当前会话之外产生影响,因此是受限制的操作。对于这些,
SESSION_VARIABLES_ADMIN
特权允许用户设置会话值。如果系统变量受到限制,且需要特殊权限才能设置会话值,则由变量描述标识该限制。例子包括
binlog_format
,sql_log_bin
,sql_log_off
.在MySQL 8.0.14之前
SESSION_VARIABLES_ADMIN
被添加,限制会话系统变量只能由拥有SYSTEM_VARIABLES_ADMIN
或超级
特权。的
SESSION_VARIABLES_ADMIN
特权是SYSTEM_VARIABLES_ADMIN
而且超级
特权。拥有这些特权的用户还可以设置受限制的会话变量SESSION_VARIABLES_ADMIN
暗示而不需要给予SESSION_VARIABLES_ADMIN
明确。另请参阅第5.1.9.1节“系统变量特权”.
允许在执行视图或存储程序时设置有效授权ID。具有此权限的用户可以将任何帐户指定为
定义者
视图或存储程序的属性。从MySQL 8.0.22开始,
SET_USER_ID
还支持重写安全检查,以防止(可能无意中)导致存储对象成为孤立的操作或导致采用当前为孤立的存储对象的操作。有关详细信息,请参见孤儿存储对象.SHOW_ROUTINE
(MySQL 8.0.20新增)使用户能够访问所有存储例程(存储过程和函数)的定义和属性,即使是那些用户没有被命名为例程的例程
定义者
.这种访问包括:在MySQL 8.0.20之前,如果用户要访问用户没有定义的例程的定义,用户必须具有全局
选择
特权,这是非常广泛的。8.0.20,SHOW_ROUTINE
可以将其授予为具有更有限范围的特权,允许访问例程定义。(即管理员可以取消全局选择
来自不需要它和授予的用户SHOW_ROUTINE
相反)。这使帐户可以备份所存储的例程,而不需要广泛的特权。SYSTEM_USER
(MySQL 8.0.16新增)的
SYSTEM_USER
特权是系统用户与普通用户的区别:具有
SYSTEM_USER
Privilege是系统用户。的用户
SYSTEM_USER
Privilege是普通用户。
的
SYSTEM_USER
特权对特定用户可以应用其其他特权的帐户有影响,以及是否保护用户不受其他帐户的影响:系统用户既可以修改系统帐户,也可以修改普通帐户。也就是说,拥有对普通帐户执行给定操作的适当权限的用户是通过拥有来启用的
SYSTEM_USER
也可以对系统帐户进行操作。系统帐号只能由具有相应权限的系统用户修改,普通用户不能修改。具有适当权限的普通用户可以修改普通帐户,但不能修改系统帐户。普通帐户可以由具有相应权限的系统用户和普通用户进行修改。
有关更多信息,请参见第6.2.11节“帐户类别”.
为系统帐户提供的防止被普通帐户修改的保护
SYSTEM_USER
权限不适用于具有权限的普通帐户mysql
系统模式,因此可以直接修改该模式中的授权表。为了充分的保护,不要给予mysql
普通帐户的模式特权。看到保护系统帐户免受普通帐户的操纵.影响以下操作和服务器行为:
允许在运行时更改系统变量:
启用对全局系统变量的服务器配置更改
设置PERSIST_ONLY
,如果用户也有PERSIST_RO_VARIABLES_ADMIN
.启用设置需要特殊权限的受限会话系统变量。实际上,
SYSTEM_VARIABLES_ADMIN
意味着SESSION_VARIABLES_ADMIN
没有明确授予SESSION_VARIABLES_ADMIN
.
另请参阅第5.1.9.1节“系统变量特权”.
启用对全局事务特征的更改(请参阅第13.3.7节“SET TRANSACTION语句”).
TABLE_ENCRYPTION_ADMIN
(MySQL 8.0.16新增)使用户能够覆盖默认加密设置
table_encryption_privilege_check
启用;看到为模式和通用表空间定义加密默认值.启用版本令牌用户定义函数的执行。该特权由
version_tokens
插件;看到第5.6.6节“版本令牌”.的执行
XA恢复
声明;看到第13.3.8.1节“XA事务SQL语句”.在MySQL 8.0之前,任何用户都可以执行
XA恢复
语句来发现未完成准备的XA事务的XID值,这可能导致由启动XA事务的用户以外的用户提交或回滚XA事务。在MySQL 8.0中,XA恢复
仅允许具有XA_RECOVER_ADMIN
特权,期望只将其授予需要它的管理用户。例如,对于XA应用程序的管理员来说,如果XA应用程序已经崩溃,那么就有必要找到应用程序启动的未完成事务,以便将它们回滚。这种特权要求阻止用户发现除他们自己以外的未完成的已准备XA事务的XID值。它不会影响XA事务的正常提交或回滚,因为启动XA事务的用户知道它的XID。
最好只授予帐户所需的特权。你在授予文件
管理权限:
MySQL支持静态和动态权限:
静态特权内置于服务器中。它们总是可以授予用户帐户,并且不能取消注册。
动态特权可以在运行时注册和取消注册。这会影响它们的可用性:未注册的动态特权不能被授予。
例如,选择
而且插入
特权是静态的并且总是可用的,而动态特权只有在实现它的组件已启用时才可用。
本节的其余部分将描述MySQL中的动态特权是如何工作的。讨论中使用了这个术语”组件”但同样适用于插件。
服务器管理员应该知道哪些服务器组件定义了动态特权。对于MySQL发行版,定义动态权限的组件文档描述了10bet官方网站这些权限。
第三方组件也可以定义动态特权;管理员应该理解这些特权,不应该安装可能与服务器操作发生冲突或损害服务器操作的组件。例如,如果两个组件都定义了具有相同名称的特权,则两个组件会发生冲突。组件开发人员可以通过选择具有基于组件名称前缀的特权名称来减少这种情况发生的可能性。
服务器在内存内部维护一组注册的动态特权。取消注册发生在服务器关闭时。
通常,定义动态特权的组件在安装时,在初始化过程中注册它们。卸载时,组件不会注销其注册的动态特权。(这是目前的做法,不是要求。也就是说,组件可以(但不能)在它们注册特权的任何时候取消注册。)
尝试注册已注册的动态特权时,不会出现警告或错误。考虑以下语句序列:
安装组件“my_component”;卸载组件“my_component”;安装组件“my_component”;
第一个安装组件
语句注册组件定义的任何权限my_component
,但卸载组件
不注销它们。对于第二个安装组件
语句,则发现它所注册的组件特权已经注册,但不会出现警告或错误。
动态特权只应用于全局级别。文件中存储有关动态权限当前分配给用户帐户的信息mysql.global_grants
系统表:
服务器自动注册中命名的权限
global_grants
在服务器启动期间(除非——skip-grant-tables
选项给出)。中列出的动态特权分配
global_grants
是持久的。它们不会在服务器关闭时被删除。
示例:下面的语句授予useru1
控制副本上的复制(包括组复制)和修改系统变量所需的权限:
在*上授予replication_slave_admin, group_replication_admin, binlog_admin权限。*“u1”@“localhost”;
控件的输出中显示已授予的动态特权秀奖助金
声明和INFORMATION_SCHEMA
USER_PRIVILEGES
表格
为格兰特
而且撤销
在全局级别,任何未被识别为静态的命名特权都将对照当前注册的动态特权集进行检查,如果找到就授予。否则,将出现错误,指示未知的特权标识符。
为格兰特
而且撤销
的意思所有(特权)
在全局级别,包括所有静态全局特权,以及所有当前注册的动态特权:
授予所有
在全局级别授予所有静态全局特权和所有当前注册的动态特权。类执行之后注册的动态特权格兰特
声明不会追溯至任何帐户。撤销所有
在全局级撤销所有授予的静态全局特权和所有授予的动态特权。
的冲洗的特权
声明中读取global_grants
表的动态权限分配,并注册在那里找到的任何未注册的权限。
有关MySQL Server提供的动态权限和MySQL发行版中包含的组件的描述,请参见第6.2.2节“MySQL提供的特权”.
在MySQL 8.0中,以前需要的许多操作超级
特权还与范围更有限的动态特权相关联。(有关这些特权的描述,请参见第6.2.2节“MySQL提供的特权”)。每个这样的操作都可以通过授予关联的动态特权而不是超级
.此更改通过允许dba避免授予来提高安全性超级
并根据允许的操作更紧密地调整用户权限。超级
已弃用;希望它在MySQL的未来版本中被删除。
当删除超级
发生,以前需要的操作超级
除非授予帐户否则失败超级
迁移到适当的动态特权。使用下面的指示来完成这个目标,以便账户提前准备好超级
删除:
执行此查询以识别被授予的帐户
超级
:从information_schema中选择被授权人。USER_PRIVILEGES在哪里PRIVILEGE_TYPE = 'SUPER';
对于前面查询所标识的每个帐户,确定它所需的操作
超级
.然后授予与这些操作对应的动态特权,然后撤销超级
.例如,如果
“u1”@“localhost”
需要超级
对于二进制日志清除和系统变量修改,这些语句对帐户进行必要的更改:在*上授予binlog_admin, system_variable_admin。*“u1”@“localhost”;撤销*上的super。*从“u1”@“localhost”;
在您修改了所有适用的帐户后,
INFORMATION_SCHEMA
第一步中的查询应该产生一个空的结果集。