下表汇总了可为 GRANT 和 REVOKE 语句指定的允许的静态和动态 priv_type 权限类型,以及可授予每个权限的级别。GRANT 和 REVOKE 语句允许的静态权限: | |
| 授予除 GRANT OPTION 和 PROXY 之外的在指定的访问级别的所有权限 |
| 启用 ALTER TABLE。级别:全局、数据库、表 |
| 允许更改或删除存储例程。级别:全局、数据库、例程。 |
| |
| |
| |
| 允许创建、更改或删除表空间和日志文件组。级别:全局。 |
| 启用 CREATE TEMPORARY TABLE。级别:全局、数据库。 |
| 启用 CREATE USER、DROP USER、RENAME USER 和 REVOKE ALL PRIVILEGES。级别:全局。 |
| |
| |
| 允许删除数据库、表和视图。级别:全局、数据库、表。 |
| |
| |
| |
| |
| 允许向其他帐户授予权限或从中删除权限。级别:全局、数据库、表、例程、代理。 |
| |
| |
| 对具有 SELECT 权限的表启用 LOCK TABLES。级别:全局、数据库。 |
| 用户使用 SHOW PROCESSLIST 查看所有进程。级别:全局。 |
| |
| |
| |
| 允许用户询问源服务器或副本服务器的位置。级别:全局。 |
| |
| |
| 启用 SHOW DATABASES 以显示所有数据库。级别:全局。 |
| 启用 SHOW CREATE VIEW。级别:全局、数据库、表。 |
| 启用 mysqladmin shutdown。级别: 全局 |
| 允许使用其他管理操作,如 CHANGE REPLICATION SOURCE TO、CHANGE MASTER TO、KILL、PURGE BINARY LOGS、SET GLOBAL 和 mysqladmin debug 命令。级别:全局。 |
| |
| |
| |
GRANT 和 REVOKE 语句允许的动态权限: | |
| APPLICATION_PASSWORD_ADMIN | |
| |
| |
| |
| |
| |
| |
| |
| Enable firewall rule administration, any user. Level: Global. |
| Enable firewall rule administration, self. Level: Global. |
| |
| |
| |
| |
| |
| |
| |
| 启用SQL节点(NDB群集)之间的用户或角色共享。级别:全局。 |
| PERSIST_RO_VARIABLES_ADMIN | |
| 作为复制通道的 PRIVILEGE_CHECKS_USER。级别:全局。 |
| |
| |
| |
| 允许授予或撤消角色,使用 WITH ADMIN OPTION。级别:全局。 |
| |
| |
| |
| |
| |
| |
| |
| |
触发器与表相关联。要创建或删除触发器,必须具有表的,而不是触发器的 TRIGGER 权限。在 GRANT 语句中,ALL [PRIVILEGES] 或 PROXY 权限必须自己命名,不能与其他权限一起指定。ALL [PRIVILEGES] 表示除 GRANT OPTION 和 PROXY 权限外,要授予权限的级别的所有可用权限。MySQL 账户信息存储在 mysql 系统模式的表中。如果授权表包含有大小写混合的数据库或表名的权限行,并且 lower_case_table_names 系统变量设置为非零值,则 REVOKE 不能用于撤销这些权限。在这种情况下,有必要直接操作授权表。(在设置 lower_case_table_names 时 GRANT 不会创建行记录,但这些行可能是在设置该变量之前创建的。lower_case_table_names 设置只能在服务器启动时配置。)根据 ON 子句使用的语法,可以在多个级别授予权限。对于 REVOKE,同样使用 ON 语法指定要删除的权限。对于全局、数据库、表和例程级别,GRANT ALL 只分配正在授予的级别上存在的权限。例如,GRANT ALL ON db_name.* 是一个数据库级语句,因此它不授予任何仅限于全局的权限,如 FILE。全部授予不会分配 GRANT OPTION 或 PROXY 权限。当分配的对象是表、存储函数或存储过程时,object_type 子句(如果存在)应指定为 TABLE、FUNCTION 或 PROCEDURE。用户对数据库、表、列或例程所拥有的权限,在每个权限级别(包括全局级别)上以逻辑 OR 的形式附加形成帐户权限。不可能因为在较低级别没有权限而拒绝在较高级别授予的权限。例如,此语句授予全局 SELECT 和 INSERT 权限:GRANT SELECT, INSERT ON *.* TO u1;
全局授予的权限适用于所有数据库、表和列,即使在这些较低级别中没有授予。从 MySQL 8.0.16 开始,如果启用了 partial_revokes 系统变量,则可以通过为特定数据库撤销在全局级别授予的权限来显式拒绝该权限:GRANT SELECT, INSERT, UPDATE ON *.* TO u1;
REVOKE INSERT, UPDATE ON db1.* FROM u1;
前面语句的结果是 SELECT 全局应用于所有表,而 INSERT 和 UPDATE 应用于除 db1 中的表之外的全局。账户对 db1 的访问是只读。如果对一个用户使用表、列或例程权限,服务器会检查所有用户的表、列和例程权限,这会使 MySQL 的速度减慢。类似地,如果限制任何用户的查询、更新或连接数,服务器必须监视这些值。MySQL 允许您对不存在的数据库或表授予权限。对于表,要授予的权限必须包括 CREATE 权限。此行为是故意的,旨在使数据库管理员能够为以后创建的数据库或表准备用户帐户和权限。当删除数据库或表时,MySQL 不会自动撤销任何权限。但是,如果删除某个例程,则为该例程授予的任何例程级别权限都将被撤销。官方网址:
https://dev.mysql.com/doc/refman/8.0/en/grant.html