启动方式同本地
docker compose exec mysql mysql -u root -p
创建一个数据库
CREATE DATABASE imgx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
创建一个新用户
-- 创建用户,限制只能从特定 IP 访问(更安全)
CREATE USER 'imgx'@'%' IDENTIFIED BY 'your_strong_password!';
-- 如果需要限制特定 IP 访问(推荐)
-- CREATE USER 'prod_user'@'192.168.1.%' IDENTIFIED BY 'Strong_Password_123!';
授予最小必要权限
-- 授予特定数据库的必要权限
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, REFERENCES, LOCK TABLES
ON imgx.* TO 'imgx'@'%';
-- 如果只需要读写权限
-- GRANT SELECT, INSERT, UPDATE, DELETE ON production_db.* TO 'prod_user'@'%';
刷新权限
FLUSH PRIVILEGES;
验证用户权限
SHOW GRANTS FOR 'imgx'@'%';
设置密码策略
-- 设置密码过期策略(90天过期)
ALTER USER 'prod_user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
-- 设置密码重试限制和锁定时间
ALTER USER 'prod_user'@'%' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
密码过期后:
- 用户无法执行正常操作
- 只能执行修改密码的操作
- 会收到错误提示: ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement
过期后修改密码:
-- 方式1:用户自己修改密码
ALTER USER USER() IDENTIFIED BY 'new_password';
-- 方式2:管理员帮助修改
ALTER USER 'username'@'%' IDENTIFIED BY 'new_password';
设置备份策略
-- 授予备份权限(如果需要)
GRANT SELECT, SHOW VIEW, PROCESS, TRIGGER ON production_db.* TO 'prod_user'@'%';
GRANT LOCK TABLES ON production_db.* TO 'prod_user'@'%';
测试新用户登录
docker compose exec mysql mysql -u umami -p