Kerberos Authentication -- Configure JDBC Clients on All Platforms

JDBC客戶機上的Kerberos身份驗證使用Java身份驗證和授權服務(JAAS)獲取初始Kerberos憑證。JAAS是一個API框架,它隱藏特定於平臺的身份驗證細節,併爲其他應用程序提供一致的接口。
您可以通過JAAS登錄配置文件指定客戶機登錄過程。這個文件包含指定Kerberos的身份驗證方法和其他設置的選項。一個名爲LoginModule的類在配置文件中定義了有效的選項。

JDBC客戶端principal 被設計爲JDBC -username@server-from-connection-string。

Implement the LoginModule

Vertica建議您使用JAAS公共類com.sun.security.auth.module。Krb5LoginModul在Java運行時環境(JRE)中提供。
Krb5LoginModule使用Kerberos協議對用戶進行身份驗證,它在非Windows和Windows平臺上的實現方式不同:

  1. 在非windows平臺上
    Krb5LoginModule依賴於一個本地Kerberos客戶機實現。因此,可以使用與在Linux、HP-UX、AIX和MAC OSX平臺上配置ODBC和vsql客戶機相同的/etc/krb5.conf設置。
  2. 在Windows平臺上
    Krb5LoginModule使用與Java運行時環境(JRE)綁定的自定義Kerberos客戶端實現。Windows設置存儲在%WINDIR%\krb5.ini文件中,該文件具有與非Windows krb5.conf文件類似的語法和約定。您可以將krb5.conf從非windows客戶端複製到%WINDIR%\krb5.ini。

Create the JAAS Login Configuration

JAASConfigName連接屬性標識包含Krb5LoginModule及其設置的JAAS配置中的特定配置。JAASConfigName設置允許具有不同Kerberos設置的多個JDBC應用程序在一個主機上共存。默認的配置名是verticajdbc。

重點:仔細構造JAAS登錄配置文件。如果語法不正確,身份驗證將失敗。

您可以在java中配置與jaas相關的設置。安全主安全屬性文件。這個文件位於JRE的lib/security目錄中。

Create a JDBC Login Context

下面的示例演示如何在JDBC客戶機上爲Kerberos身份驗證創建登錄上下文。客戶端使用verticajdbc的默認JAASConfigName,並指定:

  • 將從票證緩存中獲取票證授予票證
  • 如果無法從緩存、keytab文件或通過共享狀態獲得憑據,則不會提示用戶輸入密碼。
verticajdbc {
  com.sun.security.auth.module.Krb5LoginModule 
  required
  useTicketCache=true 
  doNotPrompt=true;
};

JDBC Authentication Request and Connection

您可以配置Krb5LoginModule來使用緩存的票據或keytab。如果調用用戶提供了密碼,驅動程序還可以自動獲取票據或keytab。
在前面的示例中,登錄過程使用一個緩存的票證,並且不提示輸入密碼,因爲useTicketCache和doNotPrompt都被設置爲true。如果doNotPrompt=false,並且在登錄過程中提供了用戶名和密碼,則驅動程序將該信息提供給LoginModule。然後驅動程序代表您調用kinit實用程序。

  • 在JDBC客戶機上,調用kinit實用程序獲得一個票據:
$ kinit kuser@EXAMPLE.COM
  • 連接到Vertica:
Properties props = new Properties();
props.setProperty("user", "kuser");
props.setProperty("KerberosServiceName", "vertica");
props.setProperty("KerberosHostName", "vcluster.example.com");
props.setProperty("JAASConfigName", "verticajdbc");
Connection conn = DriverManager.getConnection
"jdbc:vertica://myserver.example.com:5433/VMart", props);

Have the Driver Acquire a Ticket

有時,您可能希望自己不調用kinit實用程序,但仍然使用加密的相互身份驗證。在這種情況下,您可以選擇向驅動程序傳遞一個明文密碼,以便從KDC獲取票據。密碼在通過網絡發送時進行加密。例如,在下面的例子中,useTicketCache和doNotPrompt都爲false。因此,調用用戶的憑證不是通過票據緩存或keytab獲得的。

$ verticajdbc  {
  com.sun.security.auth.module.Krb5LoginModule  
  required  
  useTicketCache=false 
  doNotPrompt=false;
};

前面的示例演示了JAAS的靈活性。driver不再尋找緩存的票,你不需要調用kinit。相反,驅動程序接受密碼和用戶名,並代表您調用kinit。

翻譯自:
Configure JDBC Clients on All Platforms

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章