文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  Socket Peer-Credential 可插拔驗證

8.4.1.9 Socket Peer-Credential 可插拔驗證

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

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

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

表 8.25 Socket Peer-Credential 驗證的外掛程式和程式庫名稱

外掛程式或檔案 外掛程式或檔案名稱
伺服器端外掛程式 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

若要驗證外掛程式安裝,請檢查資訊綱要 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 USERIDENTIFIED ...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,並允許連線。不過,如果連線是使用不同的協定 (例如 TCP/IP) 建立,則外掛程式甚至會拒絕 valerie 的連線。

若要允許 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