一、权限管理概述
MySQL权限管理是数据库安全的核心环节。
二、安装MySQL
sudo apt update
sudo apt install mysql-server -y
sudo mysql_secure_installation
三、用户管理
3.1 创建用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'RemotePass456!';
3.2 修改用户
ALTER USER 'app_user'@'localhost' IDENTIFIED BY 'NewPass789!';
RENAME USER 'old_user'@'localhost' TO 'new_user'@'localhost';
3.3 删除用户
DROP USER 'app_user'@'localhost';
四、权限授予
4.1 基本权限
-- 授予查询权限
GRANT SELECT ON mydb.* TO 'app_user'@'localhost';
-- 授予所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;
4.2 细粒度权限
-- 授予特定表权限
GRANT SELECT, INSERT, UPDATE ON mydb.orders TO 'app_user'@'localhost';
-- 授予列级权限
GRANT SELECT (id, name, email) ON mydb.users TO 'readonly'@'localhost';
五、权限查看
5.1 查看用户权限
SHOW GRANTS FOR 'app_user'@'localhost';
SHOW GRANTS FOR CURRENT_USER();
5.2 查看所有用户
SELECT user, host FROM mysql.user;
六、权限回收
-- 回收特定权限
REVOKE INSERT ON mydb.* FROM 'app_user'@'localhost';
-- 回收所有权限
REVOKE ALL PRIVILEGES ON *.* FROM 'app_user'@'localhost';
FLUSH PRIVILEGES;
七、角色管理
7.1 创建角色
CREATE ROLE 'readonly_role', 'readwrite_role';
GRANT SELECT ON mydb.* TO 'readonly_role';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'readwrite_role';
GRANT 'readonly_role' TO 'user1'@'localhost';
SET DEFAULT ROLE 'readonly_role' TO 'user1'@'localhost';
八、安全最佳实践
8.1 密码策略
-- 设置密码策略
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
8.2 连接限制
-- 限制连接数
ALTER USER 'app_user'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 100;
九、常见问题
Q1:访问被拒绝?
检查用户host和权限授予。
Q2:权限不生效?
执行 FLUSH PRIVILEGES; 或重启服务。
十、总结
合理的权限管理保障数据库安全。
注:本文基于2026年Ubuntu 22.04编写