- MySQL 5.1 Reference Manual :: 5 MySQL Server Administration :: 5.4 The MySQL Access Privilege System :: 5.4.2 Privilege System Grant Tables
-
- MySQL 5.1 Reference Manual
- Preface, Notes, Licenses
- 1 General Information
- 2 Installing and Upgrading MySQL
- 3 Tutorial
- 4 MySQL Programs
- 5 MySQL Server Administration
- 6 Backup and Recovery
- 7 Optimization
- 8 Language Structure
- 9 Internationalization and Localization
- 10 Data Types
- 11 Functions and Operators
- 12 SQL Statement Syntax
- 13 Storage Engines
- 14 High Availability and Scalability
- 15 MySQL Enterprise Monitor
- 16 Replication
- 17 MySQL Cluster NDB 6.X/7.X
- 18 Partitioning
- 19 Stored Programs and Views
- 20 INFORMATION_SCHEMA Tables
- 21 Connectors and APIs
- 22 Extending MySQL
- A MySQL 5.1 Frequently Asked Questions
- B Errors, Error Codes, and Common Problems
- C MySQL Change History
- D Restrictions and Limits
- Index
- Standard Index
- C Function Index
- Command Index
- Function Index
- INFORMATION_SCHEMA Index
- Transaction Isolation Level Index
- JOIN Types Index
- Operator Index
- Option Index
- Privileges Index
- SQL Modes Index
- Status Variable Index
- Statement/Syntax Index
- System Variable Index
Normally, you manipulate the contents of the grant tables in the
mysql
database indirectly by using statements such asGRANT
andREVOKE
to set up accounts and control the privileges available to each one. See Section 12.4.1, “Account Management Statements”. The discussion here describes the underlying structure of the grant tables and how the server uses their contents when interacting with clients.Some tables in the
mysql
database do not hold grant information and are discussed elsewhere:The
event
table contains information about Event Scheduler events: See Section 19.4, “Using the Event Scheduler”.The
func
table contains information about user-defined functions: See Section 22.3, “Adding New Functions to MySQL”.The
help_
tables are used for server-side help: See Section 5.1.8, “Server-Side Help”.xxx
The
plugin
table contains information about server plugins: See Section 12.4.3.1, “Installing and Uninstalling Plugins”, and Section 22.2, “The MySQL Plugin API”.The
proc
table contains information about stored procedures and functions: See Section 19.2, “Using Stored Routines (Procedures and Functions)”.The
servers
table is used by theFEDERATED
storage engine: See Section 13.11.2.2, “Creating aFEDERATED
Table UsingCREATE SERVER
”.The
time_zone_
tables contain time zone information: See Section 9.6, “MySQL Server Time Zone Support”.xxx
Tables with
_log
in their name are used for logging: See Section 5.2, “MySQL Server Logs”.
Each grant table contains scope columns and privilege columns:
Scope columns determine the scope of each row (entry) in the tables; that is, the context in which the row applies. For example, a
user
table row withHost
andUser
values of'thomas.loc.gov'
and'bob'
would be used for authenticating connections made to the server from the hostthomas.loc.gov
by a client that specifies a user name ofbob
. Similarly, adb
table row withHost
,User
, andDb
column values of'thomas.loc.gov'
,'bob'
and'reports'
would be used whenbob
connects from the hostthomas.loc.gov
to access thereports
database. Thetables_priv
andcolumns_priv
tables contain scope columns indicating tables or table/column combinations to which each row applies. Theprocs_priv
scope columns indicate the stored routine to which each row applies.Privilege columns indicate which privileges are granted by a table row; that is, what operations can be performed. The server combines the information in the various grant tables to form a complete description of a user's privileges. Section 5.4.5, “Access Control, Stage 2: Request Verification”, describes the rules that are used to do this.
The server uses the grant tables in the following manner:
-
The
user
table scope columns determine whether to reject or allow incoming connections. For allowed connections, any privileges granted in theuser
table indicate the user's global (superuser) privileges. Any privilege granted in this table applies to all databases on the server.Note
Because any global privilege is considered a privilege for all databases, any global privilege enables a user to see all database names with
SHOW DATABASES
or by examining theSCHEMATA
table ofINFORMATION_SCHEMA
. The
db
table scope columns determine which users can access which databases from which hosts. The privilege columns determine which operations are allowed. A privilege granted at the database level applies to the database and to all objects in the database, such as tables and stored programs.-
The
host
table is used in conjunction with thedb
table when you want a givendb
table row to apply to several hosts. For example, if you want a user to be able to use a database from several hosts in your network, leave theHost
value empty in the user'sdb
table row, then populate thehost
table with a row for each of those hosts. This mechanism is described more detail in Section 5.4.5, “Access Control, Stage 2: Request Verification”. The
tables_priv
andcolumns_priv
tables are similar to thedb
table, but are more fine-grained: They apply at the table and column levels rather than at the database level. A privilege granted at the table level applies to the table and to all its columns. A privilege granted at the column level applies only to a specific column.The
procs_priv
table applies to stored routines. A privilege granted at the routine level applies only to a single routine.
The server uses the
user
,db
, andhost
tables in themysql
database at both the first and second stages of access control (see Section 5.4, “The MySQL Access Privilege System”). The columns in theuser
anddb
tables are shown here. Thehost
table is similar to thedb
table but has a specialized use as described in Section 5.4.5, “Access Control, Stage 2: Request Verification”.Table Name user db Scope columns Host
Host
User
Db
Password
User
Privilege columns Select_priv
Select_priv
Insert_priv
Insert_priv
Update_priv
Update_priv
Delete_priv
Delete_priv
Index_priv
Index_priv
Alter_priv
Alter_priv
Create_priv
Create_priv
Drop_priv
Drop_priv
Grant_priv
Grant_priv
Create_view_priv
Create_view_priv
Show_view_priv
Show_view_priv
Create_routine_priv
Create_routine_priv
Alter_routine_priv
Alter_routine_priv
Execute_priv
Execute_priv
Trigger_priv
Trigger_priv
Event_priv
Event_priv
Create_tmp_table_priv
Create_tmp_table_priv
Lock_tables_priv
Lock_tables_priv
References_priv
References_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Show_db_priv
Super_priv
Repl_slave_priv
Repl_client_priv
Create_user_priv
Security columns ssl_type
ssl_cipher
x509_issuer
x509_subject
Resource control columns max_questions
max_updates
max_connections
max_user_connections
The
Event_priv
andTrigger_priv
columns were added in MySQL 5.1.6.During the second stage of access control, the server performs request verification to make sure that each client has sufficient privileges for each request that it issues. In addition to the
user
,db
, andhost
grant tables, the server may also consult thetables_priv
andcolumns_priv
tables for requests that involve tables. The latter tables provide finer privilege control at the table and column levels. They have the columns shown in the following table.Table Name tables_priv columns_priv Scope columns Host
Host
Db
Db
User
User
Table_name
Table_name
Column_name
Privilege columns Table_priv
Column_priv
Column_priv
Other columns Timestamp
Timestamp
Grantor
The
Timestamp
andGrantor
columns currently are unused and are discussed no further here.For verification of requests that involve stored routines, the server may consult the
procs_priv
table, which has the columns shown in the following table.Table Name procs_priv Scope columns Host
Db
User
Routine_name
Routine_type
Privilege columns Proc_priv
Other columns Timestamp
Grantor
The
Routine_type
column is anENUM
column with values of'FUNCTION'
or'PROCEDURE'
to indicate the type of routine the row refers to. This column enables privileges to be granted separately for a function and a procedure with the same name.The
Timestamp
andGrantor
columns currently are unused and are discussed no further here.Scope columns in the grant tables contain strings. They are declared as shown here; the default value for each is the empty string.
Column Name Type Host
CHAR(60)
User
CHAR(16)
Password
CHAR(41)
Db
CHAR(64)
Table_name
CHAR(64)
Column_name
CHAR(64)
Routine_name
CHAR(64)
For access-checking purposes, comparisons of
User
,Password
,Db
, andTable_name
values are case sensitive. Comparisons ofHost
,Column_name
, andRoutine_name
values are not case sensitive.In the
user
,db
, andhost
tables, each privilege is listed in a separate column that is declared asENUM('N','Y') DEFAULT 'N'
. In other words, each privilege can be disabled or enabled, with the default being disabled.In the
tables_priv
,columns_priv
, andprocs_priv
tables, the privilege columns are declared asSET
columns. Values in these columns can contain any combination of the privileges controlled by the table. Only those privileges listed in the column value are enabled.Table Name Column Name Possible Set Elements tables_priv
Table_priv
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger'
tables_priv
Column_priv
'Select', 'Insert', 'Update', 'References'
columns_priv
Column_priv
'Select', 'Insert', 'Update', 'References'
procs_priv
Proc_priv
'Execute', 'Alter Routine', 'Grant'
Administrative privileges (such as
RELOAD
orSHUTDOWN
) are specified only in theuser
table. Administrative operations are operations on the server itself and are not database-specific, so there is no reason to list these privileges in the other grant tables. Consequently, to determine whether you can perform an administrative operation, the server need consult only theuser
table.The
FILE
privilege also is specified only in theuser
table. It is not an administrative privilege as such, but your ability to read or write files on the server host is independent of the database you are accessing.The mysqld server reads the contents of the grant tables into memory when it starts. You can tell it to reload the tables by issuing a
FLUSH PRIVILEGES
statement or executing a mysqladmin flush-privileges or mysqladmin reload command. Changes to the grant tables take effect as indicated in Section 5.4.6, “When Privilege Changes Take Effect”.When you modify an account's privileges, it is a good idea to verify that the changes set up privileges the way you want. To check the privileges for a given account, use the
SHOW GRANTS
statement (see Section 12.4.5.22, “SHOW GRANTS
Syntax”). For example, to determine the privileges that are granted to an account with user name and host name values ofbob
andpc84.example.com
, use this statement:SHOW GRANTS FOR 'bob'@'pc84.example.com';