文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  Socket 對等憑證可插拔驗證

8.4.1.10 Socket 對等憑證可插拔驗證

伺服器端 auth_socket 驗證外掛程式會驗證從本機主機透過 Unix socket 檔案連線的用戶端。此外掛程式會使用 SO_PEERCRED socket 選項來取得執行用戶端程式的使用者相關資訊。因此,此外掛程式只能在支援 SO_PEERCRED 選項的系統上使用,例如 Linux。

此外掛程式的原始碼可以作為一個相對簡單的範例來檢視,示範如何撰寫可載入的驗證外掛程式。

下表顯示外掛程式和程式庫檔案名稱。該檔案必須位於 plugin_dir 系統變數指定的目錄中。

表 8.26 Socket 對等憑證驗證的外掛程式和程式庫名稱

外掛程式或檔案 外掛程式或檔案名稱
伺服器端外掛程式 auth_socket
用戶端外掛程式 無,請參閱討論
程式庫檔案 auth_socket.so

以下各節提供特定於 socket 可插拔驗證的安裝和使用資訊

如需 MySQL 中可插拔驗證的一般資訊,請參閱第 8.2.17 節,〈可插拔驗證〉

安裝 Socket 可插拔驗證

本節說明如何安裝 socket 驗證外掛程式。如需安裝外掛程式的一般資訊,請參閱第 7.6.1 節,〈安裝和解除安裝外掛程式〉

為了讓伺服器能夠使用外掛程式,外掛程式的函式庫檔案必須位於 MySQL 外掛程式目錄(由 plugin_dir 系統變數指定的目錄)。如有需要,請在伺服器啟動時設定 plugin_dir 的值,以配置外掛程式目錄的位置。

若要在伺服器啟動時載入外掛程式,請使用 --plugin-load-add 選項,指定包含外掛程式的函式庫檔案。使用此種外掛程式載入方法,每次伺服器啟動時都必須提供此選項。例如,將以下行放入伺服器的 my.cnf 檔案中

[mysqld]
plugin-load-add=auth_socket.so

修改 my.cnf 之後,重新啟動伺服器,以使新的設定生效。

或者,若要在執行時載入外掛程式,請使用以下語法

INSTALL PLUGIN auth_socket SONAME 'auth_socket.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 '%socket%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| auth_socket | ACTIVE        |
+-------------+---------------+

如果外掛程式初始化失敗,請檢查伺服器錯誤日誌以取得診斷訊息。

若要將 MySQL 帳戶與 socket 外掛程式建立關聯,請參閱使用 Socket 可插拔驗證

解除安裝 Socket 可插拔驗證

解除安裝 socket 驗證外掛程式的方法取決於您如何安裝它

  • 如果您在伺服器啟動時使用 --plugin-load-add 選項安裝外掛程式,請在啟動伺服器時不使用此選項。

  • 如果您在執行時使用 INSTALL PLUGIN 語法安裝外掛程式,它會在伺服器重新啟動後仍然保持安裝狀態。若要解除安裝它,請使用 UNINSTALL PLUGIN

    UNINSTALL PLUGIN auth_socket;
使用 Socket 可插拔驗證

socket 外掛程式會檢查 socket 使用者名稱(作業系統使用者名稱)是否與用戶端程式指定給伺服器的 MySQL 使用者名稱相符。如果名稱不相符,外掛程式會檢查 socket 使用者名稱是否與 mysql.user 系統表格列的 authentication_string 欄中指定的名稱相符。如果找到相符的名稱,外掛程式會允許連線。authentication_string 值可以使用 CREATE USERALTER USER 中的 IDENTIFIED ...AS 子句來指定。

假設為名為 valerie 的作業系統使用者建立一個 MySQL 帳戶,該使用者透過 socket 檔案從本機主機連線時,將使用 auth_socket 外掛程式進行驗證

CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;

如果本機主機上登入名稱為 stefanie 的使用者使用 --user=valerie 選項呼叫 mysql 以透過 socket 檔案進行連線,則伺服器會使用 auth_socket 來驗證用戶端。此外掛程式會判斷 --user 選項的值 (valerie) 與用戶端使用者的名稱 (stephanie) 不同,並拒絕連線。如果名為 valerie 的使用者嘗試相同的操作,外掛程式會發現使用者名稱和 MySQL 使用者名稱都是 valerie,並允許連線。但是,即使是 valerie,如果使用不同的通訊協定 (例如 TCP/IP) 進行連線,此外掛程式也會拒絕連線。

若要允許 valeriestephanie 這兩個作業系統使用者透過 socket 檔案連線來存取使用該帳戶的 MySQL,可以使用以下兩種方式來完成

  • 在建立帳戶時,同時指定兩個使用者名稱,一個在 CREATE USER 之後,另一個在驗證字串中

    CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
  • 如果您已經使用 CREATE USER 為單一使用者建立帳戶,請使用 ALTER USER 來新增第二個使用者

    CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
    ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';

若要存取帳戶,valeriestephanie 都需要在連線時指定 --user=valerie