擴展 MySQL 8.4  /  ...  /  編寫驗證外掛程式

4.4.9 編寫驗證外掛程式

MySQL 支援可插拔驗證,其中會呼叫外掛程式來驗證用戶端連線。驗證外掛程式可讓您使用內建方法(將密碼儲存在 mysql.user 系統資料表)以外的驗證方法。例如,可以編寫外掛程式來存取外部驗證方法。此外,驗證外掛程式可以支援代理使用者功能,讓連線使用者成為另一個使用者的代理,並且為了存取控制的目的,被視為具有不同使用者的權限。如需詳細資訊,請參閱可插拔驗證代理使用者

可以為伺服器端或用戶端編寫驗證外掛程式。伺服器端外掛程式使用與其他伺服器外掛程式類型(例如全文解析器或稽核外掛程式)相同的外掛程式 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.hplugin_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 結構與使用一般用戶端外掛程式宣告巨集使用的結構不同。特別是,前兩個成員是由宣告巨集明確提供的,而不是由宣告巨集提供。)