授予MySQL帐户的权限决定了帐户可以执行哪些操作。MySQL权限在其应用的上下文和不同操作级别上有所不同:
-
管理权限使用户能够管理MySQL服务器的操作。这些权限是全局的,因为它们不是特定于特定数据库的。
-
数据库权限适用于数据库及其中的所有对象。可以为特定数据库或全局授予这些权限,以便它们适用于所有数据库。
-
数据库对象(如表,索引,视图和存储例程)的权限可以针对数据库中的特定对象,数据库中给定类型的所有对象(例如数据库中的所有表)或全局的所有对象所有数据库中给定类型的对象)。
有关帐户权限的信息存储在 user
,db
, tables_priv
,columns_priv
,和procs_priv
在表 mysql
系统数据库(见 第6.2.2节“授权表”)。在第6.2.6节“权限更改生效时”指示的情况下,MySQL服务器启动时将这些表的内容读入内存 。访问控制决定基于授权表的内存中副本。
一些MySQL版本引入了授予表结构的更改,以添加新的权限或功能。为了确保您可以利用任何新功能,只要升级MySQL,就可以更新授权表以拥有当前的结构。请参见第4.4.7节“ mysql_upgrade - 检查和升级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语句可能具有比此处指示的更具体的权限要求。如果是这样,有关陈述的描述提供了细节。
-
该
ALL
或ALL PRIVILEGES
权限说明符的简写。它代表“ 给定权限级别可用的所有权限 ” (除外GRANT OPTION
)。例如,ALL
在全局或表级授予授予所有全局权限或所有表级别权限。 -
该
ALTER
权限允许使用该ALTER TABLE
语句来更改表的结构。ALTER TABLE
还要求CREATE
和INSERT
权限。重命名表需要ALTER
和DROP
对旧表,CREATE
以及INSERT
对新表。 -
ALTER ROUTINE
需要 该权限来更改或删除存储的例程(过程和函数)。 -
该
CREATE
权限允许创建新的数据库和表。 -
CREATE ROUTINE
需要创建存储的例程(过程和函数) 的权限。 -
CREATE TABLESPACE
需要创建,更改或删除表空间和日志文件组 的权限。 -
该
CREATE TEMPORARY TABLES
权限允许使用该CREATE TEMPORARY TABLE
语句创建临时表 。在会话创建了一个临时表之后,服务器不会对该表进行进一步的特权检查。所述创建会话可以在桌子上进行任何操作,例如
DROP TABLE
,INSERT
,UPDATE
,或SELECT
。有关详细信息,请参见第13.1.18.3节“CREATE TEMPORARY TABLE语法”。 -
该
CREATE USER
权限允许使用的ALTER USER
,CREATE USER
,DROP USER
,RENAME USER
,和REVOKE ALL PRIVILEGES
语句。 -
该
CREATE VIEW
权限允许使用该CREATE VIEW
语句。 -
该
DELETE
特权使行从数据库中的表被删除。 -
该
DROP
特权使您能够删除(删除)现有的数据库,表和视图。DROP
为了ALTER TABLE ... DROP PARTITION
在分区表上使用语句,需要该 权限。该DROP
也需要特权TRUNCATE TABLE
。 如果授予DROP
的特权mysql
数据库用户,该用户可以删除其中的MySQL访问权限被存储在数据库中。 -
EVENT
需要 该权限来创建,更改,删除或查看事件计划程序的事件。 -
EXECUTE
执行存储例程(过程和函数)需要 该权限。 -
该
FILE
权限允许您使用LOAD DATA INFILE
和SELECT ... INTO OUTFILE
语句和LOAD_FILE()
功能在服务器主机上读取和写入文件。具有该FILE
权限的用户可以读取服务器主机上任何可由MySQL服务器读取或读取的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)该FILE
权限还使用户能够在MySQL服务器具有写入权限的任何目录中创建新文件。这包括服务器的数据目录,其中包含实现权限表的文件。作为一项安全措施, 服务器将不会覆盖现有文件。FILE
从MySQL 5.7.17开始,该权限需要在该语句中使用DATA DIRECTORY
orINDEX DIRECTORY
table选项CREATE TABLE
。要限制文件可以读取和写入的位置,请将
secure_file_priv
系统设置为特定目录。请参见 第5.1.5节“服务器系统变量”。 -
该
GRANT OPTION
权限使您能够给予其他用户或从其他用户删除您拥有的这些权限。 -
该
INDEX
权限使您可以创建或删除(删除)索引。INDEX
适用于现有表。如果您具有CREATE
表的权限,则可以在CREATE TABLE
语句中包含索引定义。 -
该
INSERT
权限允许将行插入到数据库中的表中。INSERT
还需要对ANALYZE TABLE
,OPTIMIZE TABLE
和REPAIR TABLE
表维护语句。 -
该
LOCK TABLES
权限允许使用显式LOCK TABLES
语句来锁定具有该SELECT
权限的表。这包括使用写锁,这可以阻止其他会话读取锁定的表。 -
该
PROCESS
权限属于显示有关在服务器中执行的线程的信息(即有关会话执行的语句的信息)。该权限允许使用SHOW PROCESSLIST
或mysqladmin进程列表来查看属于其他帐户的线程; 你可以随时看到你自己的线程。该PROCESS
权限还允许使用的SHOW ENGINE
。 -
该
PROXY
权限使用户能够模拟或被称为另一用户。请参阅 第6.3.10节“代理用户”。 -
REFERENCES
MySQL 5.7.6之前 的权限未使用。从5.7.6开始,创建外键约束需要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
-
该
REPLICATION CLIENT
权限允许使用的SHOW MASTER STATUS
,SHOW SLAVE STATUS
和SHOW BINARY LOGS
语句。 -
REPLICATION SLAVE
应授予从属服务器用作连接到当前服务器作为主服务器的帐户 的权限。没有此权限,从站不能请求对主服务器上的数据库进行的更新。 -
该
SELECT
特权使您能够从数据库中的表中选择行。SELECT
语句SELECT
只有在实际从表中检索行时才需要该 权限。一些SELECT
语句不访问表,可以在没有任何数据库的权限的情况下执行。例如,您可以使用SELECT
简单的计算器来评估不引用表的表达式:SELECT 1+1; SELECT PI()*2;
SELECT
读取列值的其他语句也需要 该权限。例如,SELECT
需要用于上的右侧引用列col_name
=expr
赋值UPDATE
语句或用于在指定的列WHERE
的条款DELETE
或UPDATE
语句。 -
该
SHOW DATABASES
权限使帐户能够通过发出SHOW DATABASE
语句来查看数据库名称 。没有此权限的帐户只能看到具有某些权限的数据库,如果服务器已启动该--skip-show-database
选项,则无法使用该语句 。请注意,任何全局权限都是数据库的特权。 -
该
SHOW VIEW
权限允许使用该SHOW CREATE VIEW
语句。与使用的视图也需要此权限EXPLAIN
。 -
该
SHUTDOWN
权限允许使用该SHUTDOWN
语句,mysqladmin shutdown命令和mysql_shutdown()
C API函数。 -
该
SUPER
特权使这些操作和服务器的行为:-
通过修改全局系统变量启用配置更改。对于某些系统变量,设置会话值也需要
SUPER
特权; 如果是,则在变量描述中指出。实例包括binlog_format
,sql_log_bin
,和sql_log_off
。 -
启用和停止从服务器上的复制,包括组复制。
-
通过
PURGE BINARY LOGS
和BINLOG
语句启用二进制日志控制 。 -
启用在执行视图或存储的程序时设置有效的授权ID。具有此权限的用户可以在
DEFINER
视图或存储的程序的属性中指定任何帐户 。 -
允许使用的
CREATE SERVER
,ALTER SERVER
和DROP SERVER
语句。 -
启用mysqladmin调试 命令。
-
启用
InnoDB
按键旋转。 -
启用该
DES_ENCRYPT()
功能读取DES密钥文件 。 -
启用版本令牌用户定义的功能。
-
启用对不允许非
SUPER
帐户的客户端连接的控制:-
使用该
KILL
语句或mysqladmin kill 命令来杀死属于其他帐户的线程。(你可以随时杀死自己的线程。) -
SUPER
即使max_connections
达到由系统变量控制的连接限制 ,服务器也接受客户端的 一个连接 。 -
即使
read_only
启用了系统变量,也可以进行更新 。这适用于表更新和帐户管理语句的使用,例如GRANT
和REVOKE
。 -
客户端连接
init_connect
时 ,服务器不执行 系统变量内容SUPER
。 -
离线模式(
offline_mode
启用)的服务器不会SUPER
在下一个客户端请求时终止 客户端连接,并接受来自SUPER
客户端的新连接 。
-
SUPER
如第23.7节“存储程序的二进制日志记录”所述,如果启用二进制日志记录,则 还可能需要创建或更改存储的函数的权限 。 -
-
该
TRIGGER
特权启用触发操作。您必须具有此表的特权才能创建,删除,执行或显示该表的触发器。当触发器被激活(由谁拥有特权执行用户
INSERT
,UPDATE
或DELETE
与触发器关联的表的语句),触发器执行要求谁定义触发器的用户仍然有TRIGGER
特权。 -
该
UPDATE
权限允许在数据库中的表中更新行。 -
该
USAGE
权限说明符表示“ 没有权限。“它在全球一级GRANT
用于修改帐户属性,如资源限制或SSL特性,而不需要指定特定的帐户权限。SHOW GRANTS
显示USAGE
以指示帐户在特权级别没有权限。
这是一个好主意,只授予一个帐户所需的特权。在给予FILE
和管理特权方面应特别小心:
-
该
FILE
权限可以被滥用来读取MySQL服务器可以在服务器主机上读取的任何文件的数据库表。这包括服务器数据目录中的所有世界可读的文件和文件。然后可以使用该表SELECT
将其内容传输到客户端主机。 -
该
GRANT OPTION
权限使用户能够将权限授予其他用户。具有不同特权和特权的两个用户GRANT OPTION
可以组合权限。 -
的
ALTER
特权可以使用通过重命名表颠覆权限系统。 -
SHUTDOWN
可以通过终止服务器来 将特权用于拒绝其他用户的服务。 -
该
PROCESS
权限可用于查看当前执行语句的纯文本,包括设置或更改密码的语句。 -
该
SUPER
权限可用于终止其他会话或更改服务器的运行方式。 -
授予
mysql
数据库本身的特权可用于更改密码和其他访问权限信息。密码存储加密,所以恶意用户不能简单地读取它们来了解纯文本密码。但是,具有对user
表authentication_string
列的写入访问权限的用户 可以更改帐户的密码,然后使用该帐户连接到MySQL服务器。