10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

6.2.2 MySQL提供的特权

授予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语句可能具有比这里所指出的更具体的特权需求。如果是,相关语句的描述将提供详细信息。

动态权限描述

动态特权是在运行时定义的,而静态特权是内置于服务器的。下面的列表描述了MySQL中可用的每个动态特权。

大多数动态特权在服务器启动时定义。其他则由特定组件或插件定义,如特权描述中所示。在这种情况下,特权是不可用的,除非定义它的组件或插件是启用的。

特定的SQL语句可能具有比这里所指出的更具体的特权需求。如果是,相关语句的描述将提供详细信息。

Privilege-Granting指南

最好只授予帐户所需的特权。你在授予文件管理权限:

  • 文件可以被滥用,将MySQL服务器可以在服务器主机上读取的任何文件读入数据库表。这包括所有世界可读的文件和服务器数据目录中的文件。然后可以使用选择将其内容传输到客户端主机。

  • GRANT选项使用户能够将自己的特权授予其他用户。具有不同权限的两个用户GRANT选项特权能够结合特权。

  • 改变可用于通过重命名表来破坏特权系统。

  • 关闭可以通过终止服务器来完全拒绝向其他用户提供服务。

  • 过程可用于查看当前执行语句的纯文本,包括设置或更改密码的语句。

  • 超级可用于终止其他会话或更改服务器的操作方式。

  • 授予的特权mysql系统数据库本身可以用来修改密码和其他访问权限信息:

    • 密码是加密存储的,因此恶意用户不能简单地阅读它们来知道纯文本密码。的写访问权限的用户mysql.user系统表authentication_string列可以修改一个帐户的密码,然后使用该帐户连接到MySQL服务器。

    • 插入更新授予的mysql系统数据库允许用户分别添加权限或修改现有权限。

    • 下降mysql系统数据库使用户能够远程权限表,甚至数据库本身。

静态与动态特权

MySQL支持静态和动态权限:

  • 静态特权内置于服务器中。它们总是可以授予用户帐户,并且不能取消注册。

  • 动态特权可以在运行时注册和取消注册。这会影响它们的可用性:未注册的动态特权不能被授予。

例如,选择而且插入特权是静态的并且总是可用的,而动态特权只有在实现它的组件已启用时才可用。

本节的其余部分将描述MySQL中的动态特权是如何工作的。讨论中使用了这个术语组件但同样适用于插件。

请注意

服务器管理员应该知道哪些服务器组件定义了动态特权。对于MySQL发行版,定义动态权限的组件文档描述了10bet官方网站这些权限。

第三方组件也可以定义动态特权;管理员应该理解这些特权,不应该安装可能与服务器操作发生冲突或损害服务器操作的组件。例如,如果两个组件都定义了具有相同名称的特权,则两个组件会发生冲突。组件开发人员可以通过选择具有基于组件名称前缀的特权名称来减少这种情况发生的可能性。

服务器在内存内部维护一组注册的动态特权。取消注册发生在服务器关闭时。

通常,定义动态特权的组件在安装时,在初始化过程中注册它们。卸载时,组件不会注销其注册的动态特权。(这是目前的做法,不是要求。也就是说,组件可以(但不能)在它们注册特权的任何时候取消注册。)

尝试注册已注册的动态特权时,不会出现警告或错误。考虑以下语句序列:

安装组件“my_component”;卸载组件“my_component”;安装组件“my_component”;

第一个安装组件语句注册组件定义的任何权限my_component,但卸载组件不注销它们。对于第二个安装组件语句,则发现它所注册的组件特权已经注册,但不会出现警告或错误。

动态特权只应用于全局级别。文件中存储有关动态权限当前分配给用户帐户的信息mysql.global_grants系统表:

  • 服务器自动注册中命名的权限global_grants在服务器启动期间(除非——skip-grant-tables选项给出)。

  • 格兰特而且撤销语句修改的内容global_grants

  • 中列出的动态特权分配global_grants是持久的。它们不会在服务器关闭时被删除。

示例:下面的语句授予useru1控制副本上的复制(包括组复制)和修改系统变量所需的权限:

在*上授予replication_slave_admin, group_replication_admin, binlog_admin权限。*“u1”@“localhost”;

控件的输出中显示已授予的动态特权秀奖助金声明和INFORMATION_SCHEMAUSER_PRIVILEGES表格

格兰特而且撤销在全局级别,任何未被识别为静态的命名特权都将对照当前注册的动态特权集进行检查,如果找到就授予。否则,将出现错误,指示未知的特权标识符。

格兰特而且撤销的意思所有(特权)在全局级别,包括所有静态全局特权,以及所有当前注册的动态特权:

  • 授予所有在全局级别授予所有静态全局特权和所有当前注册的动态特权。类执行之后注册的动态特权格兰特声明不会追溯至任何帐户。

  • 撤销所有在全局级撤销所有授予的静态全局特权和所有授予的动态特权。

冲洗的特权声明中读取global_grants表的动态权限分配,并注册在那里找到的任何未注册的权限。

有关MySQL Server提供的动态权限和MySQL发行版中包含的组件的描述,请参见第6.2.2节“MySQL提供的特权”

将帐户从SUPER迁移到动态特权

在MySQL 8.0中,以前需要的许多操作超级特权还与范围更有限的动态特权相关联。(有关这些特权的描述,请参见第6.2.2节“MySQL提供的特权”)。每个这样的操作都可以通过授予关联的动态特权而不是超级.此更改通过允许dba避免授予来提高安全性超级并根据允许的操作更紧密地调整用户权限。超级已弃用;希望它在MySQL的未来版本中被删除。

当删除超级发生,以前需要的操作超级除非授予帐户否则失败超级迁移到适当的动态特权。使用下面的指示来完成这个目标,以便账户提前准备好超级删除:

  1. 执行此查询以识别被授予的帐户超级

    从information_schema中选择被授权人。USER_PRIVILEGES在哪里PRIVILEGE_TYPE = 'SUPER';
  2. 对于前面查询所标识的每个帐户,确定它所需的操作超级.然后授予与这些操作对应的动态特权,然后撤销超级

    例如,如果“u1”@“localhost”需要超级对于二进制日志清除和系统变量修改,这些语句对帐户进行必要的更改:

    在*上授予binlog_admin, system_variable_admin。*“u1”@“localhost”;撤销*上的super。*从“u1”@“localhost”;

    在您修改了所有适用的帐户后,INFORMATION_SCHEMA第一步中的查询应该产生一个空的结果集。