用户是数据库的使用者和管理者。
MySQL通过用户的设置来控制数据库操作人员的访问与操作范围。
服务器中名为mysql的数据库,用于维护数据库的用户以及权限的控制和管理。
MySQL中的所有用户信息都保存在mysql.user数据表中。
根据mysql.user表字段的功能可将其分为6类
- 客户端访问服务器的账号字段
- 验证用户身份的字段
- 安全连接的字段
- 资源限制的字段
- 权限字段
- 账户是否锁定的字段
1.账号字段
Host和User字段共同组成的复合主键用于区分MySQL中的账户
- User字段用于代表用户的名称。
- Host字段表示允许访问的客户端IP地址或主机地址。
- 当Host的值为“*”时,表示所有客户端的用户都可以访问。
SELECT host, user FROM mysql.user;
- root:默认的超级用户。
- session:MySQL5.7新增用户,用于用户身份验证。
- sys:MySQL5.7新增用户,用于系统模式对象的定义,防止DBA(数据库管理员)重命名或删除root用户时发生错误。
- 默认情况下,用户mysql.session和mysql.sys已被锁定,使得数据库操作人员无法使用这两个用户通过客户端连接MySQL服务器。因此,建议读者不要随意解锁和使用mysql.session和mysql.sys用户,否则可能会有意想不到的事情发生。
2.身份验证字段
在MySQL5.7中,mysql.user表中已不再包含Password字段,而是使用plugin和 authentication_string字段保存用户身份验证的信息
- plugin字段用于指定用户的验证插件名称。
- authentication_string字段是根据plugin指定的插件算法对账户明文密码(如123456)加密后的字符串。
SELECT plugin, authentication_string FROM mysql.user WHERE user='root';
- MySQL中root用户的默认验证插件名为mysql_native_password。
- authentication_string字段保存的则是一串不能看出具体含义的值,相对于能够直接看懂的明文密码(如123456),它是经过加密处理的暗码。
- 其他与身份验证的账号密码相关的字段还有password_expired(密码是否过期)、password_last_changed(密码最后一次修改的时间)以及password_lifetime(密码的有效期)。
3.安全连接字段
判断当前连接是否符合SSL安全协议
- ssl_type:用于保存安全连接的类型,它的可选值有''(空)、ANY(任意类型)、X509(X509证书)、SPECIFIED(规定的)四种。
- ssl_cipher:用于保存安全加密连接的特定密码。
- x509_issuer:保存由CA签发的有效的X509证书。
- x509_subject:保存包含主题的有效X509证书。
通常标准的发行版MySQL已禁用SSL加密连接
SHOW VARIABLES LIKE 'have_openssl';
4.资源限制字段
以“max_”开头的字段,保存对用户可使用的服务器资源的限制。
用来防止用户登录MySQL服务器后的不法或不合规范的操作浪费服务器的资源。
用户资源限制字段默认值均为0,表示对此用户没有任何的资源限制。
max_questions:保存每小时允许用户执行查询操作的最多次数。
max_updates:保存每小时允许用户执行更新操作的最多次数。
max_connections:保存每小时允许用户建立连接的最多次数。
max_user_connections:保存允许单个用户同时建立连接的最多数量。
5.权限字段
以“_priv”结尾的字段一共有29个,这些字段保存了用户的全局权限,如Select_priv查询权限、Insert_priv插入权限,Update_priv更新权限等。
user表对应的权限字段的数据类型都是ENUM枚举类型,取值只有N或Y两种。
N表示该用户没有对应权限,默认值都为N。
Y表示该用户有对应权限。
6.账户锁定字段
account_locked字段用于保存当前用户是锁定、还是解锁状态。
该字段是一个枚举类型,当其值为N时表示解锁,此用户可以用于连接服务器。
当其值为Y时表示该用户已被锁定,不能用于连接服务器使用。