伺服器端 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 驗證外掛程式。如需有關安裝外掛程式的一般資訊,請參閱第 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 驗證外掛程式所用的方法,取決於您安裝它的方式。
如果您在伺服器啟動時使用
--plugin-load-add
選項安裝外掛程式,請重新啟動伺服器,而不要使用此選項。如果您在執行時使用
INSTALL PLUGIN
陳述式安裝外掛程式,則它會在伺服器重新啟動後仍然處於安裝狀態。若要解除安裝它,請使用UNINSTALL PLUGIN
。UNINSTALL PLUGIN auth_socket;
socket 外掛程式會檢查 socket 使用者名稱 (作業系統使用者名稱) 是否與用戶端程式指定給伺服器的 MySQL 使用者名稱相符。如果名稱不符,外掛程式會檢查 socket 使用者名稱是否與 mysql.user
系統資料表列的 authentication_string
欄位中指定的名稱相符。如果找到相符項目,外掛程式會允許連線。authentication_string
值可以使用 CREATE USER
或 ALTER 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
,並允許連線。不過,如果連線是使用不同的協定 (例如 TCP/IP) 建立,則外掛程式甚至會拒絕 valerie
的連線。
若要允許 valerie
和 stephanie
作業系統使用者透過 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';
若要存取該帳戶,valerie
和 stephanie
都需要在連線時指定 --user=valerie
。