MySQL 包含一個測試外掛程式,它會檢查帳戶憑證並將成功或失敗記錄到伺服器錯誤記錄中。這是一個可載入的外掛程式(而非內建),必須在使用前安裝。
測試外掛程式原始碼與伺服器原始碼分開,不像內建的原生外掛程式,因此可以將其視為一個相對簡單的範例來檢視,示範如何撰寫可載入的身份驗證外掛程式。
此外掛程式旨在用於測試和開發目的,不適用於生產環境或暴露於公用網路的伺服器。
下表顯示外掛程式和程式庫檔案名稱。檔案名稱的後綴在您的系統上可能有所不同。該檔案必須位於 plugin_dir
系統變數所指定的目錄中。
表 8.27 測試身份驗證的外掛程式和程式庫名稱
外掛程式或檔案 | 外掛程式或檔案名稱 |
---|---|
伺服器端外掛程式 | test_plugin_server |
用戶端外掛程式 | auth_test_plugin |
程式庫檔案 | auth_test_plugin.so |
以下章節提供特定於測試可插拔身份驗證的安裝和使用資訊
如需關於 MySQL 中可插拔身份驗證的一般資訊,請參閱章節 8.2.17,「可插拔身份驗證」。
本節說明如何安裝伺服器端測試身份驗證外掛程式。如需關於安裝外掛程式的一般資訊,請參閱章節 7.6.1,「安裝和解除安裝外掛程式」。
為了讓伺服器可以使用外掛程式,外掛程式庫檔案必須位於 MySQL 外掛程式目錄中(該目錄由 plugin_dir
系統變數指定)。如有必要,請在伺服器啟動時設定 plugin_dir
的值來配置外掛程式目錄的位置。
若要在伺服器啟動時載入外掛程式,請使用 --plugin-load-add
選項來指定包含該外掛程式的程式庫檔案。使用此外掛程式載入方法,每次伺服器啟動時都必須提供此選項。例如,將以下行放入伺服器 my.cnf
檔案中,並根據您的平台需要調整 .so
後綴。
[mysqld]
plugin-load-add=auth_test_plugin.so
修改 my.cnf
後,重新啟動伺服器以使新設定生效。
或者,若要在執行時載入外掛程式,請使用以下語句,並根據您的平台需要調整 .so
後綴:
INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';
INSTALL PLUGIN
會立即載入外掛程式,並將其註冊到 mysql.plugins
系統表中,以便伺服器在每次後續正常啟動時載入它,而無需使用 --plugin-load-add
。
若要驗證外掛程式安裝,請檢查 Information Schema PLUGINS
表格或使用 SHOW PLUGINS
語句(請參閱第 7.6.2 節「取得伺服器外掛程式資訊」)。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%test_plugin%';
+--------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+--------------------+---------------+
| test_plugin_server | ACTIVE |
+--------------------+---------------+
如果外掛程式初始化失敗,請檢查伺服器錯誤日誌以獲取診斷訊息。
若要將 MySQL 帳戶與測試外掛程式關聯,請參閱使用測試可插拔驗證。
解除安裝測試驗證外掛程式的方法取決於您安裝它的方式。
如果您在伺服器啟動時使用
--plugin-load-add
選項安裝了外掛程式,請在不使用該選項的情況下重新啟動伺服器。如果您在執行時使用
INSTALL PLUGIN
語句安裝了外掛程式,它將在伺服器重新啟動後仍保持安裝狀態。若要解除安裝它,請使用UNINSTALL PLUGIN
。UNINSTALL PLUGIN test_plugin_server;
若要使用測試驗證外掛程式,請建立一個帳戶,並在 IDENTIFIED WITH
子句中指定該外掛程式。
CREATE USER 'testuser'@'localhost'
IDENTIFIED WITH test_plugin_server
BY 'testpassword';
測試驗證外掛程式還需要建立一個代理使用者,如下所示:
CREATE USER testpassword@localhost;
GRANT PROXY ON testpassword@localhost TO testuser@localhost;
然後,在您連線到伺服器時,為該帳戶提供 --user
和 --password
選項。例如:
$> mysql --user=testuser --password
Enter password: testpassword
外掛程式會擷取從客戶端收到的密碼,並將其與 mysql.user
系統表中帳戶列的 authentication_string
欄位中儲存的值進行比較。如果兩個值匹配,則外掛程式會傳回 authentication_string
值作為新的有效使用者 ID。
您可以查看伺服器錯誤日誌,其中會顯示訊息指出驗證是否成功(請注意,密碼會以「使用者」的形式報告)。
[Note] Plugin test_plugin_server reported:
'successfully authenticated user testpassword'