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

MySQL 密碼安全輸入完整指南:四種方式風險分析與最佳實踐

     編輯:MySQL 資料庫相關知識

MySQL 密碼安全輸入完整指南:四種方式風險分析與最佳實踐

連線 MySQL 時密碼若在命令列明文出現,會被 ps、歷史檔、程序檢視器洩露。本文詳細分析四種輸入方式的風險等級,並給出生產環境最佳實踐建議。

四種密碼輸入方式風險對比

方式指令範例風險等級風險說明
1. 命令列明文mysql -u root -pmypassword db
mysql -u root --password=mypassword db
🔴 極高ps -ef 可見參數;雖客戶端啟動後會嘗試覆蓋 argv,但仍有時間窗口洩露。背景執行 & 更易被 ps 捕獲。
2. 互動式提示mysql -u root -p db
→ Enter password: *********
🟢 低密碼不顯示於命令列、不寫入歷史檔。但僅適用互動式終端,腳本/自動化無法使用。
3. 設定檔~/.my.cnf (Linux)
[client]
password=your_pass
🟡 中 (視權限)檔案權限必須 chmod 600 (僅擁有者讀寫)。MySQL 會忽略群組/他人可寫的設定檔。Windows 用 %APPDATA%\MySQL\.my.cnf。
4. 環境變數export MYSQL_PWD=your_pass🔴 極高ps e 可見所有進程環境變數;任何同機使用者皆可讀取。官方強烈不建議使用。

Linux 設定檔最佳實踐

  1. 建立/編輯 ~/.my.cnf:
    [client]
    user=your_user
    password=your_strong_password
    host=127.0.0.1
    port=3306
  2. 設定嚴格權限:
    chmod 600 ~/.my.cnf
  3. 驗證:mysql 直接免密登入。
MySQL 讀取設定檔順序:/etc/my.cnf → /etc/mysql/my.cnf → ~/.my.cnf → --defaults-extra-file。後讀取者優先覆蓋。

Windows 設定檔位置

  • %WINDIR%\my.ini
  • %APPDATA%\MySQL\.my.cnf
  • MySQL 安裝目錄\my.ini

歷史檔與日誌洩露防範

  • MySQL 客戶端歷史檔:~/.mysql_history 會記錄 CREATE USER、GRANT、SET PASSWORD 等含密碼指令。
    → 設定 chmod 600 ~/.mysql_history 或定期清空,或設定 MYSQL_HISTFILE=/dev/null 禁用。
  • Shell 歷史檔:~/.bash_history 等會記錄命令列密碼。
    → 避免命令列帶密碼;或設定 HISTCONTROL=ignorespace,命令前加空格不記錄。
  • 一般查詢日誌:若開啟 general_log,SQL 含密碼會寫入日誌。
    → 生產環境關閉 general_log,或啟用 log-raw=OFF (8.0+) 脫敏。

自動化/腳本/容器環境最佳方案

  1. Docker Secrets / Kubernetes Secrets:密碼掛載為檔案 /run/secrets/mysql_password,啟動腳本讀取:
    PASSWORD=$(cat /run/secrets/mysql_password)
    mysql -u root -p"$PASSWORD" (參數展開在程序建立後,ps 不見明文)。
  2. 配置管理工具:Ansible Vault、HashiCorp Vault、AWS Secrets Manager 運行時注入。
  3. MySQL 8.0 密碼插件:caching_sha2_password 配合 TLS,避免明文傳輸。

快速檢查清單

  • [ ] 所有自動化腳本**不**在命令列帶密碼
  • [ ] ~/.my.cnf 權限 600
  • [ ] ~/.mysql_history 權限 600 或導向 /dev/null
  • [ ] Shell 歷史忽略空格開頭命令
  • [ ] 生產關閉 general_log
  • [ ] 容器/K8s 使用 Secrets 掛載

密碼安全的核心原則:不出現在命令列、不寫入版控、不寫入日誌、權限最小化、自動化用 Secrets。養成這些習慣,才能在合規審計與實戰攻防中立於不敗之地。

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