账户与权限管理
MySQL账户与权限管理:用户创建、权限授予、角色、密码策略与审计
1. 用户管理
-- 创建用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ss123';
CREATE USER 'readonly'@'10.0.%' IDENTIFIED BY 'password';
-- 修改密码
ALTER USER 'app_user'@'%' IDENTIFIED BY 'NewP@ss456';
-- 删除用户
DROP USER 'app_user'@'%';
-- 查看用户
SELECT user, host FROM mysql.user;
2. 权限管理
-- 授予权限
GRANT SELECT, INSERT ON mydb.* TO 'app_user'@'%';
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'localhost';
-- 撤销权限
REVOKE INSERT ON mydb.* FROM 'app_user'@'%';
-- 查看权限
SHOW GRANTS FOR 'app_user'@'%';
3. 角色(MySQL 8.0+)
-- 创建角色
CREATE ROLE 'app_read', 'app_write', 'app_admin';
-- 授予角色权限
GRANT SELECT ON mydb.* TO 'app_read';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_write';
GRANT ALL PRIVILEGES ON mydb.* TO 'app_admin';
-- 将角色分配给用户
GRANT 'app_read' TO 'reporting_user'@'%';
GRANT 'app_write' TO 'application_user'@'%';
-- 激活角色
SET DEFAULT ROLE ALL TO 'reporting_user'@'%';
4. 密码策略
-- MySQL 8.0 密码验证插件
INSTALL COMPONENT 'file://component_validate_password';
SET GLOBAL validate_password.policy = MEDIUM;
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
-- 密码过期
ALTER USER 'app_user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'app_user'@'%' PASSWORD EXPIRE NEVER;
5. 连接安全
-- 限制最大连接数
ALTER USER 'app_user'@'%' WITH MAX_CONNECTIONS_PER_HOUR 100;
-- 限制查询数
ALTER USER 'app_user'@'%' WITH MAX_QUERIES_PER_HOUR 1000;
-- 锁定账户
ALTER USER 'app_user'@'%' ACCOUNT LOCK;
ALTER USER 'app_user'@'%' ACCOUNT UNLOCK;