CREATE USER 'username'@'host' IDENTIFIED BY 'StrongPass#2024';
-- host: '%' 任意主機, '10.0.0.%' 网段, 'localhost' 本地, 具体 IP
-- 庫級全權限
GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'host';
-- 表級權限
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.table_name TO 'username'@'host';
-- 僅讀權限
GRANT SELECT ON db_name.* TO 'readonly'@'%';
-- 跨庫只讀(監控/備份賬號)
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'10.0.0.%';
FLUSH PRIVILEGES;
-- 修改 grant 表後必須執行,動態授權 (GRANT) 通常自動生效,但建議养成习惯
-- 指定用戶
SHOW GRANTS FOR 'username'@'host';
-- 當前用戶
SHOW GRANTS;
-- 批量查看所有用戶權限(生成審計報表)
SELECT CONCAT("SHOW GRANTS FOR ", QUOTE(user), "@", QUOTE(host), ";") FROM mysql.user;
| 場景 | 命令/策略 |
|---|---|
| 創建用戶同時授權 (8.0+) | CREATE USER 'u'@'%' IDENTIFIED BY 'p'; GRANT SELECT ON db.* TO 'u'@'%'; (不再支持 GRANT ... IDENTIFIED BY 一條語句) |
| 密碼過期策略 | ALTER USER 'u'@'%' PASSWORD EXPIRE INTERVAL 90 DAY; |
| 帳號鎖定/解鎖 | ALTER USER 'u'@'%' ACCOUNT LOCK/UNLOCK; |
| 雙因子認證 (8.0+) | ALTER USER 'u'@'%' ADD 2FA AUTHENTICATION FACTOR; |
| 角色管理 (8.0+) | CREATE ROLE 'app_read'; GRANT SELECT ON db.* TO 'app_read'; GRANT 'app_read' TO 'u'@'%'; SET DEFAULT ROLE 'app_read' TO 'u'@'%'; |
| 權限審計導出 | SELECT user, host, JSON_EXTRACT(privileges, '$.global') FROM information_schema.user_privileges; (8.0+) |
'user'@'%' 僅限開發/測試環境,生產必須限定 IP/網段。GRANT ALL ON *.*,按業務模塊拆分賬號(讀寫分離、只讀、DDL 專用)。DROP USER ''@'%'; DROP USER ''@'localhost';。REQUIRE SSL),或 SSH 隧道訪問。MySQL 權限管理核心是 **「創建 → 授權 → 刷新 → 審計」** 閉環。MySQL 8.0 引入角色、密碼策略、雙因子認證,建議升級並採用 RBAC 模式簡化大規模權限治理。定期執行 SHOW GRANTS 審計,清理僵屍賬號,是合規運維基線動作。