伺服器端 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 驗證外掛程式。如需安裝外掛程式的一般資訊,請參閱第 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 驗證外掛程式的方法取決於您如何安裝它
如果您在伺服器啟動時使用
--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
,並允許連線。但是,即使是 valerie
,如果使用不同的通訊協定 (例如 TCP/IP) 進行連線,此外掛程式也會拒絕連線。
若要允許 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
。