四種輸入方式風險分級
1. 命令行明文 -ppass / --password=pass —— 高危
mysql -u ksharpdabu -pksharppassword db_name
ps -f 可見密碼 (部分版本顯示星號,但 kill 時仍洩露)。
- 客戶端初始化會零覆蓋參數,但存在短暫可見窗口。
- 生產嚴禁。
2. 交互式 -p (無參數) —— 安全,限人工
mysql -u ksharp -p da_name
Enter password: *********
- 終端不回顯,進程列表不可見。
- 僅適用交互場景,腳本首行可能被誤讀為密碼。
3. 配置文件 ~/.my.cnf [client] password=... —— 推薦自動化
[client]
password=your_pass
- 必須
chmod 600 ~/.my.cnf (僅擁有者讀寫)。
- MySQL 讀取順序 (Unix):
/etc/my.cnf → /etc/mysql/my.cnf → MYSQL_HOME/my.cnf → ~/.my.cnf (後讀優先)。
MYSQL_HOME 環境變量指向服務器 my.cnf 目錄;未設時若 DATADIR 有 my.cnf 則指向 DATADIR,否則指向 BASEDIR。
- 多配置文件存在時,後讀取的選項覆蓋先讀取的。
- Unix 忽略「全局可寫」配置文件 (安全機制)。
- Windows 讀取路徑:
C:\my.cnf、C:\Windows\my.ini、INSTALLDIR\my.ini、DATADIR\my.cnf。
4. 環境變量 MYSQL_PWD —— 極高危,禁止
歷史文件防洩漏
~/.mysql_history 記錄交互命令,含 CREATE USER/GRANT/SET PASSWORD 明文密碼 → chmod 600。
- Shell 歷史
~/.bash_history 同理 → 嚴格權限。
配置文件讀取順序圖解


最佳實踐速查表
| 場景 | 推薦方式 | 關鍵動作 |
| 人工登錄 | -p 交互式 | 無 |
| 腳本/定時任務 | ~/.my.cnf [client] password | chmod 600 ~/.my.cnf |
| 應用連接池 | 配置中心/密碼管理系統 | 運行時注入,不落盤明文 |