一、用户列 (User Columns) - “能否登录”
这是用户登录时的身份验证凭据。只有这三项完全匹配,用户才能连接至 MySQL 服务器。
字段名 | 类型 | 说明 |
---|---|---|
Host | char(60) | 允许用户连接的主机名或 IP 地址。% 表示任何主机。 |
User | char(32) | 用户名。 |
authentication_string | text | 加密后的密码(自 MySQL 5.7 起取代 Password 字段)。 |
关键点:
创建用户、修改密码、身份验证都围绕这三列。
`Host` 和 `User` 共同组成一个用户的主键。`'root'@'localhost'` 和 `'root'@'%'` 是两个完全不同的用户。
二、权限列 (Privilege Columns) - “能做什么”
这些以 `_priv` 结尾的 `ENUM('N','Y')` 字段定义了用户在所有数据库和对象上拥有的全局权限。默认值为 `'N'`。
权限类别 包含的主要权限 说明
数据操作 `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv` 对表中数据的增删改查权限(DML)。
数据库/表结构操作 `Create_priv`, `Drop_priv`, `Alter_priv`, `Index_priv` 创建、删除、修改数据库、表、索引等(DDL)。
高级管理 `Super_priv`, `Shutdown_priv`, `Reload_priv`, `Process_priv`, `File_priv` 危险权限,通常只授予数据库管理员(DBA)。
权限管理 `Grant_priv` 允许用户将其自身的权限授予其他用户。
其他 `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Execute_priv`等 创建用户、管理事件、触发器、执行存储过程等。
管理方式:
推荐:使用 `GRANT` 和 `REVOKE` SQL 语句进行授权和收权。
直接修改(不推荐):通过 `UPDATE` 语句直接修改 `user` 表,修改后需执行 `FLUSH PRIVILEGES;` 才能生效。
三、安全列 (Security Columns) - “安全地登录”
字段名 说明
`plugin` 身份验证插件(如 `mysql_native_password`, `caching_sha2_password`)。
`password_expired` 密码是否过期(`'Y'` 或 `'N'`),强制用户下次登录时必须修改密码。
`password_last_changed` 密码最后一次修改的时间。
`password_lifetime` 密码的有效期(天数)。
`account_locked` 账户是否被锁定(`'Y'` 或 `'N'`),被锁定的账户无法登录。
`ssl_type`, `ssl_cipher` 等 用于强制使用 SSL 加密连接,增强网络传输安全。
实践提示:
`ALTER USER 'username'@'host' PASSWORD EXPIRE;` 可设置密码立即过期。
`ALTER USER 'username'@'host' ACCOUNT LOCK;` 可临时锁定账户,无需删除。
四、资源控制列 (Resource Control Columns) - “能用多少”
字段名 说明
`max_questions` 用户每小时最多可执行的查询操作次数。
`max_updates` 用户每小时最多可执行的更新操作次数(INSERT, UPDATE, DELETE)。
`max_connections` 用户每小时最多可建立的连接次数。
`max_user_connections` 用户同时建立的最大连接数。
管理方式:通常在使用 `GRANT` 语句创建用户时通过 `WITH` 子句设置。
GRANT ... ON *.* TO 'user'@'host'
WITH MAX_QUERIES_PER_HOUR 100
MAX_UPDATES_PER_HOUR 30;
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程