ALTER USER 'user'@'host' IDENTIFIED BY 'NewStrongPass123!';
-- 支持密碼驗證插件、歷史策略、鎖定/解鎖
ALTER USER 'user'@'host' IDENTIFIED BY 'NewPass' PASSWORD EXPIRE NEVER ACCOUNT UNLOCK;
SET PASSWORD FOR 'user'@'host' = 'NewStrongPass123!'; -- 8.0 明文自動哈希
-- 5.7 需 PASSWORD()
SET PASSWORD FOR 'user'@'host' = PASSWORD('NewPass');
mysqladmin -u user -p'oldpass' password 'newpass'
# 修改 root
mysqladmin -u root -p'oldpass' password 'newpass'
UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='user' AND Host='host';
FLUSH PRIVILEGES;
-- 5.7 及之前
GRANT USAGE ON *.* TO 'user'@'host' IDENTIFIED BY 'NewPass';
-- 8.0+ 必須分兩步
CREATE USER 'user'@'host' IDENTIFIED BY 'NewPass';
GRANT USAGE ON *.* TO 'user'@'host';
用戶賬號標籤 → 編輯 → 修改密碼 → 執行。本質執行上述 SQL。
| 方式 | 需登入 SQL | 需 FLUSH PRIVILEGES | 支援密碼策略 | 適用版本 |
|---|---|---|---|---|
| ALTER USER | 是 | 否 (隱式) | 全支援 | 5.7.6+ |
| SET PASSWORD | 是 | 否 | 部分 | 全版本 |
| mysqladmin | 否 | 否 | 否 | 全版本 |
| UPDATE user | 是 | 是 | 否 | 全版本 (不推薦) |
| 級別 | 權限 | 說明 | 典型角色 |
|---|---|---|---|
| 🔴 最高危 | FILE、PROCESS、SUPER、SHUTDOWN、RELOAD、CREATE USER、GRANT OPTION | OS 級操作、複製控制、用戶管理 | DBA、自動化運維賬號 |
| 🟠 高危 | CREATE、DROP、ALTER、INDEX、REFERENCES、LOCK TABLES | DDL 結構變更、鎖表 | 架構師、遷移腳本 |
| 🟡 中危 | INSERT、UPDATE、DELETE、SELECT | DML 數據變更 | 應用寫賬號、應用讀賬號 |
| 🟢 低危 | USAGE (僅連接) | 無實質權限 | 監控、備份只讀 |
-- 讀寫分離:寫賬號
CREATE USER 'app_write'@'10.0.1.%' IDENTIFIED BY 'StrongPassWrite!';
GRANT SELECT, INSERT, UPDATE, DELETE ON `biz_db`.* TO 'app_write'@'10.0.1.%';
-- 讀賬號 (報表/查詢)
CREATE USER 'app_read'@'10.0.1.%' IDENTIFIED BY 'StrongPassRead!';
GRANT SELECT ON `biz_db`.* TO 'app_read'@'10.0.1.%';
-- 遷移/維護專用 (臨時、審計)
CREATE USER 'maint'@'10.0.1.100' IDENTIFIED BY 'StrongPassMaint!';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON `biz_db`.* TO 'maint'@'10.0.1.100';
FILE/SUPER/PROCESS/GRANT OPTION'user'@'%' (任意主機),改為具體 CIDR 'user'@'10.0.1.%'validate_password 插件 / password_require_current=ONgeneral_log=ON (性能影響大,僅排查用)slow_query_log=ON、long_query_time=1、log_queries_not_using_indexes=ONSELECT User, Host, ... FROM mysql.user WHERE ... 對比基線MySQL 密碼管理已從「UPDATE user 表」進化為「ALTER USER + 密碼策略 + 自動輪換 + 審計告警」的完整體系。**訪問控制的核心是最小權限 + 網絡隔離 + 操作審計**,而非單純的改密命令。建議將用戶管理納入 IaC (Terraform/Ansible) 與 CI/CD,實現「代碼即權限、變更即審計、異常即告警」。