一、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 | 表示记录更新时间 |