JDBC クライアントの Kerberos 認証

データベースへのユーザー・アクセスの認証にKerberosを使用している環境では、認証チケットを管理するようにJDBCクライアントを構成する。

JDBCドライバはNetezza®データベースへのアクセスを認証するKerberosチケットの取得を担当します。 この動作は、ODBC 環境や OLE DB 環境とは異なります。それらの環境では、チケットを取得するのはクライアント・アプリケーションの役割です。

JDBC 環境では、JDBC クライアントが一定の最小要件を満たしている必要があります。 以下のステップを行ってください。

  • クライアント・システムに以下のJava™バージョンがインストールされていることを確認してください:
    • 11.2.2.0から 11.2.2.5の場合 Java1.7以降。
    • Java/OpenJDK 11.2.2.5以上の場合。
    • 11.2.1.1.およびJava1.6以下の場合。
    • 11.2.1.9以上のJava/OpenJDK11.
  • 使用するJavaプロバイダーに応じて、'login.confファイルのログイン・モジュール・クラス名を変更する:
    • IBM®Javaの場合: com.ibm.security.auth.module.Krb5LoginModule
    • OracleJavaの場合: com.sun.security.auth.module.Krb5LoginModule
  • アプリケーションで java.security.auth.login.config システム・プロパティーに login.conf ファイルのパスを設定するか、<JAVA_HOME>/jre/lib/security/java.security ファイルを編集して以下の行を追加します。
    login.config.url.1=file:<LOGIN_CONF_FILE_PATH>
    注:Windowsの場合、'java.securityは'<JAVA_HOME>\conf\security\java.securityパスにあります。
  • データソース接続パラメータのkrbLoginModule名の値を、'login.confファイルの'loginModule名として指定する。 loginContextのログインメソッドは、この'loginModule情報を'login.confファイルから読み込み、さらに認証するためにその中に記述されているクラスを使用するので、この値を提供する必要があります。

    以下のサンプルの「login.conf参照し、あなたのシステムで作成されていることを確認してください。 この例の場合、krbLoginModule 名は loginModuleName になります。

    loginModuleName {
         com.sun.security.auth.module.Krb5LoginModule required
         debug = true storeKey = false;
    };
    
    デフォルトのログイン・モジュール名は EntryModuleName です。
    注:Windowsの場合、指定されたキャッシュからチケットを取得するためには、オプション'useTicketCache=trueを'login.conf.
  • java.security.krb5.conf システム・プロパティーに Kerberos 構成ファイル名を設定するか、構成ファイルをクライアント・システムのデフォルトの場所にコピーします。
    UNIXおよびLinux®システムでは、設定ファイル名は'krb5.confであり、Windowsシステムでは、ファイル名は'krb5.iniである。 各プラットフォームの Kerberos 構成ファイルのデフォルトの場所を以下の表にまとめます。
    表 1. Kerberos 構成ファイルのデフォルトの場所
    プラットフォーム デフォルトの場所
    IBM AIX® /etc/krb
    HPアイテニアム /etc
    System z®またはPowerPC®上ではないLinux /etc
    Linux on IBM System z /etc
    PowerPC上のLinux /etc
    Oracle Solaris /etc/krb
    Windows (US) C:\winntまたはC:\windows
    注:MITが提供するKerberosが使用されている場合、「krb5.ini」はデフォルトで「C:\ProgramData\MIT\Kerberos5場所に存在する。

    詳しくは、 Kerberos コンフィギュレーション・ファイル ( http://www.ibm.com/support/knowledgecenter/SS7JFU_7.0.0/com.ibm.websphere.express.doc/info/exp/ae/rsec_SPNEGO_config_krb5.html?cp=SS7JFU_7.0.0%2F1-15-2-314 ) を参照。

さらに、IBMJava ランタイム環境を使用していて、異なるドメインにある複数のNetezza Performance Server・システムがある場合、一部のシステムへのJDBCクライアント接続が次のエラーで失敗することがあります:
major string: General failure, unspecified at GSSAPI level
minor string: Error: java.lang.Exception: Error: java.lang.Exception: No credential
このエラーが発生した場合は、クライアントの Kerberos 構成ファイルを更新して、アクセスする必要のあるすべてのドメインと認証要求を制御する Kerberos レルムを指定した [domain_realm] 定義を組み込んでください。 たとえば、ドメインeast.company.comおよびwest.company.com内に構成されているNetezza Performance Server・システムがあり、KerberosレルムがMYKRB5.COMPANY.COM の場合、Kerberos構成ファイルに次の '[domain_realm]定義を追加します:
[domain_realm]
.company.com = MYKRB5.COMPANY.COM
company.com = MYKRB5.COMPANY.COM
east.company.com と west.company.com の両方を指定することもできますが、ドメイン名に共通する部分 (company.com) があるので、共通のドメインを指定できます。 ドメイン名がeast.comやwest.comのように一意の場合は、Netezza Performance Server・システムが存在する場所に一意のドメインをそれぞれ指定します。

Kerberos認証を使用するためのNetezza Performance Serverシステムの構成の詳細については、『IBM Netezzaシステム管理者ガイド』のセキュリティのセクションを参照してください。