一、mysql.user 表
- 用户列:
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| Host | char(60) | NO | 无 | 主机名 |
| User | char(32) | NO | 无 | 用户名 |
| Password/authentication_string(5.7版本开始) | text | YES | 无 | 密码 |
- 权限列:
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| Select_priv | enum(‘N’,’Y’) | NO | N | 是否可以通过SELECT 命令查询数据 |
| Insert_priv | enum(‘N’,’Y’) | NO | N | 是否可以通过 INSERT 命令插入数据 |
| Update_priv | enum(‘N’,’Y’) | NO | N | 是否可以通过UPDATE 命令修改现有数据 |
| Delete_priv | enum(‘N’,’Y’) | NO | N | 是否可以通过DELETE 命令删除现有数据 |
| Create_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建新的数据库和表 |
| Drop_priv | enum(‘N’,’Y’) | NO | N | 是否可以删除现有数据库和表 |
| Reload_priv | enum(‘N’,’Y’) | NO | N | 是否可以执行刷新和重新加载MySQL所用的各种内部缓存的特定命令,包括日志、权限、主机、查询和表 |
| Shutdown_priv | enum(‘N’,’Y’) | NO | N | 是否可以关闭MySQL服务器。将此权限提供给root账户之外的任何用户时,都应当非常谨慎 |
| Process_priv | enum(‘N’,’Y’) | NO | N | 是否可以通过SHOW PROCESSLIST命令查看其他用户的进程 |
| File_priv | enum(‘N’,’Y’) | NO | N | 是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
| Grant_priv | enum(‘N’,’Y’) | NO | N | 是否可以将自己的权限再授予其他用户 |
| References_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建外键约束 |
| Index_priv | enum(‘N’,’Y’) | NO | N | 是否可以对索引进行增删查 |
| Alter_priv | enum(‘N’,’Y’) | NO | N | 是否可以重命名和修改表结构 |
| Show_db_priv | enum(‘N’,’Y’) | NO | N | 是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库 |
| Super_priv | enum(‘N’,’Y’) | NO | N | 是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程;使用SET GLOBAL命令修改全局MySQL变量,执行关于复制和日志的各种命令。(超级权限) |
| Create_tmp_table_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建临时表 |
| Lock_tables_priv | enum(‘N’,’Y’) | NO | N | 是否可以使用LOCK TABLES命令阻止对表的访问/修改 |
| Execute_priv | enum(‘N’,’Y’) | NO | N | 是否可以执行存储过程 |
| Repl_slave_priv | enum(‘N’,’Y’) | NO | N | 是否可以读取用于维护复制数据库环境的二进制日志文件 |
| Repl_client_priv | enum(‘N’,’Y’) | NO | N | 是否可以确定复制从服务器和主服务器的位置 |
| Create_view_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建视图 |
| Show_view_priv | enum(‘N’,’Y’) | NO | N | 是否可以查看视图 |
| Create_routine_priv | enum(‘N’,’Y’) | NO | N | 是否可以更改或放弃存储过程和函数 |
| Alter_routine_priv | enum(‘N’,’Y’) | NO | N | 是否可以修改或删除存储函数及函数 |
| Create_user_priv | enum(‘N’,’Y’) | NO | N | 是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户 |
| Event_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建、修改和删除事件 |
| Trigger_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建和删除触发器 |
| Create_tablespace_priv | enum(‘N’,’Y’) | NO | N | 是否可以创建表空间 |
- 安全列
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| ssl_type | enum(‘’,’ANY’,’X509’,’SPECIFIED’) | NO | 支持ssl标准加密安全字段 | |
| ssl_cipher | blob | NO | 支持ssl标准加密安全字段 | |
| x509_issuer | blob | NO | 支持x509标准字段 | |
| x509_subject | blob | NO | 支持x509标准字段 | |
| plugin | char(64) | NO | mysql_native_password | 引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户 |
| password_expired | enum(‘N’,’Y’) | NO | N | 密码是否过期 (N 未过期,y 已过期) |
| password_last_changed | timestamp | YES | 记录密码最近修改的时间 | |
| password_lifetime | smallint(5) unsigned | YES | 设置密码的有效时间,单位为天数 | |
| account_locked | enum(‘N’,’Y’) | NO | N | 用户是否被锁定(Y 锁定,N 未锁定) |
注意:即使 password_exired 为 Y,用户也可以使用密码登录 MySQL,但是不允许做任何操作
- 资源控制列
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| max_questions | int(11) unsigned | NO | 0 | 规定每小时允许执行查询的操作次数 |
| max_updates | int(11) unsigned | NO | 0 | 规定每小时允许执行更新的操作次数 |
| max_connections | int(11) unsigned | NO | 0 | 规定每小时允许执行的连接操作次数 |
| max_user_connections | int(11) unsigned | NO | 0 | 规定允许同时建立的连接次数 |
注意:默认为0,表示没有限制。一个小时内用户查询或者连接数量超过资源控制限制,用户将被锁定,操作将受限,直到下一个小时才可以执行对应操作。
二、mysql.db 表
表中存储了用户对某个数据库的操作权限。分为用户列和权限列。
用户列:Host 主机名、Db 数据库名、User 用户名
权限列:和user 表中的权限列大致相同,区别在于user 表中权限是针对所有数据库的,db表的权限是针对指定数据库。
如果想要某个数据库有操作权限,可以先将user表中对应的权限设置为N,然后在db表中设置对应数据库的操作权限
三、mysql.tables_priv 表和 mysql.columns_priv 表
tables_priv 表用来对单个表进行权限设置
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| Host | char(60) | NO | 无 | 主机 |
| Db | char(64) | NO | 无 | 数据库名 |
| User | char(32) | NO | 无 | 用户名 |
| Table_name | char(64) | NO | 无 | 表名 |
| Grantor | char(93) | NO | 无 | 修改该记录的用户 |
| Timestamp | timestamp | NO | CURRENT_TIMESTAMP | 修改该记录的时间 |
| Table_priv | set(‘Select’,’Insert’,’Update’,’Delete’,’ Create’,’Drop’,’Grant’,’References’, ‘Index’,’Alter’,’Create View’,’Show view’,’Trigger’) | NO | 无 | 表示对表的操作权限,包括 Select、Insert、Update、Delete、Create、Drop、Grant、References、Index 和 Alter 等 |
| Column_priv | set(‘Select’,’Insert’,’Update’,’References’) | NO | 无 | 表示对表中的列的操作权限,包括 Select、Insert、Update 和 References |
columns_priv 表用来对单个数据列进行权限设置
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| Host | char(60) | NO | 无 | 主机 |
| Db | char(64) | NO | 无 | 数据库名 |
| User | char(32) | NO | 无 | 用户名 |
| Table_name | char(64) | NO | 无 | 表名 |
| Column_name | char(64) | NO | 无 | 数据列名称,用来指定对哪些数据列具有操作权限 |
| Timestamp | timestamp | NO | CURRENT_TIMESTAMP | 修改该记录的时间 |
| Column_priv | set(‘Select’,’Insert’,’Update’,’References’) | NO | 无 | 表示对表中的列的操作权限,包括 Select、Insert、Update 和 References |
四、mysql.procs_priv 表
proc_priv 表可以对存储过程和存储函数进行权限设置
| 字段名 | 字段类型 | 是否为空 | 默认值 | 说明 |
|---|---|---|---|---|
| Host | char(60) | NO | 无 | 主机名 |
| Db | char(64) | NO | 无 | 数据库名 |
| User | char(32) | NO | 无 | 用户名 |
| Routine_name | char(64) | NO | 无 | 表示存储过程或函数的名称 |
| Routine_type | enum(‘FUNCTION’,’PROCEDURE’) | NO | 无 | 表示存储过程或函数的类型,Routine_type 字段有两个值,分别是 FUNCTION 和 PROCEDURE。FUNCTION 表示这是一个函数;PROCEDURE 表示这是一个 存储过程。 |
| Grantor | char(93) | NO | 无 | 插入或修改该记录的用户 |
| Proc_priv | set(‘Execute’,’Alter Routine’,’Grant’) | NO | 无 | 表示拥有的权限,包括 Execute、Alter Routine、Grant 3种 |
| Timestamp | timestamp | NO | CURRENT_TIMESTAMP | 表示记录更新时间 |