8.2.2 Privileges Provided by MySQL
MySQL 8.4 Reference Manual Including MySQL NDB Cluster 8.4
8.2.2 Privileges Provided by MySQL
The privileges granted to a MySQL account determine which operations the account can perform. MySQL privileges differ in the contexts in which they apply and at different levels of operation:
- Administrative privileges enable users to manage operation of the MySQL server. These privileges are global because they are not specific to a particular database.
- Database privileges apply to a database and to all objects within it. These privileges can be granted for specific databases, or globally so that they apply to all databases.
- Privileges for database objects such as tables, indexes, views, and stored routines can be granted for specific objects within a database, for all objects of a given type within a database (for example, all tables in a database), or globally for all objects of a given type in all databases.
Privileges also differ in terms of whether they are static (built in to the server) or dynamic (defined at runtime). Whether a privilege is static or dynamic affects its availability to be granted to user accounts and roles. For information about the differences between static and dynamic privileges, see Static Versus Dynamic Privileges.)
Information about account privileges is stored in the grant tables
in the mysql system database. For a description
of the structure and contents of these tables, see
Section 8.2.3, “Grant Tables”. The MySQL server reads the
contents of the grant tables into memory when it starts, and
reloads them under the circumstances indicated in
Section 8.2.13, “When Privilege Changes Take Effect”. The server bases
access-control decisions on the in-memory copies of the grant
tables.
Important
Some MySQL releases introduce changes to the grant tables to add new privileges or features. To make sure that you can take advantage of any new capabilities, update your grant tables to the current structure whenever you upgrade MySQL. See Chapter 3, Upgrading MySQL.
The following sections summarize the available privileges, provide more detailed descriptions of each privilege, and offer usage guidelines.
- Summary of Available Privileges
- Static Privilege Descriptions
- Dynamic Privilege Descriptions
- Privilege-Granting Guidelines
- Static Versus Dynamic Privileges
- Migrating Accounts from SUPER to Dynamic Privileges
Summary of Available Privileges
The following table shows the static privilege names used in
GRANT and
REVOKE statements, along with the
column name associated with each privilege in the grant tables
and the context in which the privilege applies.
Table 8.2 Permissible Static Privileges for GRANT and REVOKE
| 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 |
The following table shows the dynamic privilege names used in
GRANT and
REVOKE statements, along with the
context in which the privilege applies.
Table 8.3 Permissible Dynamic Privileges for GRANT and REVOKE
| Privilege | Context |
|---|---|
ALLOW_NONEXISTENT_DEFINER |
Orphan object protection |
APPLICATION_PASSWORD_ADMIN |
Dual password administration |
AUDIT_ABORT_EXEMPT |
Allow queries blocked by audit log filter |
AUDIT_ADMIN |
Audit log administration |
AUTHENTICATION_POLICY_ADMIN |
Authentication administration |
BACKUP_ADMIN |
Backup administration |
BINLOG_ADMIN |
Backup and Replication administration |
BINLOG_ENCRYPTION_ADMIN |
Backup and Replication administration |
CLONE_ADMIN |
Clone administration |
CONNECTION_ADMIN |
Server administration |
ENCRYPTION_KEY_ADMIN |
Server administration |
FIREWALL_ADMIN |
Firewall administration |
FIREWALL_EXEMPT |
Firewall administration |
FIREWALL_USER |
Firewall administration |
FLUSH_OPTIMIZER_COSTS |
Server administration |
FLUSH_PRIVILEGES |
Server administration |
FLUSH_STATUS |
Server administration |
FLUSH_TABLES |
Server administration |
FLUSH_USER_RESOURCES |
Server administration |
GROUP_REPLICATION_ADMIN |
Replication administration |
GROUP_REPLICATION_STREAM |
Replication administration |
INNODB_REDO_LOG_ARCHIVE |
Redo log archiving administration |
INNODB_REDO_LOG_ENABLE |
Redo log administration |
MASKING_DICTIONARIES_ADMIN |
Server administration |
NDB_STORED_USER |
NDB Cluster |
OPTIMIZE_LOCAL_TABLE |
OPTIMIZE LOCAL TABLE statements |
PASSWORDLESS_USER_ADMIN |
Authentication administration |
PERSIST_RO_VARIABLES_ADMIN |
Server administration |
REPLICATION_APPLIER |
PRIVILEGE_CHECKS_USER for a replication channel |
REPLICATION_SLAVE_ADMIN |
Replication administration |
RESOURCE_GROUP_ADMIN |
Resource group administration |
RESOURCE_GROUP_USER |
Resource group administration |
ROLE_ADMIN |
Server administration |
SENSITIVE_VARIABLES_OBSERVER |
Server administration |
SESSION_VARIABLES_ADMIN |
Server administration |
SET_ANY_DEFINER |
Server administration |
SHOW_ROUTINE |
Server administration |
SKIP_QUERY_REWRITE |
Server administration |
SYSTEM_USER |
Server administration |
SYSTEM_VARIABLES_ADMIN |
Server administration |
TABLE_ENCRYPTION_ADMIN |
Server administration |
TELEMETRY_LOG_ADMIN |
Telemetry log administration for MySQL HeatWave on AWS |
TP_CONNECTION_ADMIN |
Thread pool administration |
TRANSACTION_GTID_TAG |
Replication administration |
VERSION_TOKEN_ADMIN |
Server administration |
XA_RECOVER_ADMIN |
Server administration |
Static Privilege Descriptions
Static privileges are built in to the server, in contrast to dynamic privileges, which are defined at runtime. The following list describes each static privilege available in MySQL.
Particular SQL statements might have more specific privilege requirements than indicated here. If so, the description for the statement in question provides the details.
These privilege specifiers are shorthand for “all
privileges available at a given privilege level”
(except GRANT OPTION). For
example, granting ALL at the
global or table level grants all global privileges or all
table-level privileges, respectively.
- ALTER
Enables use of the ALTER
TABLE statement to change the structure of tables.
ALTER TABLE also requires the
CREATE and
INSERT privileges. Renaming a
table requires ALTER and
DROP on the old table,
CREATE, and
INSERT on the new table.
- ALTER ROUTINE
Enables use of statements that alter or drop stored routines
(stored procedures and functions). For routines that fall
within the scope at which the privilege is granted and for
which the user is not the user named as the routine
DEFINER, also enables access to routine
properties other than the routine definition.
- CREATE
Enables use of statements that create new databases and
tables.
- CREATE ROLE
Enables use of the CREATE
ROLE statement. (The CREATE
USER privilege also enables use of the
CREATE ROLE statement.) See
Section 8.2.10, “Using Roles”.
The CREATE ROLE and
DROP ROLE privileges are not
as powerful as CREATE USER
because they can be used only to create and drop accounts.
They cannot be used as CREATE
USER can be modify account attributes or rename
accounts. See
User and Role Interchangeability.
- CREATE ROUTINE
Enables use of statements that create stored routines
(stored procedures and functions). For routines that fall
within the scope at which the privilege is granted and for
which the user is not the user named as the routine
DEFINER, also enables access to routine
properties other than the routine definition.
- CREATE TABLESPACE
Enables use of statements that create, alter, or drop
tablespaces and log file groups.
- CREATE TEMPORARY TABLES
Enables the creation of temporary tables using the
CREATE TEMPORARY TABLE
statement.
After a session has created a temporary table, the server
performs no further privilege checks on the table. The
creating session can perform any operation on the table,
such as DROP TABLE,
INSERT,
UPDATE, or
SELECT. For more information,
see Section 15.1.20.2, “CREATE TEMPORARY TABLE Statement”.
- CREATE USER
Enables use of the ALTER
USER, CREATE ROLE,
CREATE USER,
DROP ROLE,
DROP USER,
RENAME USER, and
REVOKE ALL
PRIVILEGES statements.
- CREATE VIEW
Enables use of the CREATE
VIEW statement.
- DELETE
Enables rows to be deleted from tables in a database.
- DROP
Enables use of statements that drop (remove) existing
databases, tables, and views. The
DROP privilege is required to
use the ALTER TABLE ... DROP PARTITION
statement on a partitioned table. The
DROP privilege is also
required for TRUNCATE TABLE.
- DROP ROLE
Enables use of the DROP ROLE
statement. (The CREATE USER
privilege also enables use of the DROP
ROLE statement.) See Section 8.2.10, “Using Roles”.
The CREATE ROLE and
DROP ROLE privileges are not
as powerful as CREATE USER
because they can be used only to create and drop accounts.
They cannot be used as CREATE
USER can be modify account attributes or rename
accounts. See
User and Role Interchangeability.
- EVENT
Enables use of statements that create, alter, drop, or
display events for the Event Scheduler.
- EXECUTE
Enables use of statements that execute stored routines
(stored procedures and functions). For routines that fall
within the scope at which the privilege is granted and for
which the user is not the user named as the routine
DEFINER, also enables access to routine
properties other than the routine definition.
- FILE
Affects the following operations and server behaviors:
- Enables reading and writing files on the server host
using the
LOAD DATAandSELECT ... INTO OUTFILEstatements and theLOAD_FILE()function. A user who has theFILEprivilege can read any file on the server host that is either world-readable or readable by the MySQL server. (This implies the user can read any file in any database directory, because the server can access any of those files.) - Enables creating new files in any directory where the MySQL server has write access. This includes the server's data directory containing the files that implement the privilege tables.
- Enables use of the
DATA DIRECTORYorINDEX DIRECTORYtable option for theCREATE TABLEstatement.
As a security measure, the server does not overwrite existing files.
To limit the location in which files can be read and
written, set the
secure_file_priv system
variable to a specific directory. See
Section 7.1.8, “Server System Variables”.
- GRANT OPTION
Enables you to grant to or revoke from other users those
privileges that you yourself possess.
- INDEX
Enables use of statements that create or drop (remove)
indexes. INDEX applies to
existing tables. If you have the
CREATE privilege for a table,
you can include index definitions in the
CREATE TABLE statement.
- INSERT
Enables rows to be inserted into tables in a database.
INSERT is also required for
the ANALYZE TABLE,
OPTIMIZE TABLE, and
REPAIR TABLE
table-maintenance statements.
- LOCK TABLES
Enables use of explicit LOCK
TABLES statements to lock tables for which you
have the SELECT privilege.
This includes use of write locks, which prevents other
sessions from reading the locked table.
- PROCESS
The PROCESS privilege
controls access to information about threads executing
within the server (that is, information about statements
being executed by sessions). Thread information available
using the SHOW PROCESSLIST
statement, the mysqladmin processlist
command, the Information Schema
PROCESSLIST table, and the
Performance Schema processlist
table is accessible as follows:
- With the
PROCESSprivilege, a user has access to information about all threads, even those belonging to other users. - Without the
PROCESSprivilege, nonanonymous users have access to information about their own threads but not threads for other users, and anonymous users have no access to thread information.
Note
The Performance Schema
threads table also provides
thread information, but table access uses a different
privilege model. See
Section 29.12.22.8, “The threads Table”.
The PROCESS privilege also
enables use of the SHOW
ENGINE statement, access to the
INFORMATION_SCHEMA
InnoDB tables (tables with names that
begin with INNODB_), and access to the
INFORMATION_SCHEMA
FILES table.
- PROXY
Enables one user to impersonate or become known as another
user. See Section 8.2.19, “Proxy Users”.
- REFERENCES
Creation of a foreign key constraint requires the
REFERENCES privilege for the
parent table.
- RELOAD
The RELOAD enables the
following operations:
- Use of the
FLUSHstatement. -
Use of mysqladmin commands that are equivalent to
FLUSHoperations:flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,refresh, andreload.The
reloadcommand tells the server to reload the grant tables into memory.flush-privilegesis a synonym forreload. Therefreshcommand closes and reopens the log files and flushes all tables. The otherflush-xxxcommands perform functions similar torefresh, but are more specific and may be preferable in some instances. For example, if you want to flush just the log files,flush-logsis a better choice thanrefresh. - Use of mysqldump options that perform variousFLUSHoperations:--flush-logsand--source-data. - Use of theRESET BINARY LOGS AND GTIDSandRESET REPLICAstatements. -REPLICATION CLIENT
Enables use of the SHOW BINARY LOG
STATUS, SHOW REPLICA
STATUS, and SHOW BINARY
LOGS statements.
- REPLICATION SLAVE
Enables the account to request updates that have been made
to databases on the replication source server, using the
SHOW
REPLICAS, SHOW RELAYLOG
EVENTS, and SHOW BINLOG
EVENTS statements. This privilege is also required
to use the mysqlbinlog options
--read-from-remote-server
(-R) and
--read-from-remote-source.
Grant this privilege to accounts that are used by replicas
to connect to the current server as their replication source
server.
- SELECT
Enables rows to be selected from tables in a database.
SELECT statements require the
SELECT privilege only if they
actually access tables. Some
SELECT statements do not
access tables and can be executed without permission for any
database. For example, you can use
SELECT as a simple calculator
to evaluate expressions that make no reference to tables:
SELECT 1+1;
SELECT PI()*2;
The SELECT privilege is also
needed for other statements that read column values. For
example, SELECT is needed for
columns referenced on the right hand side of
col_name=expr
assignment in UPDATE
statements or for columns named in the
WHERE clause of
DELETE or
UPDATE statements.
The SELECT privilege is
needed for tables or views used with
EXPLAIN, including any
underlying tables in view definitions.
- SHOW DATABASES
Enables the account to see database names by issuing the
SHOW DATABASE statement. Accounts that do
not have this privilege see only databases for which they
have some privileges, and cannot use the statement at all if
the server was started with the
--skip-show-database option.
Caution
Because any static global privilege is considered a
privilege for all databases, any static global privilege
enables a user to see all database names with
SHOW DATABASES or by
examining the SCHEMATA table
of INFORMATION_SCHEMA, except databases
that have been restricted at the database level by partial
revokes.
- SHOW VIEW
Enables use of the SHOW CREATE
VIEW statement. This privilege is also needed for
views used with EXPLAIN.
- SHUTDOWN
Enables use of the SHUTDOWN
and RESTART statements, the
mysqladmin shutdown command, and the
mysql_shutdown() C API
function.
- SUPER
SUPER is a powerful and
far-reaching privilege and should not be granted lightly. If
an account needs to perform only a subset of
SUPER operations, it may be
possible to achieve the desired privilege set by instead
granting one or more dynamic privileges, each of which
confers more limited capabilities. See
Dynamic Privilege Descriptions.
Note
SUPER is deprecated, and
you should expect it to be removed in a future version of
MySQL. See
Migrating Accounts from SUPER to Dynamic Privileges.
SUPER affects the following
operations and server behaviors:
-
Enables system variable changes at runtime:
- Enables server configuration changes to global
system variables with
SET GLOBALandSET PERSIST.
The corresponding dynamic privilege is
SYSTEM_VARIABLES_ADMIN. - Enables setting restricted session system variables that require a special privilege.The corresponding dynamic privilege is
SESSION_VARIABLES_ADMIN.See also Section 7.1.9.1, “System Variable Privileges”. - Enables changes to global transaction characteristics (see Section 15.3.7, “SET TRANSACTION Statement”).
The corresponding dynamic privilege is
SYSTEM_VARIABLES_ADMIN. - Enables the account to start and stop replication, including Group Replication.The corresponding dynamic privilege is
REPLICATION_SLAVE_ADMINfor regular replication,GROUP_REPLICATION_ADMINfor Group Replication. - Enables use ofCHANGE REPLICATION SOURCE TOandCHANGE REPLICATION FILTERstatements.The corresponding dynamic privilege is
REPLICATION_SLAVE_ADMIN. - Enables binary log control by means of thePURGE BINARY LOGSandBINLOGstatements.The corresponding dynamic privilege is
BINLOG_ADMIN. - Enables setting the effective authorization ID when executing a view or stored program. A user with this privilege can specify any account in theDEFINERattribute of a view or stored program.The corresponding dynamic privileges are
SET_ANY_DEFINERandALLOW_NONEXISTENT_DEFINER. - Enables use of theCREATE SERVER,ALTER SERVER, andDROP SERVERstatements. - Enables use of the mysqladmin debug command. - EnablesInnoDBencryption key rotation.The corresponding dynamic privilege is
ENCRYPTION_KEY_ADMIN. - Enables execution of Version Tokens functions.The c
- Enables server configuration changes to global
system variables with
(本文超出站点单文档体积上限,已截断)
