首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 密碼修改與訪問控制深度解析:六種改密方式、權限矩陣、最小授權實戰

     編輯:MySQL 資料庫相關知識

密碼修改六大法 (按推薦度排序)

1. ALTER USER (5.7.6+ / 8.0 標準、最安全)

ALTER USER 'user'@'host' IDENTIFIED BY 'NewStrongPass123!';
-- 支持密碼驗證插件、歷史策略、鎖定/解鎖
ALTER USER 'user'@'host' IDENTIFIED BY 'NewPass' PASSWORD EXPIRE NEVER ACCOUNT UNLOCK;

2. SET PASSWORD (兼容舊版、語句級)

SET PASSWORD FOR 'user'@'host' = 'NewStrongPass123!';  -- 8.0 明文自動哈希
-- 5.7 需 PASSWORD()
SET PASSWORD FOR 'user'@'host' = PASSWORD('NewPass');

3. mysqladmin 命令行 (運維腳本首選、無需登入 SQL)

mysqladmin -u user -p'oldpass' password 'newpass'
# 修改 root
mysqladmin -u root -p'oldpass' password 'newpass'

4. UPDATE mysql.user (直接操作系統表、需 FLUSH PRIVILEGES、不推薦常規用)

UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='user' AND Host='host';
FLUSH PRIVILEGES;

5. GRANT ... IDENTIFIED BY (舊版創建用戶同時設密、8.0 已移除 IDENTIFIED BY 子句)

-- 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';

6. PHPMyAdmin / Workbench 圖形工具 (可視化、適合非 DBA)

用戶賬號標籤 → 編輯 → 修改密碼 → 執行。本質執行上述 SQL。

關鍵差異對比

方式需登入 SQL需 FLUSH PRIVILEGES支援密碼策略適用版本
ALTER USER是否 (隱式)全支援5.7.6+
SET PASSWORD是否部分全版本
mysqladmin否否否全版本
UPDATE user是是否全版本 (不推薦)

訪問控制:權限矩陣與最小授權模板

權限分級 (按風險高低)

級別權限說明典型角色
🔴 最高危FILE、PROCESS、SUPER、SHUTDOWN、RELOAD、CREATE USER、GRANT OPTIONOS 級操作、複製控制、用戶管理DBA、自動化運維賬號
🟠 高危CREATE、DROP、ALTER、INDEX、REFERENCES、LOCK TABLESDDL 結構變更、鎖表架構師、遷移腳本
🟡 中危INSERT、UPDATE、DELETE、SELECTDML 數據變更應用寫賬號、應用讀賬號
🟢 低危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';

禁止事項清單

  • ❌ 任何非 DBA 賬號擁有 FILE/SUPER/PROCESS/GRANT OPTION
  • ❌ 使用 'user'@'%' (任意主機),改為具體 CIDR 'user'@'10.0.1.%'
  • ❌ 共用 Root/管理員賬號跑業務
  • ❌ 密碼未定期輪換 (建議 90 天)、無複雜度策略
  • ❌ 未啟用 validate_password 插件 / password_require_current=ON

審計與合規

  • MariaDB Audit Plugin / MySQL Enterprise Audit:記錄登入、查詢、DDM、錯誤,輸出 JSON/Syslog
  • 通用日誌:general_log=ON (性能影響大,僅排查用)
  • 慢查詢日誌:slow_query_log=ON、long_query_time=1、log_queries_not_using_indexes=ON
  • 權限定期掃描**:SELECT User, Host, ... FROM mysql.user WHERE ... 對比基線

結語

MySQL 密碼管理已從「UPDATE user 表」進化為「ALTER USER + 密碼策略 + 自動輪換 + 審計告警」的完整體系。**訪問控制的核心是最小權限 + 網絡隔離 + 操作審計**,而非單純的改密命令。建議將用戶管理納入 IaC (Terraform/Ansible) 與 CI/CD,實現「代碼即權限、變更即審計、異常即告警」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved