MySQL Enterprise Edition 支援驗證方法,讓 MySQL Server 可以使用 LDAP (輕量型目錄存取協定)、具有 Kerberos 的 LDAP 或原生 Kerberos 來驗證 MySQL 使用者。MySQL Shell 支援傳統 MySQL 通訊協定連線的 LDAP 和 Kerberos 驗證。X 通訊協定連線不支援此功能。
以下各節將說明如何使用 LDAP 和 Kerberos 驗證來啟用與 MySQL 伺服器的連線。假設伺服器正在執行,且已啟用伺服器端外掛程式,而且用戶端主機上提供用戶端外掛程式。
MySQL 和 LDAP 會協同運作以擷取使用者、認證和群組資訊。如需簡易 LDAP 驗證程序的概觀,請參閱MySQL 使用者的 LDAP 驗證運作方式。若要搭配 MySQL Shell 使用簡易 LDAP 驗證,必須符合下列條件
-
必須在 MySQL 伺服器上建立使用者帳戶,該帳戶設定為與 LDAP 伺服器通訊。必須使用
authentication_ldap_simple
伺服器端外掛程式以及選擇性地使用 LDAP 使用者辨別名稱 (DN) 來識別 MySQL 使用者。例如CREATE USER 'admin'@'localhost' IDENTIFIED WITH authentication_ldap_simple BY 'uid=admin,ou=People,dc=my-domain,dc=com';
此範例中的
BY
子句表示 MySQL 帳戶對哪個 LDAP 項目進行驗證。DN 的特定屬性可能會因 LDAP 伺服器而異。 MySQL Shell 使用用戶端
mysql_clear_password
外掛程式,將密碼以純文字傳送到伺服器。不使用密碼雜湊或加密,因此 MySQL Shell 和伺服器之間需要安全連線 (使用 SSL 或 Socket)。如需詳細資訊,請參閱第 4.3.4 節,「使用加密連線」或第 4.3.3 節,「使用 Unix Socket 和 Windows 具名管道連線」。-
為了將安全性風險降到最低,必須在安全連線上,將
--auth-method
命令列選項的值設定為clear_text_password
,才能明確啟用mysql_clear_password
外掛程式。例如,以下命令可讓您為先前範例中建立的使用者建立全域工作階段$> mysqlsh admin@localhost:3308 --auth-method=clear_text_password Please provide the password for 'admin@localhost:3308': admin_password (admin LDAP password)
注意您也可以設定環境變數
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN
,並針對所有用戶端連線啟用mysql_clear_password
外掛程式。但是,此方法本質上不安全,除了測試以外,不建議在任何情況下使用。如需詳細資訊,請參閱用戶端純文字可外掛驗證。
MySQL Server 能夠接受來自 LDAP 目錄中定義的 MySQL 授與表格外部的使用者的連線。用戶端和伺服器端 SASL LDAP 外掛程式會使用 SASL 訊息,以便在 LDAP 通訊協定內安全傳輸認證 (請參閱使用 LDAP 可外掛驗證)。
對於以 SASL 為基礎的驗證,必須使用 authentication_ldap_sasl
伺服器端外掛程式以及選擇性地使用 MySQL 帳戶對其進行驗證的 LDAP 項目來識別 MySQL 使用者。例如
CREATE USER 'sammy'@'localhost'
IDENTIFIED WITH authentication_ldap_sasl
BY 'uid=sammy_ldap,ou=People,dc=my-domain,dc=com';
authentication_ldap_sasl_client
用戶端外掛程式隨附於 MySQL Server 套件,而非建置於 libmysqlclient
用戶端程式庫中。MySQL Shell 提供持續連線選項 shell.options.mysqlPluginDir
,讓您定義所需外掛程式的位置。或者,您可以使用非持續性命令列選項 --mysql-plugin-dir
來覆寫持續性設定。例如,以下命令可讓您在 Linux 主機上,為先前範例中建立的使用者建立全域工作階段
$> mysqlsh sammy@localhost:3308 --mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Please provide the password for 'sammy@localhost:3308': sammy_password (sammy_ldap LDAP password)
如需其他使用範例,請參閱使用 Proxy 的 LDAP 驗證和LDAP 驗證群組喜好設定和對應規格。
MySQL Shell 也支援透過 LDAP SASL 的 Kerberos 驗證。使用一般安全服務應用程式介面 (GSSAPI) 安全抽象化介面,此類型的連線會先向 Kerberos 驗證以取得服務認證,然後接著使用這些認證來啟用對其他服務的安全存取。GSSAPI/Kerberos 僅在 Linux 上支援做為 MySQL 伺服器和 MySQL Shell 的 LDAP 驗證方法。
GSSAPI 程式庫和 Kerberos 服務必須可供 MySQL Server 使用,連線才能成功。請參閱GSSAPI/Kerberos 驗證方法以取得伺服器端組態資訊。
以下一般範例會建立名為 lucy@MYSQL.LOCAL
的 Proxy 使用者,其會假設 Proxy 使用者 proxied_krb_usr
的權限。它會假定網域 MYSQL.LOCAL
已在 /etc/krb5.conf
Kerberos 組態檔中進行組態。
帳戶名稱的使用者部分包含主要網域,因此 'lucy@MYSQL.LOCAL' 會以單一值來引號,以進行 LDAP Kerberos 驗證。
CREATE USER 'lucy@MYSQL.LOCAL'
IDENTIFIED WITH authentication_ldap_sasl
BY '#krb_grp=proxied_krb_user';
CREATE USER 'proxied_krb_user';
GRANT ALL PRIVILEGES ON my_db.* TO 'proxied_krb_user';
GRANT PROXY on 'proxied_krb_user' TO 'lucy@MYSQL.LOCAL';
以下命令可讓您在 Linux 主機上,為先前範例中建立的使用者建立全域工作階段。您必須指定伺服器外掛程式目錄的位置,可以是持續性 shell.options.mysqlPluginDir
連線選項,或非持續性命令選項,例如
$> mysqlsh lucy%40MYSQL.LOCAL:password@localhost:3308/my_db
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
在此範例中,百分比編碼 (%40
) 會取代主體名稱中保留的 @
字元,而且 password
是為 MySQL Server 變數 authentication_ldap_sasl_bind_root_pwd
設定的值。如需與透過 LDAP SASL 的 Kerberos 驗證相關的伺服器變數清單,請參閱為 GSSAPI/Kerberos 設定伺服器端 SASL LDAP 驗證外掛程式。
在叫用 MySQL Shell 之前,您可以獨立於 MySQL 從金鑰發佈中心取得和快取票證授予票證。在這種情況下,叫用 MySQL Shell 時請勿指定使用者名稱或密碼選項
$> mysqlsh localhost:3308/my_db --auth-method=authentication_ldap_sasl_client
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
當省略使用者認證時,指定 --auth-method=authentication_ldap_sasl_client
選項是必要的。
MySQL Shell 能夠為使用 authentication_kerberos
伺服器端驗證外掛程式的帳戶建立連線,前提是必須有正確的 Kerberos 票證,或可從 Kerberos 取得。從 MySQL Enterprise Edition 8.0.27 開始,在執行 Linux 和 Windows 的主機上提供此功能 (8.0.26 版僅支援 Linux)。如需詳細的設定資訊,請參閱Kerberos 可外掛驗證。
Kerberos 驗證可以結合使用者名稱 (例如,lucy
) 和使用者帳戶中指定的網域 (例如,MYSQL.LOCAL
),以建構使用者主體名稱 (UPN),例如 lucy@MYSQL.LOCAL
。若要建立對應於 UPN lucy@MYSQL.LOCAL
的 MySQL 帳戶,請使用此陳述式
CREATE USER 'lucy'
IDENTIFIED WITH authentication_kerberos
BY 'MYSQL.LOCAL';
用戶端外掛程式會使用 UPN 和密碼來取得票證授予票證 (TGT),使用 TGT 來取得 MySQL 服務票證 (ST),並使用 ST 來驗證至 MySQL 伺服器。
以下命令可讓您在 Linux 主機上,為先前範例中建立的使用者建立全域工作階段。您必須指定伺服器外掛程式目錄的位置,可以是持續性 shell.options.mysqlPluginDir
連線選項,或非持續性命令選項,例如
$> mysqlsh lucy:3308 --mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Please provide the password for 'lucy@localhost:3308': UPN_password
在叫用 MySQL Shell 之前,您可以獨立於 MySQL 從金鑰發佈中心取得和快取 TGT。在這種情況下,叫用 MySQL Shell 時請勿指定使用者名稱或密碼選項
$> mysqlsh localhost:3308 --auth-method=authentication_kerberos_client
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
當省略使用者認證時,指定 --auth-method=authentication_kerberos_client
選項是必要的。
在 Microsoft Windows 平台上,您可以使用 plugin-authentication-kerberos-client-mode
連線選項來定義 Kerberos 用戶端模式,SSPI
或 GSSAPI
。此選項可使用以下格式
命令列選項:
--plugin-authentication-kerberos-client-mode=SSPI | GSSAPI
連線查詢選項:
user@host:port?plugin-authentication-kerberos-client-mode=SSPI | GSSAPI
-
URI 字典選項:
plugin-authentication-kerberos-client-mode': 'SSPI' | 'GSSAPI'
,例如shell.connect({'user': 'mysql', 'auth-method':'authentication_kerberos_client', 'host': '127.0.0.1', 'password': 'mysqlpa$$w0rd', 'plugin-authentication-kerberos-client-mode': 'GSSAPI', 'scheme': 'mysql'});
您也可以在組態檔中指定 plugin-authentication-kerberos-client-mode
。如果組態檔中存在此設定,則會將其用作預設值。
如果未定義 plugin-authentication-kerberos-client-mode
,則預設會使用 SSPI
。
使用 Kerberos 驗證連線至 MySQL 伺服器時,驗證模式的行為如下
-
GSSAPI
:如果未提供密碼,則會從 MIT Kerberos 快取擷取驗證票證。如果找不到有效的票證,連線會失敗。
如果提供密碼,則會從 Kerberos 伺服器擷取驗證票證,並將其儲存在 MIT Kerberos 快取中。
如果未提供帳戶名稱,則會使用 Windows 使用者名稱作為 MySQL 帳戶名稱。
-
SSPI
:如果未提供密碼,則會使用 Windows 單一登入票證。
如果提供密碼,則驗證票證會儲存在暫時的記憶體儲存空間中。