MySQL 使用者應使用下列指南來保持密碼安全。
當您執行用戶端程式連線至 MySQL 伺服器時,不建議以暴露給其他使用者發現的方式指定您的密碼。以下列出您可以在執行用戶端程式時用來指定密碼的方法,並評估每種方法的風險。簡而言之,最安全的方法是讓用戶端程式提示輸入密碼,或在適當保護的選項檔中指定密碼。
使用 mysql_config_editor 公用程式,它可讓您將驗證憑證儲存在名為
.mylogin.cnf
的加密登入路徑檔案中。MySQL 用戶端程式稍後可以讀取該檔案,以取得連線至 MySQL 伺服器的驗證憑證。請參閱 第 6.6.7 節,「mysql_config_editor — MySQL 設定公用程式」。在命令列上使用
--password=
或密碼
-p
選項。例如密碼
$> mysql -u francis -pfrank db_name
警告這很方便,但不安全。在某些系統上,您的密碼會顯示給系統狀態程式(例如 ps),其他使用者可能會叫用這些程式來顯示命令列。MySQL 用戶端通常會在初始化序列期間將命令列密碼引數覆寫為零。但是,仍然會有一個短暫的時間,在此期間值是可見的。此外,在某些系統上,此覆寫策略無效,密碼對 ps 仍然可見。(SystemV Unix 系統和其他系統可能會有這個問題。)
如果您的作業環境設定為在終端機視窗的標題列中顯示您目前的命令,則只要命令正在執行,即使命令已在視窗內容區域中捲動離開檢視範圍,密碼仍然可見。
在命令列上使用
--password
或-p
選項,且未指定任何密碼值。在這種情況下,用戶端程式會互動式地請求密碼$> mysql -u francis -p db_name Enter password: ********
*
字元表示您輸入密碼的位置。當您輸入時,密碼不會顯示。以這種方式輸入密碼比在命令列中指定密碼更安全,因為其他使用者看不到密碼。然而,這種輸入密碼的方法只適用於您以互動方式執行的程式。如果您想從非互動執行的腳本中調用客戶端,則沒有機會從鍵盤輸入密碼。在某些系統上,您甚至可能會發現腳本的第一行被讀取並(錯誤地)解釋為您的密碼。
將您的密碼儲存在選項檔案中。例如,在 Unix 上,您可以將您的密碼列在您主目錄下的
.my.cnf
檔案的[client]
區段中[client] password=password
為了確保密碼安全,該檔案應僅限您本人存取。為了確保這一點,請將檔案存取模式設定為
400
或600
。例如$> chmod 600 .my.cnf
要從命令列指定包含密碼的特定選項檔案,請使用
--defaults-file=
選項,其中file_name
file_name
是該檔案的完整路徑名稱。例如$> mysql --defaults-file=/home/francis/mysql-opts
第 6.2.2.2 節,「使用選項檔案」,更詳細地討論了選項檔案。
在 Unix 上,mysql 客戶端會將已執行的語句記錄到歷史檔案中(請參閱第 6.5.1.3 節,「mysql 客戶端日誌」)。預設情況下,此檔案名為 .mysql_history
,並在您的主目錄中建立。密碼可以純文字的形式寫在 SQL 語句中,例如 CREATE USER
和 ALTER USER
,因此如果您使用這些語句,它們將被記錄在歷史檔案中。為了確保此檔案的安全,請使用限制性的存取模式,與先前針對 .my.cnf
檔案所描述的方式相同。
如果您的命令解釋器維護歷史記錄,則儲存命令的任何檔案都將包含在命令列上輸入的 MySQL 密碼。例如,bash 使用 ~/.bash_history
。任何此類檔案都應具有限制性的存取模式。