簡介
從可用性的角度來看,維護跨多個主機的不同使用者和資料庫的憑證可能具有挑戰性。如果您定期登入多個 MySQL 伺服器,或者您的專案由於安全原因而具有具有獨特權限的個別使用者帳戶,您可能很容易忘記如何連線到您需要的帳戶。
幸運的是,MySQL 提供了一個名為 mysql_config_editor
的小型實用程式,專門設計用於儲存和管理 MySQL 憑證,以便您可以輕鬆地使用 MySQL 用戶端和工具進行身份驗證。在本指南中,我們將介紹 mysql_config_editor
的運作方式、如何安全地管理多個憑證,以及如何告訴其他 MySQL 工具利用此組態來驗證您的伺服器。
mysql_config_editor
如何運作?
mysql_config_editor
實用程式是 MySQL 安裝中包含的一個小型程式,用於管理連線到不同 MySQL 伺服器或不同帳戶的憑證。它會加密憑證資訊並將其儲存在您主目錄中名為 .mylogin.cnf
的檔案中。
每個描述如何登入 MySQL 帳戶的憑證集都稱為「登入路徑」。這些通常指定帳戶的使用者名稱和密碼,並且還可以額外儲存有關如何連線到適當 MySQL 伺服器的相關資訊,例如 MySQL 正在接聽的主機名稱和連接埠。
MySQL 用戶端和工具會自動設定為使用 .mylogin.cnf
檔案中的資訊來協助登入 MySQL 伺服器。您可以使用 MySQL 工具(例如 mysql
用戶端)上的 --login-path=
參數來指定應使用哪些登入詳細資訊。如果未提供登入路徑,則工具將使用與預設登入路徑(稱為 client
)關聯的憑證(如果已定義)。
如果登入路徑未定義某些值,則 MySQL 用戶端和工具將改為使用其設定的預設值。例如,如果您在使用 mysql_config_editor
建立登入路徑時未指定主機,則 mysql
用戶端將自動假設 localhost
,就像您在命令列上手動提供憑證時省略 --host=
選項一樣。
透過建立新的登入路徑來定義憑證
我們可以開始使用 mysql_config_editor
工具來設定新的登入路徑。
定義新登入路徑的一般語法如下
mysql_config_editor set [options]
通常,您會包含以下一些選項
--login-path=
:您想要用於這些憑證的標籤--user=
:帳戶使用者名稱--password
:告訴mysql_config_editor
提示輸入帳戶密碼的旗標。密碼提示可讓您安全地輸入密碼,使其不會像直接在命令列上提供密碼一樣記錄到 shell 歷史記錄檔中。--host=
:託管 MySQL 伺服器的主機名稱或 IP 位址。--port=
:MySQL 伺服器正在接聽的連接埠號碼。--socket=
:如果您透過 Unix socket 連線到本機伺服器,則為本機 socket 檔案的路徑。
您只需要提供與 MySQL 實用程式的預設選項不同的資訊。
在建立條目時,請記住,mysql_config_editor
沒有提供在建立登入路徑後編輯與其關聯的詳細資訊的方法。若要變更任何詳細資訊,您需要再次重新指定所有適當的連線資訊,以覆寫先前的條目。
設定本機帳戶的連線資訊
例如,若要為本機 MySQL 伺服器上名為 salesadmin
的使用者建立登入,您可以輸入
mysql_config_editor set --login-path=sales --user=salesadmin --password
系統將提示您輸入帳戶密碼,並且新的連線資訊將以名為 sales
的標籤儲存到 .mylogin.cnf
檔案中。我們使用 --user=salesadmin
提供帳戶名稱,並透過包含 --password
旗標來告知 mysql_config_editor
提示輸入密碼。
由於這是本機帳戶,因此如果在本機類 Unix 系統上執行,它將透過本機 socket 檔案連線。但是,如果您未修改 MySQL 以不同的方式執行,則 MySQL 工具將知道該怎麼做,並且您在設定時無需提供這些詳細資訊。
設定遠端帳戶的連線資訊
若要儲存遠端使用者名稱 testuser
在主機名為 dev.example.com
上連接埠 5555 上接聽的 MySQL 伺服器的連線資訊,您可以輸入
mysql_config_editor set --login-path=testing --user=testuser --password --host=dev.example.com --port=5555
用於 testing
登入路徑的條目將具有自動連線到 dev.example.com
上託管的 MySQL 資料庫以及使用者帳戶 testuser
所需的所有資訊。
設定預設連線資訊
MySQL 工具設計為在未明確呼叫連線資訊時使用合理的預設值。例如,在類 Unix 系統上,如果未覆寫,它們將嘗試使用以下詳細資訊進行連線
- 使用者:您的作業系統使用者名稱
- 密碼:無密碼
- 主機:
localhost
,預設情況下,這表示您將透過 Unix socket 在平台的預設位置進行連線。
如果這些選項不適合您的使用案例,您可以使用 mysql_config_editor
變更預設連線資訊。若要執行此操作,請提供您想要預設使用的連線資訊,而無需指定登入路徑。
例如
mysql_config_editor set --user=root --password
這會將連線資訊儲存在通用 client
登入路徑下,當未提供其他登入路徑時,MySQL 工具會讀取該路徑。
使用登入路徑登入
若要使用您已設定的連線資訊,請在使用 MySQL 用戶端和工具的命令列上指定 --login-path=
。
例如,若要登入先前設定的本機 salesadmin
帳戶,我們可以告知 mysql
使用 sales
登入路徑
mysql --login-path=sales
若要使用 testuser
帳戶登入 dev.example.com
伺服器,我們可以改為指定 testing
登入路徑
mysql --login-path=testing
如果您在沒有 --login-path=
的情況下呼叫 mysql
,它將檢查您設定的 client
登入路徑,並嘗試使用 root
帳戶登入您的本機資料庫
mysql
在每種情況下,您都將登入適當的帳戶,而無需提供任何其他詳細資訊。
您可以透過輸入以下內容來驗證您連線的使用者
SELECT user();
+----------------------+| user() |+----------------------+| salesadmin@localhost |+----------------------+1 row in set (0.00 sec)
如果您想要驗證使用者以及您連線的方法,則可以使用 status
命令
status
--------------mysql Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))Connection id: 28Current database:Current user: sammy@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: utf8mb4Db characterset: utf8mb4Client characterset: utf8mb4Conn. characterset: utf8mb4UNIX socket: /var/run/mysqld/mysqld.sockBinary data as: HexadecimalUptime: 1 day 21 hours 37 min 49 secThreads: 2 Questions: 66 Slow queries: 0 Opens: 186 Flush tables: 3 Open tables: 105 Queries per second avg: 0.000--------------
您可以在 Current user
下看到目前使用者,但您也可以透過查看 Connection
和 UNIX socket
項目來查看有關您如何連線到伺服器的詳細資訊。
顯示可用的登入路徑
雖然您定義的連線詳細資訊儲存在您主目錄中名為 .mylogin.cnf
的檔案中,但內容已加密以確保安全。若要檢視已設定的資訊,您需要再次使用 mysql_config_editor
。
若要檢視您已設定的預設登入資訊(儲存在 client
登入路徑下),您可以使用 print
子命令,而無需任何其他選項
mysql_config_editor print
[client]user = "root"password = *****
MySQL 使用 INI 樣式檔案格式,以將連線詳細資訊分組在適當的登入路徑標籤下。您也可能會注意到密碼已模糊處理。同樣,這是一種安全措施,以免洩露儲存的密碼。
若要檢視不同的登入路徑,您可以照常提供 --login-path=
選項
mysql_config_editor print --login-path=testing
[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555
若要顯示所有已設定的登入路徑,您可以改為新增 --all
旗標
mysql_config_editor print --all
[sales]user = "salesadmin"password = *****[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555[client]user = "root"password = *****
移除連線資訊
您可以使用 remove
子命令移除與登入路徑關聯的連線資訊。提供 --login-path
將允許 mysql_config_editor
定位適當的條目。
例如,若要移除 sales
登入路徑的連線資訊,您可以輸入
mysql_config_editor remove --login-path=sales
如果您檢查已設定的條目,您會發現 sales
登入路徑已移除
mysql_config_editor print --all
[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555[client]user = "root"password = *****
您也可以從登入路徑的連線資訊中移除特定參數。例如,如果「dev.example.com」上的 MySQL 伺服器已重新設定為現在在預設 3306 連接埠上執行,您可以移除連接埠資訊。若要執行此操作,您需要提供 --port
旗標以及 --login-path=
mysql_config_editor remove --login-path=testing --port
您可以透過再次列印條目來驗證連接埠規格已從 testing
登入路徑中移除
mysql_config_editor print --all
[testing]user = "testuser"password = *****host = "dev.example.com"[client]user = "root"password = *****
您也可以刪除所有登入路徑並建立新的空白 .mylogin.cnf
檔案,方法是輸入
mysql_config_editor reset
這會移除所有已設定的登入路徑。
結論
在本指南中,我們了解了 mysql_config_editor
,它是 MySQL 的小型實用程式之一,旨在透過管理連線資訊來改善使用者體驗。我們介紹了如何使用登入路徑設定連線資訊,以及如何使用我們設定的憑證呼叫 MySQL 工具。我們還討論了如何覆寫預設值和管理現有的登入路徑資訊。
透過利用 mysql_config_editor
和 MySQL 專案提供的其他工具,您可以消除在從單一位置管理多個專案時可能產生的一些挫敗感。這是一個相對簡單的工具的絕佳範例,旨在簡化重複、容易出錯的任務,以協助您專注於更重要的工作。
如果您正在使用 Prisma,您可以在設定 MySQL 資料庫連接器 時,設定 MySQL 資料庫的連線資訊。