分離創建用戶與授權,更清晰、安全:
-- 1. 創建用戶 (指定認證插件、密碼策略、過期策略)
CREATE USER 'hail'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Str0ngP@ss!'
PASSWORD EXPIRE INTERVAL 90 DAY
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 2;
-- 2. 授權 (按最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE
ON `haildb`.* TO 'hail'@'localhost';
-- 3. 生效
FLUSH PRIVILEGES; -- 8.0 通常隱式生效,但保留習慣無害
| 角色 | 權限列表 | 說明 |
|---|---|---|
| 只讀用戶 | SELECT | 報表、備份、只讀服務 |
| 開發/寫入用戶 | SELECT, INSERT, UPDATE, DELETE | 業務應用賬號 |
| DDL 用戶 | CREATE, ALTER, DROP, INDEX, REFERENCES | 遷移工具、Schema 管理 |
| 存儲過程用戶 | EXECUTE, CREATE ROUTINE, ALTER ROUTINE | 需配合 DEFINER 使用 |
| 完全控制 (慎用) | ALL PRIVILEGES | 僅限 DBA/自動化運維帳號 |
'user'@'localhost':僅本機 Unix Socket/127.0.0.1 連接。'user'@'192.168.1.%':允許特定網段。'user'@'%':允許任意主機 (**生產嚴禁**),需配合防火牆/安全組限制源 IP。-- 回收特定權限
REVOKE INSERT, UPDATE ON `haildb`.* FROM 'hail'@'localhost';
-- 回收所有權限 (不刪除用戶)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hail'@'localhost';
-- 徹底刪除用戶
DROP USER 'hail'@'localhost';
-- 管理員重置
ALTER USER 'hail'@'localhost' IDENTIFIED BY 'NewStr0ngP@ss!';
-- 用戶自改 (需舊密碼)
SET PASSWORD = 'NewStr0ngP@ss!';
SELECT, INSERT, UPDATE, DELETE,DDL 權限走變更流程臨時授予。validate_password 組件,強制長度、複雜度、過期輪換。audit_log 記錄所有授權變更與敏感操作。SELECT User, Host FROM mysql.user; 排查無用/過期/弱密碼賬號。GRANT ... IDENTIFIED BY 隱式創建用戶在 8.0 已移除,**必須先 CREATE USER**。FLUSH PRIVILEGES 在 8.0 多為無操作 (權限表改為 InnoDB 事務化),但兼容性保留。% 不包含 localhost (Unix Socket),需單獨授權 user@localhost。GRANT OPTION 允許被授權者再授權,**極度危險**,非 DBA 禁止。