权限说明
以下列表提供了 MySQL 中每个可用权限的一般描述。特定的 SQL 语句可能具有比此处指出的更具体的权限要求。如果是,则相关声明的描述会提供详细信息。
-
这些权限说明符的速记“可在给定的权限级别的所有权限” (除
GRANT OPTION
)。例如,ALL
在全局或表级别授予分别授予所有全局权限或所有表级别权限。 -
允许使用该
ALTER TABLE
语句来更改表的结构。ALTER TABLE
还需要CREATE
和INSERT
权限。重命名表需要ALTER
和DROP
对旧表,CREATE
以及INSERT
对新表。 -
允许使用更改或删除存储例程(存储过程和函数)的语句。
-
允许使用创建新数据库和表的语句。
-
允许使用创建存储例程(存储过程和函数)的语句。
-
允许使用创建、更改或删除表空间和日志文件组的语句。
-
允许使用该
CREATE TEMPORARY TABLE
语句创建临时表 。会话创建临时表后,服务器不会对该表执行进一步的权限检查。所述创建会话可以在桌子上进行任何操作,例如
DROP TABLE
,INSERT
,UPDATE
,或SELECT
。 -
允许使用的
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
表选项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
threads
表还提供线程信息,但表访问使用不同的权限模型。该
PROCESS
特权还允许使用SHOW ENGINE
语句、访问INFORMATION_SCHEMA
InnoDB
表(名称以 开头的表INNODB_
)和(从 MySQL 5.7.31 开始)访问INFORMATION_SCHEMA
FILES
表。 -
使一个用户能够冒充或成为另一个用户。
-
创建外键约束需要
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
用作一个简单的计算器来计算不引用表的表达式:<span style="background-color:#ffffff"><span style="color:#555555"><span style="background-color:#f8f8f8"><span style="color:#000000"><code class="language-sql"><span style="color:#0077aa">SELECT</span> <span style="color:#990055">1</span><span style="color:#a67f59">+</span><span style="color:#990055">1</span><span style="color:#999999">;</span> <span style="color:#0077aa">SELECT</span> <span style="color:#dd4a68">PI</span><span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#a67f59">*</span><span style="color:#990055">2</span><span style="color:#999999">;</span></code></span></span></span></span>
SELECT
其他读取列值的语句也需要 该权限。例如, 在 语句SELECT
中col_name
=expr
赋值右侧引用的UPDATE
列或在or 语句的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
。 -
启用对全局事务特性的更改
-
使帐户能够启动和停止复制,包括组复制。
-
通过
PURGE BINARY LOGS
andBINLOG
语句启用二进制日志控制 。 -
允许在执行视图或存储程序时设置有效的授权 ID。具有此权限的用户可以在
DEFINER
视图或存储程序的属性中指定任何帐户 。 -
允许使用的
CREATE SERVER
,ALTER SERVER
和DROP SERVER
语句。 -
启用mysqladmin 调试 命令的使用。
-
启用
InnoDB
加密密钥轮换。 -
启用通过该
DES_ENCRYPT()
函数读取 DES 密钥文件 。 -
启用版本令牌功能的执行。
-
启用对不允许非
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
系统数据库本身授予的权限可用于更改密码和其他访问权限信息: