授予 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
在 新表上。DROP
CREATE
INSERT
允许使用更改或删除存储例程(存储过程和函数)的语句。
允许使用创建新数据库和表的语句。
允许使用创建存储例程(存储过程和函数)的语句。
允许使用创建、更改或删除表空间和日志文件组的语句。
允许使用
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
的 。DROP
TRUNCATE TABLE
允许使用为事件计划程序创建、更改、删除或显示事件的语句。
允许使用执行存储例程(存储过程和函数)的语句。
影响以下操作和服务器行为:
LOAD DATA
使用andSELECT ... INTO OUTFILE
语句和LOAD_FILE()
函数 在服务器主机上启用读写文件。具有FILE
权限的用户可以读取服务器主机上任何全局可读或 MySQL 服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问这些文件中的任何一个。)允许在 MySQL 服务器具有写访问权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。
从 MySQL 5.7.17 开始,允许对语句 使用
DATA DIRECTORY
orINDEX DIRECTORY
table 选项 。CREATE TABLE
作为一项安全措施,服务器不会覆盖现有文件。
要限制可以读写文件的位置,请将
secure_file_priv
系统变量设置为特定目录。请参阅 第 5.1.7 节,“服务器系统变量”。使您能够向其他用户授予或撤销您自己拥有的那些特权。
允许使用创建或删除(删除)索引的语句。
INDEX
适用于现有表。如果您有表的 权限,则可以在语句CREATE
中包含索引定义 。CREATE TABLE
允许将行插入到数据库中的表中。 、 和 表维护语句
INSERT
也需要。ANALYZE TABLE
OPTIMIZE TABLE
REPAIR 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_SCHEMA
InnoDB
表(名称以 开头的表INNODB_
)和(从 MySQL 5.7.31 开始)访问INFORMATION_SCHEMA
FILES
表。使一个用户能够冒充或成为另一个用户。请参阅第 6.2.14 节,“代理用户”。
创建外键约束需要
REFERENCES
父表的权限。RELOAD
启用以下操作 :FLUSH
语句 的使用。使用等效 于 操作的 mysqladmin命令: 、、、、、、、、 和 。 _
FLUSH
flush-hosts
flush-logs
flush-privileges
flush-status
flush-tables
flush-threads
refresh
reload
该
reload
命令告诉服务器将授权表重新加载到内存中。flush-privileges
是的同义词reload
。该refresh
命令关闭并重新打开日志文件并刷新所有表。其他 命令执行的功能类似于 ,但更具体,在某些情况下可能更可取。例如,如果您只想刷新日志文件, 是比 .flush-
xxx
refresh
flush-logs
refresh
使用执行各种操作 的mysqldump选项:和 .
FLUSH
--flush-logs
--master-data
RESET
语句 的使用。
允许使用
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_name
expr
UPDATE
WHERE
DELETE
UPDATE
SHOW DATABASE
通过发出语句 使帐户能够查看数据库名称 。没有此权限的帐户只能看到他们有一些权限的数据库,并且如果服务器是使用该--skip-show-database
选项启动的,则根本无法使用该语句。警告因为全局权限被认为是所有数据库的权限,所以任何全局权限都使用户能够 通过检查表
SHOW DATABASES
或通过检查INFORMATION_SCHEMA
SCHEMATA
表来查看所有数据库名称。允许使用
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 LOGS
andBINLOG
语句启用二进制日志控制。在执行视图或存储的程序时启用设置有效授权 ID。具有此权限的用户可以在
DEFINER
视图或存储程序的属性中指定任何帐户。允许使用
CREATE SERVER
、ALTER SERVER
和DROP SERVER
语句。允许使用mysqladmin 调试 命令。
启用
InnoDB
加密密钥轮换。启用函数读取 DES 密钥文件
DES_ENCRYPT()
。启用版本令牌功能的执行。
SUPER
启用对非帐户 不允许的客户端连接的控制:允许使用
KILL
语句或 mysqladmin kill命令来终止属于其他帐户的线程。(一个帐户总是可以杀死它自己的线程。)客户端连接 时 服务器不执行
init_connect
系统变量内容 。SUPER
SUPER
即使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
可用于更改密码和其他访问权限信息: