文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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 參考手冊  /  ...  /  無登入可插拔式驗證

8.4.1.8 無登入可插拔式驗證

mysql_no_login 伺服器端驗證外掛程式會阻止所有用戶端連線到任何使用它的帳戶。此外掛程式的使用案例包括:

  • 必須能夠執行具有提升權限的儲存程式和檢視,而不會將這些權限暴露給一般使用者的帳戶。

  • 不應允許直接登入,但僅能透過 Proxy 帳戶存取的 Proxy 帳戶。

下表顯示外掛程式和程式庫檔案名稱。檔案名稱字尾在您的系統上可能有所不同。檔案必須位於 plugin_dir 系統變數所命名的目錄中。

表 8.24 無登入驗證的外掛程式和程式庫名稱

外掛程式或檔案 外掛程式或檔案名稱
伺服器端外掛程式 mysql_no_login
用戶端外掛程式
程式庫檔案 mysql_no_login.so

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

如需 MySQL 中可插拔式驗證的一般資訊,請參閱第 8.2.17 節,「可插拔式驗證」。如需 Proxy 使用者資訊,請參閱第 8.2.19 節,「Proxy 使用者」

安裝無登入可插拔式驗證

本節說明如何安裝無登入驗證外掛程式。如需安裝外掛程式的一般資訊,請參閱第 7.6.1 節,「安裝和解除安裝外掛程式」

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

外掛程式程式庫檔案基本名稱為 mysql_no_login。檔案名稱字尾依平台而異(例如,Unix 和類似 Unix 的系統為 .so,Windows 為 .dll)。

若要在伺服器啟動時載入外掛程式,請使用 --plugin-load-add 選項來命名包含該外掛程式的程式庫檔案。使用此外掛程式載入方法,每次啟動伺服器時都必須提供此選項。例如,將這些行放入伺服器 my.cnf 檔案中,並根據您的平台需要調整 .so 字尾

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

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

或者,若要在執行階段載入外掛程式,請使用此陳述式,並根據您的平台需要調整 .so 後綴。

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

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

若要將 MySQL 帳戶與 no-login 外掛程式建立關聯,請參閱使用 No-Login 可插拔驗證

解除安裝 No-Login 可插拔驗證

解除安裝 no-login 驗證外掛程式的方法取決於您安裝它的方式。

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

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

    UNINSTALL PLUGIN mysql_no_login;
使用 No-Login 可插拔驗證

本節說明如何使用 no-login 驗證外掛程式,以防止帳戶被用於從 MySQL 用戶端程式連線至伺服器。假設伺服器已啟用 no-login 外掛程式,如安裝 No-Login 可插拔驗證中所述。

若要在 CREATE USER 陳述式的 IDENTIFIED WITH 子句中參照 no-login 驗證外掛程式,請使用名稱 mysql_no_login

使用 mysql_no_login 驗證的帳戶可以用作儲存程式和檢視物件的 DEFINER。如果此類物件定義也包括 SQL SECURITY DEFINER,則它會以該帳戶的權限執行。DBA 可以使用此行為來提供對機密或敏感資料的存取,這些資料僅透過良好控制的介面公開。

以下範例說明這些原則。它定義了一個不允許用戶端連線的帳戶,並將其與一個僅公開 mysql.user 系統資料表特定欄位的檢視建立關聯。

CREATE DATABASE nologindb;
CREATE USER 'nologin'@'localhost'
  IDENTIFIED WITH mysql_no_login;
GRANT ALL ON nologindb.*
  TO 'nologin'@'localhost';
GRANT SELECT ON mysql.user
  TO 'nologin'@'localhost';
CREATE DEFINER = 'nologin'@'localhost'
  SQL SECURITY DEFINER
  VIEW nologindb.myview
  AS SELECT User, Host FROM mysql.user;

若要向一般使用者提供受保護的檢視存取權,請執行此操作:

GRANT SELECT ON nologindb.myview
  TO 'ordinaryuser'@'localhost';

現在,一般使用者可以使用該檢視來存取它所呈現的有限資訊。

SELECT * FROM nologindb.myview;

使用者嘗試存取該檢視未公開的其他欄位會導致錯誤,未被授予存取檢視權限的使用者嘗試從檢視中選擇也會導致錯誤。

注意:

由於 nologin 帳戶無法直接使用,因此設定它所使用物件所需的操作必須由具有建立物件和設定 DEFINER 值所需權限的 root 或類似帳戶執行。

mysql_no_login 外掛程式在 Proxy 情境中也很有用。(有關 Proxy 涉及的概念討論,請參閱第 8.2.19 節「Proxy 使用者」。)使用 mysql_no_login 驗證的帳戶可以用作 Proxy 帳戶的 Proxy 使用者。

-- create proxied account
CREATE USER 'proxied_user'@'localhost'
  IDENTIFIED WITH mysql_no_login;
-- grant privileges to proxied account
GRANT ...
  ON ...
  TO 'proxied_user'@'localhost';
-- permit proxy_user to be a proxy account for proxied account
GRANT PROXY
  ON 'proxied_user'@'localhost'
  TO 'proxy_user'@'localhost';

這讓用戶端能夠透過 Proxy 帳戶(proxy_user)存取 MySQL,但不能透過直接以被 Proxy 使用者(proxied_user)身分連線來繞過 Proxy 機制。使用 proxy_user 帳戶連線的用戶端具有 proxied_user 帳戶的權限,但 proxied_user 本身不能用於連線。

有關保護被 Proxy 帳戶免受直接使用的其他方法,請參閱防止直接登入被 Proxy 帳戶