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

MySQL 修改密碼與訪問控制完全手冊:六大改密方法、權限模型與最佳實踐

     編輯:MySQL 資料庫相關知識

前言:安全始於密碼管理,精準授權是防線核心

MySQL 採用「連線驗證 + 權限檢查」兩階段存取控制。本文系統梳理六種修改密碼方法、權限表結構、GRANT/REVOKE 精準授權、常見誤區與生產環境安全基線。

一、六大修改密碼方法對比

方法適用場景需 FLUSH PRIVILEGES需 PASSWORD()權限需求
1. phpMyAdmin / 圖形工具視覺化操作、批量管理否 (工具自動)否 (工具自動)root 或 SUPER
2. mysqladmin命令列、腳本自動化否否root 或當前用戶
3. INSERT INTO mysql.user建立新用戶兼設密碼是是INSERT(mysql.user) + RELOAD
4. REPLACE INTO mysql.user覆蓋式建立/更新用戶是是同上
5. SET PASSWORDSQL 標準、應用程式內嵌否是 (5.7 前)當前用戶或 UPDATE(mysql.user)
6. GRANT ... IDENTIFIED BY授權同時設密碼 (推薦)否否 (自動加密)GRANT OPTION

實操範例

-- mysqladmin (舊密碼 → 新密碼)
mysqladmin -u root -p'oldpwd' password 'newpwd'

-- SET PASSWORD (5.7+ 無需 PASSWORD())
SET PASSWORD FOR 'user'@'host' = 'newpwd';  -- 8.0
SET PASSWORD FOR 'user'@'host' = PASSWORD('newpwd'); -- 5.7

-- GRANT 授權並設密碼 (最常用)
GRANT SELECT, INSERT ON db.* TO 'user'@'%' IDENTIFIED BY 'newpwd';

-- 修改現有用戶密碼 (8.0 推薦)
ALTER USER 'user'@'%' IDENTIFIED BY 'newpwd';

二、權限模型深度解析

四層權限體系 (自上而下繼承,具體覆蓋一般)

  1. 全域 (Global):mysql.user 表,適用所有庫。如 SUPER、FILE、RELOAD、SHUTDOWN。
  2. 庫級 (Database):mysql.db 表,特定庫所有表。如 SELECT、INSERT、CREATE、DROP。
  3. 表級 (Table):mysql.tables_priv 表,特定表特定欄位。
  4. 欄位級 (Column):mysql.columns_priv 表,極細粒度控制。

關鍵權限說明

三、精準授權實戰範例

-- 僅讀賬號 (報表/備份)
CREATE USER 'readonly'@'%' IDENTIFIED BY 'strong_pwd';
GRANT SELECT ON analytics.* TO 'readonly'@'%';
GRANT SELECT ON mysql.* TO 'readonly'@'%';  -- 監視需查 mysql 系統表

-- 應用寫入賬號 (最小權限)
CREATE USER 'app_write'@'10.0.1.%' IDENTIFIED BY 'strong_pwd';
GRANT SELECT, INSERT, UPDATE, DELETE ON business.* TO 'app_write'@'10.0.1.%';
-- 禁止 DROP、ALTER、CREATE、INDEX、GRANT

-- DBA 管理賬號
CREATE USER 'dba'@'10.0.0.10' IDENTIFIED BY 'strong_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.0.0.10' WITH GRANT OPTION;

四、常見誤區與避坑

  1. 用 '%' 通配 Host:極度危險,限制來源 IP 段 (如 'app'@'10.0.1.%')。
  2. 授予 FILE/SUPER/SHUTDOWN:除 DBA 外嚴禁。
  3. 密碼明文寫在腳本/配置檔:用 mysql_config_editor 加密存儲 (.mylogin.cnf) 或環境變數/密碼管理器。
  4. 忽略匿名用戶:DROP USER ''@'localhost'; DROP USER ''@'%'; (預設安裝常有)。
  5. 未定期審計:SELECT User, Host FROM mysql.user;、SHOW GRANTS FOR 'user'@'host'; 季度巡檢。

五、MySQL 8.0 新特性:角色 (Role) 與密碼策略

-- 建立角色
CREATE ROLE 'app_readonly', 'app_readwrite';
GRANT SELECT ON biz.* TO 'app_readonly';
GRANT SELECT, INSERT, UPDATE, DELETE ON biz.* TO 'app_readwrite';

-- 用戶授予角色
CREATE USER 'dev1'@'%' IDENTIFIED BY 'pwd';
GRANT 'app_readwrite' TO 'dev1'@'%';
SET DEFAULT ROLE 'app_readwrite' TO 'dev1'@'%';  -- 自動啟用

-- 密碼策略 (validate_password 元件)
INSTALL COMPONENT 'file://component_validate_password';
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.policy = STRONG;  -- LOW/MEDIUM/STRONG

六、生產環境安全基線清單

  • [ ] root 僅允許 localhost / 管理網段登入,強密碼 + caching_sha2_password。
  • [ ] 刪除匿名用戶、測試庫 (DROP DATABASE test;)。
  • [ ] 啟用 SSL/TLS 傳輸加密 (REQUIRE SSL 授權)。
  • [ ] 審計日誌 (audit_log 元件) 記錄所有 DDL/DML/登入。
  • [ ] 定期輪換密碼 (90 天),ALTER USER ... PASSWORD EXPIRE INTERVAL 90 DAY;。
  • [ ] 備份加密、異地存儲、定期演練恢復。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
權限層級用途風險
ALL PRIVILEGES除全域外任意該層級所有權限高
SUPERGlobalKILL、CHANGE MASTER、PURGE BINLOG 等極高
FILEGlobalLOAD DATA INFILE、SELECT INTO OUTFILE高 (讀寫服務器檔案)
GRANT OPTION任意將自己擁有的權限授予他人高
RELOADGlobalFLUSH PRIVILEGES/LOGS/HOSTS 等中
PROCESSGlobalSHOW PROCESSLIST 看全庫查詢中