文件首頁
MySQL Connector/J 開發人員指南
相關文件 下載本手冊
PDF (美國信紙) - 1.2Mb
PDF (A4) - 1.2Mb


6.12.2 使用 Kerberos 連接

Kerberos 是一種以票證為基礎的伺服器-用戶端相互驗證通訊協定,MySQL 伺服器(僅限商業版本)支援此通訊協定。

Connector/J 使用 GSS-API、JAAS API 和 JCA API 實作對 Kerberos 的支援;這些 API 的提供者必須在執行使用 Kerberos 驗證之應用程式的 Java 虛擬機器上提供。使用非預設提供者可能會導致非預期的結果。

Kerberos 驗證工作流程

MySQL 中 Kerberos 驗證的主要用途是允許使用者建立連線,而無需在連線字串中指定使用者名稱和密碼。為了使其運作,必須使用連線屬性設定 defaultAuthenticationPlugin=authentication_kerberos_client 來組態 Connector/J,然後 MySQL 使用者名稱可以從與本機快取的票證授予票證 (TGT) 相關聯的 Kerberos 主體中擷取。請注意,MySQL 使用者名稱與 Kerberos 主體不同,它不包含領域部分;因此,Connector/J 會將 @ 符號後面的所有字元截斷,並將其用作 MySQL 使用者名稱。

如果本機 Kerberos 快取中沒有可用的 TGT,Connector/J 會使用 OS 登入使用者名稱作為 MySQL 使用者名稱。在連線字串中指定的使用者名稱始終優先於以任何其他方式取得的名稱,以作為 MySQL 使用者名稱。

然後,MySQL 使用者名稱會傳送至 MySQL 伺服器進行驗證。不存在的使用者會導致伺服器傳回錯誤。現有使用者可繼續進行驗證程序,而後續的驗證機制取決於 MySQL 使用者的建立方式

  • 對於使用驗證外掛程式 authentication_kerberos 建立的使用者,MySQL 伺服器會將對應的 Kerberos 領域傳送回 Connector/J,而 Connector/J 又會使用它來建構識別 Kerberos 伺服器上使用者的 Kerberos 主體。然後可能會發生以下三件事之一

    • 新建構的 Kerberos 主體符合與本機快取的 TGT 相關聯的 Kerberos 主體;然後此 TGT 會傳送至 Kerberos 伺服器以取得所需的 MySQL 服務票證,並且驗證繼續進行。

    • 新建構的 Kerberos 主體不符合與本機快取的 TGT 相關聯的 Kerberos 主體,或者沒有本機 Kerberos 快取;此 Kerberos 主體,以及可能在連線字串中指定的密碼(如果未指定任何密碼,則為空字串),會傳送至 Kerberos 伺服器,以先取得有效的 TGT,然後取得所需的 MySQL 服務票證;驗證繼續進行。

    • 如果 Connector/J 無法取得正確的 Kerberos 組態、無法與 Kerberos 伺服器通訊,或無法執行上述兩個步驟中的任何一個步驟,則會擲回錯誤。

  • 對於使用與 authentication_kerberos 不同的外掛程式定義的使用者,伺服器會要求 Connector/J 使用另一種驗證方法。

用戶端 Kerberos 組態

為了能夠與 Kerberos 伺服器正常運作,Connector/J 需要系統範圍的 Kerberos 組態,或 JVM 的這些本機系統屬性設定

  • -Djava.security.krb5.kdc=[KDC 主機名稱]

  • -Djava.security.krb5.realm=[預設 Kerberos 領域]

偵錯資訊

組態 Connector/J 以使用 Kerberos 驗證的過程並不總是那麼直接。在內部 Java 提供者中啟用記錄有助於找出潛在的問題。可以透過設定這些系統屬性來完成

  • -Dsun.security.krb5.debug=true

  • -Dsun.security.jgss.debug=true