12.1 user
user表提供查询全局权限信息。该表中的账号密码信息在认证1阶段(关于认证阶段的相关内容,我们会在下一章中进行介绍)决定着是否允许用户连接,对于通过账号密码认证阶段的连接,如果同时通过user表中的权限检查,那么就代表该用户拥有全局权限。该表中记录的权限信息代表用户是否拥有该实例下所有数据库的相应全局权限。
注意:如果在user表中有任意一个权限字段值为Y的,就被认为拥有全局权限,所以用户在使用SHOW DATABASES或者information_schema下的schemata表查询时,可以查询到所有数据库名称列表。
下面是该表中存储的信息内容。
mysql> select * from mysql.user limit 1\G; *************************** 1. row *************************** Host: % User: qfsys Select_priv: Y Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: Y Shutdown_priv: Y Process_priv: Y File_priv: Y Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: Y Create_tmp_table_priv: N Lock_tables_priv: Y Execute_priv: N Repl_slave_priv: Y Repl_client_priv: Y Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: *3B3D7D2FD587C29C730F36CD52B4BA8CCF4C744F password_expired: N password_last_changed: 2017-07-01 14:37:32 password_lifetime: NULL account_locked: N 1 row in set(0.00 sec)
表字段含义如下。
● Host和User:官方称为范围字段,可以理解为这两个字段构成了允许访问的客户端范围,以及客户端可以访问的数据库资源范围(这里没有像db表那样的Db字段限制库范围,可以理解为整个实例范围的数据库)。
■ Host:代表允许用户从哪些主机访问数据库,可以用通配符和DNS。
■ User:用户名。
● 权限字段:从Select_priv到Create_tablespace_priv之间的字段,官方称为权限字段。每一个字段对应一个具体的权限,值为Y代表有权限,值为N代表没有权限。
● 以下字段官方称为安全配置字段,与客户端和服务端之间的安全、加密通信有关。
■ ssl_type:如果用户配置了使用加密SSL连接,则该字段记录用户使用的加密证书类型。
■ ssl_cipher:表示用于SSL连接握手中可能使用到的密码列表。
■ x509_issuer:x509证书相关字段。
■ x509_subject:x509证书相关字段。
■ plugin:代表用户使用的密码认证插件名称。
■ authentication_string:表示用户密码的MD5加密字符串。
■ password_expired:表示用户密码是否过期,值为Y表示用户密码会过期,值为N表示用户密码永不过期。
■ password_last_changed:表示用户密码的最近一次修改时间。如果使用MySQL内建的认证插件(mysql_native_password或sha256_password),则该字段值为非空;如果使用外部认证插件,则该字段值为空;当使用MySQL内建的认证插件时,该字段初始值为CREATE USER、ALTER USER、SET PASSWORD、GRANT语句执行创建用户或者修改密码时的时间。
■ password_lifetime:如果password_expired字段值为Y,则该字段记录用户剩余的密码未过期天数;假设该字段值为N,则表示用户需要每N天修改一次密码。如果用户未单独指定该值,则使用全局系统变量default_password_lifetime的值代替。当该字段值为NULL且全局系统变量default_password_lifetime为0或者该字段值为0时,表示该用户的密码永不过期。
■ account_locked:代表用户当前状态是锁定状态还是激活可用状态。
● 以下字段官方称为资源控制字段,用于限制用户的一些访问资源。
■ max_questions:代表所有用户每小时的最大并发查询数。
■ max_updates:代表所有用户每小时的最大并发更新次数。
■ max_connections:代表所有用户每小时的最大并发连接数。
■ max_user_connections:代表该行记录中的用户每小时的最大并发连接数。