首先先了解数据库权限
Privilege | Grant Table Column | Context |
---|---|---|
ALL [PRIVILEGES] | Synonym for “all privileges” | Server administration |
ALTER | Alter_priv | Tables |
ALTER ROUTINE | Alter_routine_priv | Stored routines |
CREATE | Create_priv | Databases, tables, or indexes |
CREATE ROLE | Create_role_priv | Server administration |
CREATE ROUTINE | Create_routine_priv | Stored routines |
CREATE TABLESPACE | Create_tablespace_priv | Server administration |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | Tables |
CREATE USER | Create_user_priv | Server administration |
CREATE VIEW | Create_view_priv | Views |
DELETE | Delete_priv | Tables |
DROP | Drop_priv | Databases, tables, or views |
DROP ROLE | Drop_role_priv | Server administration |
EVENT | Event_priv | Databases |
EXECUTE | Execute_priv | Stored routines |
FILE | File_priv | File access on server host |
GRANT OPTION | Grant_priv | Databases, tables, or stored routines |
INDEX | Index_priv | Tables |
INSERT | Insert_priv | Tables or columns |
LOCK TABLES | Lock_tables_priv | Databases |
PROCESS | Process_priv | Server administration |
PROXY | See proxies_priv table | Server administration |
REFERENCES | References_priv | Databases or tables |
RELOAD | Reload_priv | Server administration |
REPLICATION CLIENT | Repl_client_priv | Server administration |
REPLICATION SLAVE | Repl_slave_priv | Server administration |
SELECT | Select_priv | Tables or columns |
SHOW DATABASES | Show_db_priv | Server administration |
SHOW VIEW | Show_view_priv | Views |
SHUTDOWN | Shutdown_priv | Server administration |
SUPER | Super_priv | Server administration |
TRIGGER | Trigger_priv | Tables |
UPDATE | Update_priv | Tables or columns |
USAGE | Synonym for “no privileges” | Server administration |
静态权限说明
与在运行时定义的动态特权相反,服务器内置了静态特权。以下列表描述了MySQL中可用的每个静态特权。
特定的SQL语句可能具有比此处指示的更具体的特权要求。如果是这样,则所讨论语句的描述将提供详细信息。
这些特权说明符是“在给定特权级别可用的所有特权” (除外GRANT OPTION
)的简写。例如,ALL
在全局或表级别进行授予分别授予所有全局特权或所有表级别特权。
允许使用该ALTER TABLE
语句更改表的结构。 ALTER TABLE
还需要 CREATE
和 INSERT
特权。重命名表需要ALTER
和 DROP
对旧表, CREATE
以及 INSERT
对新表。
允许使用更改或删除存储例程(存储过程和函数)的语句。对于属于授予特权的范围内的例程,而不是为其指定用户的用户,该例程 DEFINER
还允许访问例程定义以外的例程属性。
允许使用创建新数据库和表的语句。
启用CREATE ROLE
语句的使用。(该CREATE USER
特权还允许使用该 CREATE ROLE
语句。)请参见 第6.2.10节“使用角色”。
在CREATE ROLE
和 DROP ROLE
特权是不是强大CREATE USER
,因为它们只能用于创建和删除帐户。它们不能用作CREATE USER
修改帐户属性或重命名帐户。请参阅 用户和角色互换性。
允许使用创建存储例程(存储过程和函数)的语句。对于属于授予特权的范围内的例程,而不是为其指定用户的用户,该例程 DEFINER
还允许访问例程定义以外的例程属性。
允许使用创建,更改或删除表空间和日志文件组的语句。
使用该CREATE TEMPORARY TABLE
语句启用临时表的创建 。
会话创建临时表后,服务器将不再对该表执行任何特权检查。所述创建会话可以在桌子上进行任何操作,例如DROP TABLE
, INSERT
, UPDATE
,或 SELECT
。有关更多信息,请参见第13.1.20.2节“ CREATE TEMPORARY TABLE语句”。
允许使用的ALTER USER
,CREATE ROLE
, CREATE USER
, DROP ROLE
, DROP USER
, RENAME USER
,和 REVOKE ALL PRIVILEGES
语句。
启用CREATE VIEW
语句的使用。
使行可以从数据库的表中删除。
允许使用删除(删除)现有数据库,表和视图的语句。该 DROP
权限才能使用该ALTER TABLE ... DROP PARTITION
语句的分区表。该 DROP
也需要特权TRUNCATE TABLE
。
启用DROP ROLE
语句的使用。(该CREATE USER
特权还允许使用该DROP ROLE
语句。)请参见第6.2.10节“使用角色”。
在CREATE ROLE
和 DROP ROLE
特权是不是强大CREATE USER
,因为它们只能用于创建和删除帐户。它们不能用作CREATE USER
修改帐户属性或重命名帐户。请参阅 用户和角色互换性。
支持使用为事件计划程序创建,更改,删除或显示事件的语句。
允许使用执行存储例程(存储过程和函数)的语句。对于属于授予特权的范围内的例程,而不是为其指定用户的用户,该例程 DEFINER
还允许访问例程定义以外的例程属性。
影响以下操作和服务器行为:
使用LOAD DATA
and SELECT ... INTO OUTFILE
语句和 LOAD_FILE()
函数启用在服务器主机上的读写文件。拥有FILE
特权的用户可以读取服务器主机上世界可读或MySQL服务器可读的任何文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问任何这些文件。)
允许在MySQL服务器具有写访问权的任何目录中创建新文件。这包括服务器的数据目录,该目录包含实现特权表的文件。
允许对语句使用DATA DIRECTORY
or INDEX DIRECTORY
表选项 CREATE TABLE
。
作为安全措施,服务器不会覆盖现有文件。
要限制可读写文件的位置,请将 secure_file_priv
系统变量设置为特定目录。请参见 第5.1.8节“服务器系统变量”。
使您可以授予自己拥有的特权或从其他用户撤消这些特权。
允许使用创建或删除(删除)索引的语句。INDEX
适用于现有表。如果您拥有CREATE
表的 特权,则可以在CREATE TABLE
语句中包括索引定义 。
允许将行插入数据库的表中。 INSERT
还需要对ANALYZE TABLE
, OPTIMIZE TABLE
和 REPAIR TABLE
表维护语句。
允许使用显式LOCK TABLES
语句来锁定您具有SELECT
特权的表。这包括写锁定的使用,这可以防止其他会话读取锁定的表。
该PROCESS
权限控制访问有关服务器内执行的线程的信息(即,有关语句的信息由会话执行)。可使用以下SHOW PROCESSLIST
语句访问使用语句,mysqladmin processlist 命令, INFORMATION_SCHEMA.PROCESSLIST
表和“性能模式” processlist
表可用的线程信息:
Performance Schema threads
表还提供线程信息,但是表访问使用不同的特权模型。请参见 第27.12.20.7节“线程表”。
该PROCESS
特权还允许使用该SHOW ENGINE
语句,访问 INFORMATION_SCHEMA
InnoDB
表(名称以开头的表INNODB_
),以及(从MySQL 8.0.21开始)访问INFORMATION_SCHEMA
FILES
表。
使一个用户可以模拟或成为另一用户。请参见第6.2.18节“代理用户”。
创建外键约束需要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
。
允许使用的SHOW MASTER STATUS
, SHOW REPLICA | SLAVE STATUS
和 SHOW BINARY LOGS
语句。
启用该帐户已作出数据库复制源服务器上,使用请求更新 SHOW REPLICAS | 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="color:#555555"><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>
SELECT
其他读取列值的语句也需要 此特权。例如,对于 语句SELECT
中col_name
=expr
赋值右侧引用的UPDATE
列或在或 语句的WHERE
子句中 命名的 列,则需要 。 DELETE
UPDATE
通过发出该SHOW DATABASE
语句,使帐户能够查看数据库名称 。没有此特权的帐户只能看到具有某些特权的数据库,并且如果使用该--skip-show-database
选项启动服务器,则根本无法使用该语句 。
因为任何静态全局特权都被认为是所有数据库的特权,所以任何静态全局特权都使用户可以查看SHOW DATABASES
或通过查看的SCHEMATA
表来查看所有数据库名称 INFORMATION_SCHEMA
,但在数据库级别受部分吊销限制的数据库除外。
启用SHOW CREATE VIEW
语句的使用。与结合使用的视图也需要此特权EXPLAIN
。
允许使用SHUTDOWN
andRESTART
语句, mysqladmin shutdown命令和 mysql_shutdown()
C API函数。
SUPER
是一项强大而深远的特权,不应轻易掉以轻心。如果帐户只需要执行一部分 SUPER
操作,则可以通过授予一个或多个动态特权来实现所需的特权集,而每个特权都赋予更多有限的功能。请参阅 动态特权描述。
SUPER
已被弃用,您应该期望它在MySQL的将来版本中被删除。请参阅将 帐户从SUPER迁移到动态特权。
SUPER
影响以下操作和服务器行为:
在运行时启用系统变量更改:
启用服务器的配置变化与全球系统变量 SET GLOBAL
和 SET PERSIST
。
相应的动态特权为 SYSTEM_VARIABLES_ADMIN
。
启用设置需要特殊特权的受限会话系统变量。
相应的动态特权为 SESSION_VARIABLES_ADMIN
。
另请参见第5.1.9.1节“系统变量特权”。
启用对全局事务特征的更改(请参见第13.3.7节“ SET TRANSACTION语句”)。
相应的动态特权为 SYSTEM_VARIABLES_ADMIN
。
使帐户能够启动和停止复制,包括组复制。
相应的动态特权 REPLICATION_SLAVE_ADMIN
用于常规复制 GROUP_REPLICATION_ADMIN
和组复制。
启用CHANGE REPLICATION SOURCE TO
语句(从MySQL 8.0.23开始),CHANGE MASTER TO
语句(在MySQL 8.0.23之前)和 CHANGE REPLICATION FILTER
语句的使用。
相应的动态特权为 REPLICATION_SLAVE_ADMIN
。
通过PURGE BINARY LOGS
and BINLOG
语句启用二进制日志控制 。
相应的动态特权为 BINLOG_ADMIN
。
在执行视图或存储的程序时启用设置有效授权ID的功能。具有此特权的用户可以在DEFINER
视图或存储程序的属性中指定任何帐户 。
相应的动态特权为 SET_USER_ID
。
允许使用的CREATE SERVER
,ALTER SERVER
和DROP SERVER
语句。
启用mysqladmin debug 命令的使用。
启用InnoDB
加密密钥旋转。
相应的动态特权为 ENCRYPTION_KEY_ADMIN
。
启用执行版本令牌用户定义的功能。
相应的动态特权为 VERSION_TOKEN_ADMIN
。
启用授予和吊销角色,使用语句的 WITH ADMIN OPTION
子句 GRANT
以及函数<graphml>
结果中的非空元素内容 ROLES_GRAPHML()
。
相应的动态特权为 ROLE_ADMIN
。
启用对非SUPER
帐户不允许的客户端连接的控制:
允许使用该 KILL
语句或 mysqladmin kill命令来杀死属于其他帐户的线程。(一个帐户总是可以杀死自己的线程。)
客户端连接init_connect
时 ,服务器不执行 系统变量内容 SUPER
。
SUPER
即使max_connections
达到由系统变量配置的连接限制 ,服务器也会接受来自客户端的 一个连接 。
处于脱机模式(offline_mode
启用)的服务器不会SUPER
在下一个客户端请求时终止客户端连接,而是 接受来自SUPER
客户端的新连接 。
即使read_only
启用了系统变量,也可以执行更新 。这适用于显式表更新,也适用于帐户管理语句(例如GRANT
和)的 REVOKE
隐式更新表。
前面的连接控制操作的相应动态特权为 CONNECTION_ADMIN
。
SUPER
如果启用了二进制日志记录,则 可能还需要特权来创建或更改存储的功能,如 第25.7节“存储的程序二进制日志记录”中所述。
启用触发器操作。您必须具有此特权才能使表创建,删除,执行或显示该表的触发器。
当触发器被激活(由谁拥有特权执行用户INSERT
, UPDATE
或 DELETE
与触发器关联的表的语句),触发器执行要求谁定义触发器的用户仍然有TRIGGER
对表的特权。
使行可以在数据库的表中更新。
此特权说明符代表“无特权。”用于全局级别, GRANT
用于指定子句,例如WITH GRANT OPTION
不在特权列表中命名特定的帐户特权。 SHOW GRANTS
显示 USAGE
以指示帐户在特权级别没有特权。
默认身份验证插件。这些值是允许的:
mysql_native_password
:使用MySQL本机密码;请参见 第6.4.1.1节“本地可插入身份验证”。
sha256_password
:使用SHA-256密码;请参见第6.4.1.3节“ SHA-256可插拔身份验证”。
caching_sha2_password
:使用SHA-256密码;请参见 第6.4.1.2节“缓存SHA-2可插拔身份验证”。