MySQL 支援可插入式驗證,其中會呼叫外掛程式來驗證用戶端連線。驗證外掛程式可使用除內建儲存在 mysql.user
系統表格中的密碼方法之外的其他驗證方法。例如,可以編寫外掛程式來存取外部驗證方法。此外,驗證外掛程式可以支援 Proxy 使用者功能,讓連線使用者作為另一個使用者的 Proxy,並且在存取控制方面,被視為具有不同使用者的權限。如需更多資訊,請參閱可插入式驗證和Proxy 使用者。
可以為伺服器端或用戶端編寫驗證外掛程式。伺服器端外掛程式使用與其他伺服器外掛程式類型(例如全文剖析器或稽核外掛程式)相同的外掛程式 API(儘管具有不同的類型特定描述符)。用戶端外掛程式使用用戶端外掛程式 API。
數個標頭檔包含與驗證外掛程式相關的資訊
plugin.h
:定義MYSQL_AUTHENTICATION_PLUGIN
伺服器外掛程式類型。client_plugin.h
:定義用戶端外掛程式的 API。這包含用戶端外掛程式描述符和用於用戶端外掛程式 C API 呼叫的函式原型(請參閱C API 用戶端外掛程式介面)。plugin_auth.h
:定義伺服器外掛程式 API 中特定於驗證外掛程式的部分。這包含伺服器端驗證外掛程式的類型特定描述符和MYSQL_SERVER_AUTH_INFO
結構。plugin_auth_common.h
:包含用戶端和伺服器驗證外掛程式的通用元素。這包含傳回值定義和MYSQL_PLUGIN_VIO
結構。
若要編寫驗證外掛程式,請在該外掛程式原始碼檔案中加入下列標頭檔。根據外掛程式的功能和需求,可能也需要其他 MySQL 或通用標頭檔。
-
對於實作伺服器驗證外掛程式的原始碼檔案,請加入此檔案
#include <mysql/plugin_auth.h>
-
對於實作用戶端驗證外掛程式或同時實作用戶端和伺服器外掛程式的原始碼檔案,請加入下列檔案
#include <mysql/plugin_auth.h> #include <mysql/client_plugin.h> #include <mysql.h>
plugin_auth.h
包含 plugin.h
和 plugin_auth_common.h
,因此您不需要明確加入後者檔案。
本節說明如何編寫一對協同運作的簡單伺服器和用戶端驗證外掛程式。
這些外掛程式會接受任何非空的密碼,並且密碼會以純文字傳送。這是不安全的,因此這些外掛程式不應在生產環境中使用。
此處開發的伺服器端和用戶端外掛程式都命名為 auth_simple
。如第 4.4.2 節「外掛程式資料結構」所述,外掛程式庫檔案的基本名稱必須與用戶端外掛程式相同,因此原始碼檔案名稱為 auth_simple.c
,並產生一個名為 auth_simple.so
的程式庫(假設您的系統使用 .so
作為程式庫檔案的字尾)。
在 MySQL 原始碼發行版中,驗證外掛程式原始碼位於 plugin/auth
目錄中,您可以檢閱該目錄作為編寫其他驗證外掛程式的指南。此外,若要查看如何實作內建的驗證外掛程式,請參閱 sql/sql_acl.cc
以取得內建於 MySQL 伺服器的外掛程式,以及 sql-common/client.c
以取得內建於 libmysqlclient
用戶端程式庫的外掛程式。(對於內建用戶端外掛程式,請注意,那裡使用的 auth_plugin_t
結構與使用一般用戶端外掛程式宣告巨集所使用的結構不同。尤其是,前兩個成員是明確提供的,而不是由宣告巨集提供。)