用户管理
创建用户、授权、修改密码和撤销权限
语法
CREATE USER 'user'@'host' IDENTIFIED BY 'password'; GRANT privileges ON db.table TO 'user'@'host'; REVOKE privileges ON db.table FROM 'user'@'host';
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
CREATE USER |
创建新用户 | CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass123!'; |
常用 |
GRANT |
授予权限 | GRANT SELECT, INSERT ON ecommerce.* TO 'app'@'%'; |
常用 |
REVOKE |
撤销权限 | REVOKE DELETE ON ecommerce.* FROM 'app'@'%'; |
常用 |
ALTER USER |
修改用户(如改密码) | ALTER USER 'app'@'%' IDENTIFIED BY 'NewPass456!'; |
常用 |
DROP USER |
删除用户 | DROP USER IF EXISTS 'temp'@'%'; |
危险 |
SHOW GRANTS |
查看用户权限 | SHOW GRANTS FOR 'app'@'%'; |
常用 |
示例
创建应用专用用户
-- 创建用户,只允许从应用服务器连接 CREATE USER 'ecommerce_app'@'192.168.1.%' IDENTIFIED BY 'K8s#Prod$2026!'; -- 授予业务所需的最小权限 GRANT SELECT, INSERT, UPDATE ON ecommerce.* TO 'ecommerce_app'@'192.168.1.%'; -- 刷新权限 FLUSH PRIVILEGES;
遵循最小权限原则,不给 DELETE 和 DROP 权限
创建只读用户
CREATE USER 'readonly'@'%' IDENTIFIED BY 'ReadOnly2026!'; GRANT SELECT ON ecommerce.* TO 'readonly'@'%'; FLUSH PRIVILEGES;
适合数据分析、报表等只读场景
修改密码
-- MySQL 8.0+ 推荐方式 ALTER USER 'ecommerce_app'@'192.168.1.%' IDENTIFIED BY 'NewSecurePass2026!'; -- 修改当前用户密码 ALTER USER CURRENT_USER() IDENTIFIED BY 'MyNewPass!';
定期轮换密码是安全最佳实践
查看和撤销权限
-- 查看用户权限 SHOW GRANTS FOR 'ecommerce_app'@'192.168.1.%'; -- 撤销 UPDATE 权限 REVOKE UPDATE ON ecommerce.* FROM 'ecommerce_app'@'192.168.1.%'; FLUSH PRIVILEGES;
撤销权限后记得 FLUSH PRIVILEGES
常见错误
ERROR 1396 (HY000): Operation CREATE USER failed for 'user'@'host'
用户已存在。先 DROP USER 再创建,或使用 CREATE USER IF NOT EXISTS(MySQL 8.0+)
ERROR 1044 (42000): Access denied for user (using password: YES)
当前用户没有 GRANT 权限。需要用 root 或有 GRANT OPTION 的用户操作
技巧
- 永远不要用 root 账户运行应用程序,创建专用账户并限制权限
- 用 'user'@'192.168.1.%' 限制连接来源 IP,比 'user'@'%' 更安全
- 定期审计用户权限:SELECT user, host FROM mysql.user;