MySQL Shell 9.0  /  MySQL Shell 入門  /  可插拔密碼儲存

4.4 可插拔密碼儲存

為了讓使用 MySQL Shell 更流暢和安全,您可以使用密碼儲存(例如金鑰鏈)來保存伺服器連線的密碼。您可以互動式輸入連線的密碼,並將密碼與伺服器 URL 一起儲存為連線憑證。例如

mysql-js> \connect user@localhost:3310
Creating a session to 'user@localhost:3310'
Please provide the password for 'user@localhost:3310': ********
Save password for 'user@localhost:3310'? [Y]es/[N]o/Ne[v]er (default No): y

一旦儲存伺服器 URL 的密碼後,每當 MySQL Shell 開啟會話時,它會從組態的密碼儲存協助程式中擷取密碼,以登入伺服器,而無需互動式輸入密碼。MySQL Shell 執行的腳本也是如此。如果未組態密碼儲存協助程式,則會要求您互動式輸入密碼。

重要事項

MySQL Shell 只透過密碼儲存的方式保存伺服器 URL 和密碼,而不會自行保存密碼。

密碼只會在手動輸入時才會保存。如果使用類似伺服器 URI 的連線字串,或在執行 mysqlsh 時在命令列提供密碼,則不會保存密碼。

連線到 MySQL Shell 時接受的最大密碼長度為 128 個字元。

MySQL Shell 提供以下密碼儲存的內建支援

  • MySQL login-path,這在 MySQL 伺服器支援的所有平台上都可用。它由 MySQL 組態公用程式 mysql_config_editor 提供,該公用程式提供永久儲存。請參閱 mysql_config_editor — MySQL 組態公用程式。MySQL Shell 的 Linux 建置版本會捆綁 mysql_config_editor,因此如果系統上未安裝 MySQL 用戶端套件,也可以使用此功能。

  • macOS 金鑰鏈,請參閱 此處

  • Windows API,請參閱 此處

當 MySQL Shell 在互動模式下執行時,每當啟動新會話,且系統將提示使用者輸入密碼時,就會執行密碼擷取。在提示之前,系統會使用會話的 URL 查詢密碼儲存協助程式是否有密碼。如果找到相符的項目,則會使用此密碼來開啟會話。如果擷取的密碼無效,則會在記錄檔中新增訊息,並從密碼儲存中刪除密碼,而且 MySQL Shell 會提示您輸入密碼。

如果 MySQL Shell 在非互動模式下執行(例如,使用 --no-wizard),密碼擷取的執行方式與互動模式相同。但在這種情況下,如果密碼儲存協助程式找不到有效的密碼,MySQL Shell 會嘗試在沒有密碼的情況下開啟會話。

只要成功連線到 MySQL 伺服器,且密碼不是由密碼儲存協助程式擷取時,就可以儲存伺服器 URL 的密碼。是否儲存密碼的決定是根據此處描述的 credentialStore.savePasswordscredentialStore.excludeFilters 進行的。

在以下情況下會執行自動密碼儲存和擷取

  • 當使用任何連線選項叫用 mysqlsh 時,建立第一個會話時

  • 您使用內建的 \connect 命令

  • 您使用 shell.connect() 方法

  • 您使用任何需要連線的 AdminAPI 方法