授予 MySQL 帐户的权限决定了该帐户可以执行哪些操作。MySQL 特权在它们应用的上下文和不同的操作级别上有所不同:
管理权限使用户能够管理 MySQL 服务器的操作。这些权限是全局的,因为它们不特定于特定的数据库。
数据库权限适用于数据库及其中的所有对象。可以为特定数据库或全局授予这些权限,以便它们适用于所有数据库。
可以为数据库中的特定对象、数据库中给定类型的所有对象(例如,数据库中的所有表)或全局为所有对象授予表、索引、视图和存储例程等数据库对象的权限所有数据库中给定类型的对象。
有关帐户权限的信息存储在mysql系统数据库的授权表中。有关这些表的结构和内容的说明,请参阅
第 6.2.3 节,“授权表”。MySQL 服务器在启动时将授权表的内容读入内存,并在
第 6.2.9 节“权限更改生效时”中指示的情况下重新加载它们。服务器根据授权表的内存副本做出访问控制决策。
一些 MySQL 版本引入了对授权表的更改以添加新的权限或功能。为确保您可以利用任何新功能,请在升级 MySQL 时将授权表更新为当前结构。请参阅 第 2.11 节,“升级 MySQL”。
以下部分总结了可用的权限,提供了每个权限的更详细描述,并提供了使用指南。
下表显示了在
GRANT和
REVOKE语句中使用的特权名称,以及与授权表中每个特权相关联的列名以及特权适用的上下文。
表 6.2 GRANT 和 REVOKE 允许的权限
| 特权 | 授予表列 | 语境 |
|---|---|---|
ALL [PRIVILEGES] |
“所有特权”的同义词 | 服务器管理 |
ALTER |
Alter_priv |
表 |
ALTER ROUTINE |
Alter_routine_priv |
存储例程 |
CREATE |
Create_priv |
数据库、表或索引 |
CREATE ROUTINE |
Create_routine_priv |
存储例程 |
CREATE TABLESPACE |
Create_tablespace_priv |
服务器管理 |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
表 |
CREATE USER |
Create_user_priv |
服务器管理 |
CREATE VIEW |
Create_view_priv |
观点 |
DELETE |
Delete_priv |
表 |
DROP |
Drop_priv |
数据库、表或视图 |
EVENT |
Event_priv |
数据库 |
EXECUTE |
Execute_priv |
存储例程 |
FILE |
File_priv |
服务器主机上的文件访问 |
GRANT OPTION |
Grant_priv |
数据库、表或存储例程 |
INDEX |
Index_priv |
表 |
INSERT |
Insert_priv |
表或列 |
LOCK TABLES |
Lock_tables_priv |
数据库 |
PROCESS |
Process_priv |
服务器管理 |
PROXY |
见表proxies_priv_ |
服务器管理 |
REFERENCES |
References_priv |
数据库或表 |
RELOAD |
Reload_priv |
服务器管理 |
REPLICATION CLIENT |
Repl_client_priv |
服务器管理 |
REPLICATION SLAVE |
Repl_slave_priv |
服务器管理 |
SELECT |
Select_priv |
表或列 |
SHOW DATABASES |
Show_db_priv |
服务器管理 |
SHOW VIEW |
Show_view_priv |
观点 |
SHUTDOWN |
Shutdown_priv |
服务器管理 |
SUPER |
Super_priv |
服务器管理 |
TRIGGER |
Trigger_priv |
表 |
UPDATE |
Update_priv |
表或列 |
USAGE |
“无特权”的同义词 | 服务器管理 |
以下列表提供了 MySQL 中可用的每个权限的一般描述。特定的 SQL 语句可能具有比此处指示的更具体的权限要求。如果是这样,相关陈述的描述会提供详细信息。
这些权限说明符是“在给定权限级别可用的所有权限” (除了
GRANT OPTION)的简写。例如,ALL在全局或表级授予分别授予所有全局权限或所有表级权限。允许使用
ALTER TABLE语句来更改表的结构。ALTER TABLE还需要CREATE和INSERT特权。重命名表需要在旧表上 和ALTER在 新表上。DROPCREATEINSERT允许使用更改或删除存储例程(存储过程和函数)的语句。
允许使用创建新数据库和表的语句。
允许使用创建存储例程(存储过程和函数)的语句。
允许使用创建、更改或删除表空间和日志文件组的语句。
允许使用
CREATE TEMPORARY TABLE语句创建临时表。会话创建临时表后,服务器不会对该表执行进一步的权限检查。创建会话可以对表执行任何操作,例如
DROP TABLE、INSERT、UPDATE或SELECT。有关详细信息,请参阅第 13.1.18.2 节,“CREATE TEMPORARY TABLE 语句”。允许使用
ALTER USER、CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES语句。允许使用
CREATE VIEW语句。允许从数据库中的表中删除行。
允许使用删除(删除)现有数据库、表和视图的语句。 在分区表上使用该语句需要
DROP特权。权限也是必需ALTER TABLE ... DROP PARTITION的 。DROPTRUNCATE TABLE允许使用为事件计划程序创建、更改、删除或显示事件的语句。
允许使用执行存储例程(存储过程和函数)的语句。
影响以下操作和服务器行为:
LOAD DATA使用andSELECT ... INTO OUTFILE语句和LOAD_FILE()函数 在服务器主机上启用读写文件。具有FILE权限的用户可以读取服务器主机上任何全局可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问这些文件中的任何一个。)允许在 MySQL 服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。
从 MySQL 5.7.17 开始,允许对语句 使用
DATA DIRECTORYorINDEX DIRECTORYtable 选项 。CREATE TABLE
作为一项安全措施,服务器不会覆盖现有文件。
要限制可以读写文件的位置,请将
secure_file_priv系统变量设置为特定目录。请参阅 第 5.1.7 节,“服务器系统变量”。使您能够向其他用户授予或撤销您自己拥有的那些特权。
允许使用创建或删除(删除)索引的语句。
INDEX适用于现有表。如果您有表的 权限,则可以在语句CREATE中包含索引定义 。CREATE TABLE允许将行插入到数据库中的表中。 、 和 表维护语句
INSERT也需要。ANALYZE TABLEOPTIMIZE TABLEREPAIR TABLE允许使用显式
LOCK TABLES语句来锁定您有SELECT权限的表。这包括使用写锁,防止其他会话读取锁定的表。特权控制对有关服务器内执行的线程的信息的
PROCESS访问(即有关会话正在执行的语句的信息)。SHOW PROCESSLIST使用语句、mysqladmin processlist 命令、INFORMATION_SCHEMA.PROCESSLIST表和 Performance Schema 表可用的线程信息可按processlist如下方式访问:笔记Performance Schema
threads表也提供线程信息,但表访问使用不同的权限模型。请参阅 第 25.12.16.4 节,“线程表”。该
PROCESS权限还允许使用SHOW ENGINE语句、访问INFORMATION_SCHEMAInnoDB表(名称以 开头的表INNODB_)和(从 MySQL 5.7.31 开始)访问INFORMATION_SCHEMAFILES表。使一个用户能够冒充或成为另一个用户。请参阅第 6.2.14 节,“代理用户”。
创建外键约束需要
REFERENCES父表的权限。RELOAD启用以下操作 :FLUSH语句 的使用。使用等效 于 操作的 mysqladmin命令: 、、、、、、、、 和 。 _
FLUSHflush-hostsflush-logsflush-privilegesflush-statusflush-tablesflush-threadsrefreshreload该
reload命令告诉服务器将授权表重新加载到内存中。flush-privileges是的同义词reload。该refresh命令关闭并重新打开日志文件并刷新所有表。其他 命令执行的功能类似于 ,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件, 是比 .flush-xxxrefreshflush-logsrefresh使用执行各种操作 的mysqldump选项:和 .
FLUSH--flush-logs--master-dataRESET语句 的使用。
允许使用
SHOW MASTER STATUS、SHOW SLAVE STATUS和SHOW BINARY LOGS语句。使帐户能够使用 、 和 语句请求对源服务器上的数据库进行
SHOW SLAVE HOSTS的SHOW RELAYLOG EVENTS更新SHOW BINLOG EVENTS。使用 mysqlbinlog选项--read-from-remote-server(-R) 和--read-from-remote-master. 将此权限授予副本服务器用于连接到作为其源的当前服务器的帐户。允许从数据库中的表中选择行。
SELECT语句SELECT只有在实际访问表时才需要特权。有些SELECT语句不访问表,可以在没有任何数据库权限的情况下执行。例如,您可以SELECT用作一个简单的计算器来计算不引用表格的表达式:SELECT 1+1; SELECT PI()*2;SELECT其他读取列值的语句也需要 该权限。例如,在语句中= 赋值SELECT右侧引用的 列或在or 语句的子句中 命名的列需要 。col_nameexprUPDATEWHEREDELETEUPDATESHOW DATABASE通过发出语句 使帐户能够查看数据库名称 。没有此权限的帐户只能看到他们有一些权限的数据库,并且如果服务器是使用该--skip-show-database选项启动的,则根本无法使用该语句。警告因为全局权限被认为是所有数据库的权限,所以任何全局权限都使用户能够 通过检查表
SHOW DATABASES或通过检查INFORMATION_SCHEMASCHEMATA表来查看所有数据库名称。允许使用
SHOW CREATE VIEW语句。与 一起使用的视图也需要此权限EXPLAIN。允许使用
SHUTDOWN语句、mysqladmin shutdown 命令和mysql_shutdown()C API 函数。影响以下操作和服务器行为:
通过修改全局系统变量启用服务器配置更改。对于某些系统变量,设置会话值也需要
SUPER权限。如果系统变量受到限制并且需要特殊权限才能设置会话值,则变量描述会指示该限制。示例包括binlog_format、sql_log_bin和sql_log_off。另见 第 5.1.8.1 节,“系统变量权限”。启用对全局事务特征的更改(请参阅第 13.3.6 节,“SET TRANSACTION 语句”)。
使帐户能够启动和停止复制,包括组复制。
通过
PURGE BINARY LOGSandBINLOG语句启用二进制日志控制。在执行视图或存储的程序时启用设置有效授权 ID。具有此权限的用户可以在
DEFINER视图或存储程序的属性中指定任何帐户。允许使用
CREATE SERVER、ALTER SERVER和DROP SERVER语句。允许使用mysqladmin 调试 命令。
启用
InnoDB加密密钥轮换。启用函数读取 DES 密钥文件
DES_ENCRYPT()。启用版本令牌功能的执行。
SUPER启用对非帐户 不允许的客户端连接的控制:允许使用
KILL语句或 mysqladmin kill命令来终止属于其他帐户的线程。(一个帐户总是可以杀死它自己的线程。)客户端连接 时 服务器不执行
init_connect系统变量内容 。SUPERSUPER即使max_connections达到系统变量 配置的连接限制 ,服务器也接受来自客户端的一个连接 。处于离线模式(
offline_mode启用)的服务器不会SUPER在下一个客户端请求时终止客户端连接,并接受来自SUPER客户端的新连接。即使
read_only启用系统变量也可以执行更新。这适用于显式表更新,以及使用账户管理语句,例如隐GRANT式REVOKE更新表。
如果启用二进制日志记录,您可能还需要
SUPER创建或更改存储函数的权限,如 第 23.7 节“存储程序二进制日志记录”中所述。启用触发操作。您必须对表具有此权限才能为该表创建、删除、执行或显示触发器。
当触发器被激活时(由有权对与触发器关联的表执行
INSERT、UPDATE或DELETE语句的用户激活),触发器执行要求定义触发器的用户仍然具有该TRIGGER表的权限。允许在数据库的表中更新行。
此特权说明符代表“无特权”。”它在全局级别
GRANT用于修改帐户属性,例如资源限制或 SSL 特性,而无需在权限列表中命名特定帐户权限。SHOW GRANTS显示USAGE以指示帐户在特权级别上没有特权。
只授予帐户所需的权限是个好主意。FILE在授予和管理权限
时,您应该特别小心:
FILE可以滥用将 MySQL 服务器可以在服务器主机上读取的任何文件读入数据库表。这包括所有世界可读的文件和服务器数据目录中的文件。然后可以访问该表SELECT以将其内容传输到客户端主机。GRANT OPTION使用户能够将他们的特权授予其他用户。具有不同权限和具有GRANT OPTION权限的两个用户能够合并权限。ALTER可用于通过重命名表来颠覆特权系统。SHUTDOWN可以被滥用以通过终止服务器来完全拒绝为其他用户提供服务。PROCESS可用于查看当前正在执行的语句的纯文本,包括设置或更改密码的语句。SUPER可用于终止其他会话或更改服务器的操作方式。为系统数据库本身授予的权限
mysql可用于更改密码和其他访问权限信息: