MySQL 企業版支援身份驗證方法,讓 MySQL 伺服器可以使用 LDAP (輕量型目錄存取協定)、具有 Kerberos 的 LDAP 或原生 Kerberos 來驗證 MySQL 使用者。MySQL Shell 支援經典 MySQL 協定連線的 LDAP 和 Kerberos 身份驗證。X 協定連線不支援此功能。
以下章節說明如何使用 LDAP 和 Kerberos 身份驗證啟用與 MySQL 伺服器的連線。假設伺服器在啟用伺服器端外掛程式的情況下執行,且用戶端外掛程式在用戶端主機上可用。
MySQL 和 LDAP 協同運作以擷取使用者、憑證和群組資訊。如需簡易 LDAP 身份驗證流程的概觀,請參閱MySQL 使用者如何進行 LDAP 身份驗證。若要搭配 MySQL Shell 使用簡易 LDAP 身份驗證,必須符合下列條件
-
必須在 MySQL 伺服器上建立使用者帳戶,該帳戶設定為與 LDAP 伺服器通訊。MySQL 使用者必須使用
authentication_ldap_simple
伺服器端外掛程式和 LDAP 使用者辨識名稱 (DN) (選擇性)。例如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 伺服器能夠接受來自 LDAP 目錄中 MySQL 授與資料表之外定義的使用者的連線。用戶端和伺服器端 SASL LDAP 外掛程式使用 SASL 訊息在 LDAP 協定中安全傳輸憑證 (請參閱使用 LDAP 可外掛身份驗證)。
對於基於 SASL 的身份驗證,MySQL 使用者必須使用 authentication_ldap_sasl
伺服器端外掛程式以及 MySQL 帳戶驗證的 LDAP 項目 (選擇性) 來識別。例如
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 伺服器套件,而非內建於 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 伺服器使用,連線才能成功。如需伺服器端設定資訊,請參閱GSSAPI/Kerberos 身份驗證方法。
下列一般範例會建立名為 lucy@MYSQL.LOCAL
的 Proxy 使用者,該使用者會承擔名為 proxied_krb_usr
的 Proxy 使用者的權限。假設領域網域 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 伺服器變數 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 企業版 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 單一登入票證。
如果提供密碼,則驗證票證會儲存在暫時的記憶體儲存空間中。