MySQL 8.0 中创建用户并授予特定数据库权限
一、使用管理员账户登录 MySQL
mysql -u root -p
二、创建用户 ‘kan’ 并设置密码(MySQL 8.0 语法)
CREATE USER 'kan'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_password_here';
'kan'@'%'表示用户可以从任何主机连接(如需限制可改为特定IP,如 'kan'@'192.168.1.%')
WITH mysql_native_password是 MySQL 8.0 的认证插件(兼容旧客户端)
请将 your_strong_password_here替换为强密码(建议包含大小写字母、数字和特殊字符)
三、授予 special 数据库的所有权限
GRANT ALL PRIVILEGES ON special.* TO 'kan'@'%';
四、刷新权限使更改生效
FLUSH PRIVILEGES;
五、验证权限设置
SHOW GRANTS FOR 'kan'@'%';
预期输出应类似:
+---------------------------------------------------+
| Grants for kan@% |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO `kan`@`%` |
| GRANT ALL PRIVILEGES ON `special`.* TO `kan`@`%` |
+---------------------------------------------------+
5.1 可选配置
– 仅授予部分权限(最小权限原则)
-- 只授予查询、插入、更新、删除权限
GRANT SELECT, INSERT, UPDATE, DELETE ON special.* TO 'kan'@'%';
– 或更细粒度控制
GRANT SELECT ON special.table1 TO 'kan'@'%';
GRANT SELECT, INSERT ON special.table2 TO 'kan'@'%';
5.2 使用更安全的认证插件(MySQL 8.0 默认)
CREATE USER 'kan'@'%' IDENTIFIED WITH caching_sha2_password BY 'your_strong_password_here';
注意:caching_sha2_password是 MySQL 8.0 默认插件,但某些旧客户端可能不支持。
5.3 设置密码策略
– 设置密码过期时间(90天)
ALTER USER 'kan'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
– 要求首次登录修改密码
ALTER USER 'kan'@'%' PASSWORD EXPIRE;
– 连接测试
mysql -u kan -p -D special
六、安全最佳实践
6.1 限制访问来源(比 '%'更安全):
CREATE USER 'kan'@'192.168.1.%' IDENTIFIED BY 'password';
6.2 使用角色管理权限(MySQL 8.0+):
CREATE ROLE special_role;
GRANT SELECT, INSERT ON special.* TO special_role;
GRANT special_role TO 'kan'@'%';
6.3 定期审计权限:
SELECT * FROM mysql.db WHERE User='kan'\G
七、撤销权限或删除用户
– 撤销所有权限
REVOKE ALL PRIVILEGES ON special_check.* FROM 'kan'@'%';
– 删除用户
DROP USER IF EXISTS 'kan'@'%';