25 Kerberos認証の構成

Kerberosは信頼できるサード・パーティ認証システムであり、共有秘密鍵に基づき、サード・パーティがセキュアであることを前提とします。

25.1 Oracle Database上のKerberosの概要

Kerberosは、OracleがOracle Databaseユーザーの認証に使用するネットワーク認証システムです。

25.1.1 一般的なOracle Database構成内のKerberosコンポーネント

一般的なKerberos認証構成内のコンポーネントには、クライアント、キー配布センター(KDC)およびOracle Databaseサーバーが含まれます。

  • クライアントはOracle Databaseサーバーに接続します。
  • KDCは、ユーザーとサービス(Kerberosではプリンシパルと呼ばれます)のデータベースを保守します。認証サービスとサービス・チケットを提供します。一意のKerberosサービスごとに、独自のサービス・チケットが必要です。Oracle Databaseサーバーとは別のシステムに配置する必要があります。
  • Oracle Databaseサーバーには、クライアントのKerberos資格証明が提示されます。

主な構成ファイルを次に示します。

  • クライアントで使用されるkrb5.confは、クライアントにKerberosサーバーの場所を示します。
  • Oracle Databaseサーバーで使用されるv5srvtabは、アプリケーション(この場合はOracleデータベース)の構成ファイルです。このファイルはKerberos keytabファイルであり、そのホストが提供するサービスのサービス・キー(サービス・プリンシパル)が含まれています。
  • sqlnet.oraは、クライアントとOracle Databaseサーバーの両方で使用され、クライアントとデータベースの両方に、それぞれの構成ファイルの場所を示します。

25.1.2 Kerberos構成で使用されるチケット

Oracle Databaseでは、Kerberosクライアント・チケット認可チケット(TGT)とクライアント・サービス・チケットの両方を使用します。

25.1.2.1 Kerberosクライアント・チケット認可チケット

クライアント・チケット認可チケット(TGT)には、Kerberos接続のサービスをリクエストするための認可が記述されています。

クライアントはkrb5.confファイルを読み取り、このTGT (krbtgt)を受信できるようにするためにKerberosサーバーを検索します。クライアントに送信されたTGTによって、クライアントはKerberosレルム内の適切なサービスにアクセスできるようになり、そのレルム内の別のサービスにユーザーがアクセスするたびに再認証する必要がなくなります。

たとえば、Windows Active Directoryドメインでは、KerberosレルムはユーザーのWindowsドメインと同じになります。ユーザーがActive Directoryにログインすると、ユーザーのWindows資格情報(Active Directory Kerberosチケット)で、そのActive Directoryドメイン内のすべてのサービスにアクセスできます(それらのサービスが許可している場合)。

次のoklistの出力は、ユーザーがActive Directory認証済のWindowsユーザーとして最初にログオンしたときに自動的に付与されるチケットの例を示しています。

oklist
Kerberos Utilities for 32-bit Windows: Version 23.0.0.0.0 - Production on 15-MAY-2023 11:50:39
Copyright (c) 1996, 2023 Oracle Corporation. All rights reserved.
Ticket cache: win2kcc
Default principal: user_name@host_name
Valid Starting Expires Principal
22-Oct-2004 12:10:05 15-MAY-2023 22:10:05 krbtgt /host_name@realm_name renew until 29-Oct-2004 12:10:05
22-Oct-2004 12:10:05 15-MAY-2023 22:10:05 ldap/Active_Directory_host_name/host_name@realm_name renew until 29-Oct-2004 12:10:05

22-Oct-2004 12:10:05 15-MAY-2023 22:10:05 host/Active_Directory_host_name@host_name renew until 29-Oct-2004 12:10:05

これは、Oracle Application Serverシングル・サインオン(SSO)アプリケーションと似ています。そのアプリケーションでは、ユーザーがSSO認証を受信すると、ユーザーはSSOサーバーのレルム内のすべてのアプリケーション(SSOサーバーに登録されている外部アプリケーションとパートナ・アプリケーション)に認証不要でアクセスできます。前述の例では、ユーザーがドメイン・コントローラrealm_nameにログインしたときに、Active Directoryによってrealm_nameのActive Directory TGTがWindowsチケット・キャッシュに自動的に移入されていました。

Active Directoryがチケットを発行したときに、Oracle DatabaseがWindowsクライアントのKerberos資格証明を取得できる場所が2つあります。どの場所を使用するかは、sqlnet.oraファイルでKERBEROS5_CC_NAMEパラメータを設定することで指定できます。それらをtempディレクトリ内のkrb5.ccというファイルに配置する場合は、次のようにKERBEROS5_CC_NAMEを設定します。

SQLNET.KERBEROS5_CC_NAME = temp

キャッシュの場所をディレクトリとして指定する場合は、Oracle提供のKerberosユーティリティであるokinitユーティリティで手動で移入する必要があります。

Windowsネイティブ資格証明キャッシュ(ログオン時にkrbtgtで自動的に移入される資格証明キャッシュ)を使用する場合は、次の設定を使用します。

SQLNET.KERBEROS5_CC_NAME=OSMSFT://

これはネイティブ・キャッシュであり、Windows ADドメインへのログイン時にユーザーの資格証明が自動的に移入されるため、ユーザーはokinitを使用する必要がありません。通常、この場所はActive Directory環境で固定されます。

Oracle提供のユーティリティokinitを使用してキャッシュに移入できます。okinitによって移入されたキャッシュの内容を表示するには、oklistユーティリティを実行します。たとえば:

C:\> okinit user_name
Kerberos Utilities for 32-bit Windows: Version 23.0.0.0.0 - Production on 15-MAY-2023 12:32:53
Copyright (c) 1996, 2023 Oracle Corporation. All rights reserved.
Password for mailto:user_name@Realm : realm_name

C:\> oklist
Kerberos Utilities for 32-bit Windows: Version 23.0.0.0.0 - Production on 15-MAY-2023 12:33:02
Copyright (c) 1996, 2023 Oracle Corporation. All rights reserved.

Ticket cache: CC_path
Default principal: user_name@host_name
Valid Starting Expires Principal
15-MAY-2023 12:32:57 15-MAY-2023 20:32:54 krbtgt/host_name@realm_name

この出力は、ディレクトリ・キャッシュにTGTがあることを示しています。

25.1.2.2 Kerberosクライアント・サービス・チケット

クライアント・サービス・チケットは、ユーザーがOracleデータベースに正常に接続した後で生成されます。

クライアント構成側からの構成は完了しています。すべてのユーザーは、次の構文を使用してデータベースに接続する必要があります(tnsnames.oraファイルでユーザーにTNS別名が定義されている場合)。

sqlplus /@tns_alias

この場合、/スラッシュは、外部のオペレーティング・システム認証ではなく、外部のKerberos認証を意味します。

クライアント・サービス・チケットを表示するには、oklistコマンドを実行します。たとえば:

oklist
....
Valid Starting Expires Principal

22-Oct-2022 12:32:57 22-Oct-2022 20:32:54 krbtgt/host_name@realm_name
22-Oct-2022 12:43:19 22-Oct-2022 20:32:54 server_principal/Active_Directory_host_name@realm_name

25.1.3 Kerberosサーバー・キー配布センター

サーバー・キー配布センター(KDC)は、Oracleデータベースと連携するKerberosコンポーネントを調整します。

KDCは、すべてのシステムのプリンシパルとそれに関連付けられた暗号化キーを格納するデータベース、認証を処理するサーバー、およびチケット許可サーバーで構成されています。Oracle Databaseに関して、KDCは次のアクションを実行できます。

  • Active Directoryは、Active DirectoryユーザーがOracleデータベースからの有効なユーザーであることを確認します。okinit Active_Directory_userコマンドを実行することで確認できます。
  • Active Directoryは、Active_Directory_userにActive Directoryドメインkrbtgt/host_name@realm_name接続のTGTを付与します。
  • Active Directoryは、Active_directory_userにOracleデータベースのサービス・チケットを付与し、データベース・ログインが発生するようにしています(sqlplus /@tns_alias)。

25.1.4 Oracle DatabaseとKerberosの連携について

OracleデータベースをKerberosと連携するように構成するには、KerberosサーバーでOracleデータベースに応じたuserPrincipalName属性とservicePrincipalName属性を設定する必要があります。

  • userPrincipalName属性には、Kerberosを通じてOracleデータベースにログインするユーザーの名前を格納します。クライアントが正常に初期化されると(okinitやActive Directoryなどの方法を使用)、ユーザーが入力したパスワードは、そのユーザー用に格納されているパスワードと照合されます。パスワードが一致すると、ユーザーはログインされ、ディレクトリまたはネイティブWindowsキャッシュに格納されているターゲット認可チケット(TGT)が付与されます。
  • servicePrincipalName属性には、サービス名(この場合はOracleデータベースが存在するサーバー)を格納します。

Windowsでは、userPrincipalNameservicePrincipalNamektpassユーティリティで作成します。Linuxでは、kadminユーティリティで作成します。これらのユーティリティでは、ユーザーの認証にOracle Databaseが使用するkeytabファイル(v5srvtab)を作成します。このファイルには、サービス名も格納します。クライアントは接続するときに、SQLNET.AUTHENTICATION_KERBEROS5_SERVICEパラメータを使用してサービス名(Oracle Databaseの場合はoracle)をリクエストし、SQLNET.KERBEROS5_KEYTABパラメータを使用してkeytabファイルを検索します。Oracleは、Kerberos属性を使用してKerberosで認証するようにOracleデータベースを構成する場合に使用できる一連のsqlnet.oraパラメータを用意しています。

次のコマンドを実行すると、keytabファイルの内容を確認できます。

oklist -k

次のような出力が表示されます。

Kerberos Utilities for 32-bit Windows: Version 23.0.0.0.0 - Production on 15-MAY-2023 13:25:32
Copyright (c) 1996, 2023 Oracle Corporation. All rights reserved.
Service Key Table: <Keytab file with oath>
Ver Timestamp Principal

15-MAY-2023 16:00:00 server_principal/Active_Directory_host@host_name

25.1.5 Kerberos構成で使用されるOracle Databaseのパラメータ

Oracle Databaseには、Kerberos認証を使用するためのクライアントとサーバーのパラメータが用意されています。

表25-1に、Kerberosを使用するクライアントとサーバーの構成ファイルに挿入するパラメータを示します。

表25-1 Kerberos認証パラメータ

ファイル名 構成パラメータ

sqlnet.ora

  • SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5): クライアントとサーバーの両方に設定します。

  • SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=oracle: クライアントとサーバーの両方に設定します。

  • SQLNET.KERBEROS5_CC_NAME=/usr/tmp/DCE-CC: 通常、サーバーでは必要ありません。クライアントがMicrosoft Windows上にありドメインの一部である場合は、インメモリー・チケット・キャッシュの使用と、このパラメータをOSMSFT://またはMSLSA:に設定することを検討できます。

  • SQLNET.KERBEROS5_CLOCKSKEW=1200: クライアントとサーバーの両方に設定します。

  • SQLNET.KERBEROS5_CONF=/krb5/krb.conf: クライアントとサーバーの両方に設定します。(通常、クライアントでのこのパスは、サーバーでのパスとは異なります。)

  • SQLNET.KERBEROS5_CONF_MIT=(TRUE): クライアントとサーバーの両方で、これをTRUEに設定します。

  • SQLNET.KERBEROS5_REALMS=/krb5/krb.realms: この設定は、通常、クライアントまたはサーバーでは必要ありません。

  • SQLNET.KERBEROS5_KEYTAB=/krb5/v5srvtab: このパラメータはサーバーにのみ設定し、クライアントには設定しません。

  • SQLNET.FALLBACK_AUTHENTICATION=FALSE: クライアントとサーバーの両方に設定します。

initialization parameter file

  • OS_AUTHENT_PREFIX="": このパラメータは、サーバーにのみ設定し、クライアントには設定しません。

25.1.6 Oracle Database Kerberos構成での認証動作について

Kerberos認証フローは、sqlnet.oraファイルで設定するKerberos固有のパラメータと、krb5.confファイルの設定に依存します。

認証フロー

  1. ユーザーはクライアントにログインして、チケット認可チケット(TGT)を取得します。
    • OracleデータベースがネイティブWindowsキャッシュを使用している場合は、ユーザーのログイン時にTGTが自動的に取得されます。sqlnet.oraファイルは、次のように設定してTGTを取得できるようにする必要があります。
      SQLNET.KERBEROS5_CC_NAME=OSMSFT://

      また、MSLSA:に設定することもできます。

    • Oracleデータベースがディレクトリ・キャッシュを使用している場合は、Kerberosサーバーの場所をデータベースが検出できるように、sqlnet.oraファイルで次のパラメータを設定する必要があります。
      SQLNET.KERBEROS5_CC_NAME=CC_file_name_path

      さらに、okinitユーティリティを使用して、キャッシュにTGTを移入することも必要です。oklistユーティリティはキャッシュの内容を表示し、okdstryは内容をクリアし、sqlnet.oraパラメータ(TRACE_LEVEL_OKINIT=16)はsqlnet.oraトレースで問題をトレースできるようにします。

      ただし、通常、このタイプはサーバーでは使用されません。クライアントがMicrosoft Windows上にあり、ドメインの一部である場合は、インメモリー・チケット・キャッシュの使用を検討し、SQLNET.KERBEROS5_CC_NAMEパラメータをOSMSFT://またはMSLSA:に設定することをお薦めします。

  2. クライアントがデータベースに接続します。
    sqlplus /@tns_alias

    Oracleデータベースでは、次のアクションが実行されます。

    • SQLNET.KERBEROS5_CC_NAMEパラメータで指定された場所からTGTを取得します
    • SQLNET.AUTHENTICATION_KERBEROS5_SERVICEパラメータからKerberosサービス名を読み取ります
    • これらのパラメータからの情報をパッケージ化し、Kerberosサーバーのキー配布センター(KDC)に送信します。KDCは、Oracleデータベースのキーで暗号化されたサービス・チケットをクライアントに送り返します
  3. クライアントは、暗号化されたサービス・チケットを資格証明キャッシュに書き込み、その資格証明をOracleデータベースに送信します。メッセージは、このデータベースでkeytabファイルのキーを使用して復号化されます。
  4. Oracleデータベースはクライアント・リクエストを受信し、次のアクションを実行します。
    • サービス・チケットをデコードし、次の情報を抽出します: リクエストしているユーザーのプリンシパル、サービス・プリンシパル、IPアドレスのリスト、サービス・チケットが発行された日時
    • サービス・プリンシパルをkeytabファイルに格納されたプリンシパルと照合します
    • TGTから抽出されたユーザー名について、データベースのユーザー名表を検索します。ユーザーが存在していて認証の一致がある場合は、そのユーザーにアクセス権が付与されます。
  5. 前述のステップに成功すると、クライアントが接続されます。

接続の完了のために使用されるクライアント構成ファイル

krb5.confファイルの設定:

#

[libdefaults]
default_realm = realm name
kdc = KDC_host:port
}

realm name = {
kdc = KDC_host:port
}

[domain_realm]
.domain = host_name

クライアントsqlnet.oraファイルの設定:

NAMES.DIRECTORY_PATH= (TNSNAMES)
NAMES.DEFAULT_DOMAIN = default_domain
trace_level_server=16
trace_level_client=16
trace_file_client=client_prefix
trace_directory_client=directory_path
trace_unique_client=true
trace_level_okinit=16
SQLNET.KERBEROS5_CONF=krb5.conf_path
SQLNET.KERBEROS5_CONF_MIT=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=server_principal
SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5)
SQLNET.KERBEROS5_CC_NAME=CC_filename_path
# SQLNET.KERBEROS5_CC_NAME=OSMSFT://
trace_level_okinit=16

サーバー・パラメータの構成

Oracle Databaseサーバーのsqlnet.oraファイルの設定:

NAMES.DIRECTORY_PATH= (TNSNAMES)
NAMES.DEFAULT_DOMAIN = default_domain
trace_level_server=16
trace_level_client=16
trace_file_client=file_name_prefix
trace_directory_client=directory_path
trace_unique_client=true
SQLNET.KERBEROS5_CONF=krb5.conf_path
SQLNET.KERBEROS5_KEYTAB=keytab_file_path
SQLNET.KERBEROS5_CONF_MIT=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=server_principal
SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5)
SQLNET.KERBEROS5_CC_NAME=CC_file_name_path
# SQLNET.KERBEROS5_CC_NAME=OSMSFT://

25.2 Kerberos認証の有効化

Oracle Databaseに対してKerberos認証を有効にするには、これをインストールしてから一連の構成ステップに従います。

25.2.1 ステップ1: Kerberosのインストール

Kerberosバージョン5をインストールしてください。

Kerberosの構築とインストールに関するノートの供給元配布資料に詳細が記載されています。Kerberosのインストール後、POWERシステム(64ビット)でIBM AIXを使用する場合、Kerboros 5が推奨の認証方式であることを確認する必要があります。

  1. 認証サーバーとして動作するシステムにKerberosをインストールします。

    ノート:

    32ビット・バージョンのOracle Databaseからアップグレードした後に初めてKerberos認証アダプタを使用すると、エラー・メッセージ「ORA-01637: パケット受信に失敗しました。」が表示されます。

    回避策: 64ビット・バージョンのデータベースにアップグレードした後、Kerberos外部認証方式を使用する前に、コンピュータ上の/usr/tmp/oracle_service_name.RCという名前のファイルを確認して削除します。

  2. POWERシステム(64ビット)上のIBM AIXの場合、認証方式をチェックします。

    たとえば:

    /usr/bin/lsauthent
    

    次のような出力が表示されます。

    Standard Aix
    
  3. Kerberos 5を推奨方式として構成します。

    たとえば:

    /usr/bin/chauthent -k5 -std
    

    このコマンドは、Kerberos 5を推奨方式(k5)、標準AIXを2番目の方式(std)として設定します。

  4. Kerberos 5が現在推奨方式になっていることを確認するには、新しい構成をチェックします。
    /usr/bin/lsauthent
    
    Kerberos 5
    Standard Aix

25.2.2 ステップ2: Oracleデータベース・サーバーに対するサービス・プリンシパルの構成

Kerberosを使用して自己を認証するクライアントの識別情報をOracleデータベース・サーバーで検証できるようにするには、Oracle Databaseのサービス・プリンシパルを作成する必要があります。

  1. 次の形式を使用して、サーバー・プリンシパルの名前を決定します。
    kservice/kinstance@REALM
    

    サービス・プリンシパル内の各フィールドで次の値を指定します。

    サービス・プリンシパル・フィールド 説明

    kservice

    Oracleサービスを表す、大/小文字を区別する文字列。データベース・サービス名と同じでもかまいません。

    kinstance

    通常は、Oracle Databaseが実行されているシステムの完全修飾DNS名。

    REALM

    サービス・プリンシパルが登録されているKerberosレルムの名前。REALMは常に大文字である必要があり、通常はDNSドメイン名です。

    この項のユーティリティ名は実行可能プログラムです。ただし、Kerberosユーザー名krbuserおよびレルムEXAMPLE.COMは単なる例です。

    たとえば、kserviceoracle、Oracle Databaseが実行されているシステムの完全修飾名をdbserver.example.com、レルムをEXAMPLE.COMとします。この場合、プリンシパル名は次のようになります。

    oracle/dbserver.example.com@EXAMPLE.COM
    
  2. kadmin.localを実行してサーバー・プリンシパルを作成します。UNIXでは、このコマンドをrootユーザーとして実行します。
    サービス・プリンシパルは、Kerberos資格証明のセットが割り当てられているクライアントまたはサーバーを一意に識別する文字列です。通常、これにはkservice/kinstance@REALMという3つの部分が含まれます。ユーザーの場合、kserviceはユーザー名です。次の構文を使用してプリンシパルを作成します。
    # cd /kerberos-install-directory/sbin
    # ./kadmin.local
    

    たとえば、oracle/dbserver.example.com@EXAMPLE.COMという名前のプリンシパルを、Kerberosが認識するサーバー・プリンシパルのリストに追加するには、次のように入力します。

    kadmin.local:addprinc -randkey oracle/dbserver.example.com@EXAMPLE.COM

25.2.3 ステップ3: Kerberosからのサービス・キー表の抽出

次に、Kerberosからサービス・キー表を抽出し、Oracleデータベース・サーバー/Kerberosクライアント・システムにコピーします。

たとえば、dbserver.example.comのサービス・キー表を抽出するには、次の手順を実行します。
  1. ドメイン管理権限があることを確認します。
  2. 次のように入力してサービス・キー表を抽出します。
    kadmin.local:  ktadd -k /tmp/keytab oracle/dbserver.example.com
    Entry for principal oracle/dbserver.example.com with kvno 2, 
    encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:
    WRFILE:/tmp/keytab
    
    kadmin.local:  exit
    
  3. サービス・キー表をチェックするには、次のコマンドを入力します。
    oklist -k -t /tmp/keytab
    
  4. サービス・キー表を抽出した後、古いエントリに加えて新しいエントリが表にあることを確認します。

    新しいエントリがない場合、またはさらに追加する必要がある場合は、kadmin.localを使用して追加します。

    ktaddを使用するときにレルムを入力しない場合、Kerberosサーバーのデフォルトのレルムが使用されます。kadmin.localは、localhostで実行されているKerberosサーバーに接続されます。

  5. Kerberosサービス・キー表がKerberosクライアントと同じシステム上にある場合は、移動できます。Kerberosサービス・キー表がKerberosクライアントと異なるシステム上にある場合は、FTPなどのプログラムを使用してファイルを転送する必要があります。FTPを使用する場合は、ファイルをバイナリ・モードで転送します。

    次の例は、UNIXプラットフォームでサービス・キー表を移動する方法を示しています。

    # mv /tmp/keytab /etc/v5srvtab
    

    サービス・ファイルのデフォルト名は、/etc/v5srvtabです。

  6. Oracleデータベース・サーバー実行可能ファイルの所有者がサービス・キー表(前の例の/etc/v5srvtab)を読み取ることができることを確認します。

    そのためには、ファイル所有者をOracleユーザーに設定するか、またはファイルをOracleが属するグループに対して読取り可能にします。

    ファイルをすべてのユーザーに対して読取り可能にしないでください。そのことによってセキュリティ侵害が発生する場合があります。

25.2.4 ステップ4: Oracleデータベース・サーバーとOracleクライアントのインストール

Kerberosからサービス・キー表を抽出した後、Oracleデータベース・サーバーおよびOracleクライアントをインストールします。

  • Oracleデータベース・サーバーおよびクライアント・ソフトウェアのインストールの詳細は、Oracle Databaseオペレーティング・システムに固有のインストール・ドキュメントを参照してください。

25.2.5 ステップ5: Oracle Net ServicesとOracle Databaseの構成

Oracleデータベース・サーバーとクライアントのインストール後、サーバーとクライアントでOracle Net Servicesを構成できます。

  • Oracleデータベース・サーバーおよびクライアントでのOracle Net Servicesの構成の詳細は、次のドキュメントを参照してください。

25.2.6 ステップ6: Kerberos認証の構成

Oracleデータベース・サーバーおよびクライアントのsqlnet.oraファイルで必須パラメータを設定する必要があります。

ノート:

sqlnet.oraファイル内の設定は、すべてのプラガブル・データベース(PDB)に適用されます。ただし、これは、Kerberosを使用する場合にすべてのPDBを1つのKDCで認証する必要があるという意味ではありません。sqlnet.oraファイル内およびKerberos構成ファイル内の設定では、複数のKDCをサポートできます。

25.2.6.1 ステップ6A: クライアントとデータベース・サーバーでのKerberosの構成

最初に、クライアントとデータベース・サーバーでKerberos認証サービス・パラメータを構成する必要があります。

  1. Oracleデータベースが存在するサーバーにログインします。
  2. 少なくとも、次のsqlnet.oraパラメータをこれらの値に変更します。
    SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5)
    SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=kservice

    詳細は、次のとおりです。

    • SQLNET.AUTHENTICATION_SERVICESは、OracleデータベースでKerberosを使用することを指定します。Kerberosクロスレルム認証はKERBEROS5またはKERKBEROS5PREアダプタによる制約委任の使用ではサポートされないということに注意してください。
    • SQLNET.AUTHENTICATION_KERBEROS5_SERVICEは、Kerberosのサービス・チケットを取得するためにOracle Databaseが使用するサービスの名前を定義します。サービス・チケットは、事前定義された期間、特定のサービスまたはサーバーに対してクライアントを認証するために使用する信頼できる情報です。初期チケットを使用してKDCから取得されます。このフィールドに値を入力すると、他のフィールドに入力できるようになります。
  3. 必要に応じて、次の追加のKerberosパラメータを変更します。
    SQLNET.KERBEROS5_CC_NAME=path_to_Kerberos_credentials_cache_file
    SQLNET.KERBEROS5_CLOCKSKEW=time_in_seconds
    SQLNET.KERBEROS5_CONF=path_to_Kerberos_configuration_file_with_realm
    SQLNET.KERBEROS5_CONF_LOCATION=path_to_Kerberos_configuration_file
    SQLNET.KERBEROS5_KEYTAB=Kerberos_principal_secret_path
    SQLNET.KERBEROS5_REALMS=path_to_Kerberos_realm_translation_file
    SQLNET.KERBEROS5_REPLAY_CACHE=OS_MEMORY

    詳細は、次のとおりです。

    • SQLNET.KERBEROS5_CC_NAMEは、Kerberos資格証明キャッシュ・ファイルへの完全パスを指定します。
    • SQLNET.KERBEROS5_CLOCKSKEWは、Kerberos資格証明が期限切れとみなされるまでの経過時間(秒)を指定します。デフォルトは、300です。
    • SQLNET.KERBEROS5_CONFは、デフォルトのKey Distribution Center (KDC)のレルムが含まれ、レルムがKDCホストにマップされているKerberos構成ファイルへのパス名を指定します。
    • SQLNET.KERBEROS5_CONF_LOCATIONは、Kerberos構成ファイルのディレクトリを指定します。また、このパラメータは、そのファイルがクライアントではなくシステムによって作成されることも指定します。
    • SQLNET.KERBEROS5_KEYTABは、Kerberosプリンシパルまたはシークレット、キーを抽出して着信認証情報を復号化するキー・マッピング・ファイルへのパス名を指定します。デフォルト・パスは次のとおりです。
      • LinuxおよびUNIX: /etc/v5srvtab
      • Microsoft Windows: c:\krb5\v5srvtab
    • SQLNET.KERBEROS5_REALMSは、ホスト名またはドメイン名がレルムにマップされているKerberosレルム変換ファイルへの完全パス名を指定します。
    • SQLNET.KERBEROS5_REPLAY_CACHEは、リプレイ・キャッシュがサーバーのオペレーティング・システム管理対象メモリーに格納されることと、ファイルベースのリプレイ・キャッシュが使用されないことを指定します。
25.2.6.2 ステップ6B: 初期化パラメータの設定

次に、OS_AUTHENT_PREFIX初期化パラメータを設定します。

  1. init.oraファイルを探します。

    デフォルトでは、init.oraファイルは、LinuxおよびUNIXシステムの場合はORACLE_HOME/dbsディレクトリ(または同じデータ・ファイルの場所)、Windowsの場合はORACLE_HOME\databaseディレクトリにあります。

  2. init.oraファイルで、init.ora初期化パラメータ・ファイルのOS_AUTHENT_PREFIXの値をnullに設定します。

    たとえば:

    OS_AUTHENT_PREFIX=""
    

    Kerberosユーザー名は長くてもかまわないためこの値をnullに設定しますが、Oracleユーザー名は30バイトまでに制限されています。このパラメータをnullに設定すると、OPS$のデフォルト値が上書きされます。

ノート:

30バイトを超えるKerberosユーザー名を持つ外部認証データベース・ユーザーを作成できます。

25.2.6.3 ステップ6C: sqlnet.oraパラメータの設定(オプション)

セキュリティを強化するために、必須パラメータに加えて、オプションのsqlnet.oraパラメータを設定できます。

  • オプションで、クライアントおよびOracleデータベース・サーバーの両方に、次の表に示すパラメータを設定します。

表25-2 Kerberos固有のsqlnet.oraパラメータ

パラメータ 説明

SQLNET.KERBEROS5_CC_NAME=pathname_to_credentials_cache_file|OS_MEMORY

Kerberos資格証明キャッシュ(CC)ファイルへの完全パス名を指定します。このパラメータを使用して、Kerberosによって戻される資格証明を暗号化形式で格納するために複数のプリンシパルを構成できます。デフォルト値は、オペレーティング・システムによって異なります。UNIXでは、/tmp/krb5cc_useridです。

OS_MEMORYオプションを使用すると、OS管理メモリーの資格証明キャッシュが資格証明キャッシュ・ファイルに使用されるように指定されます。このオプションは、すべてのプラットフォームでサポートされます。

SQLNET.KERBEROS5_CC_NAMEの値は、次の形式を使用して指定できます。

  • SQLNET.KERBEROS5_CC_NAME=complete_path_to_cc_file

    たとえば:

    SQLNET.KERBEROS5_CC_NAME=/tmp/kcache

    SQLNET.KERBEROS5_CC_NAME=D:\tmp\kcache

  • SQLNET.KERBEROS5_CC_NAME=FILE:complete_path_to_cc_file

    たとえば:

    SQLNET.KERBEROS5_CC_NAME=FILE:/tmp/kcache

  • SQLNET.KERBEROS5_CC_NAME=OSMSFT://

    Windowsを実行し、Microsoft KDCを使用している場合は、この値を使用します。

このパラメータはKRB5CCNAME環境変数を使用して設定することもできますが、sqlnet.oraファイルで設定する値は、KRB5CCNAMEで設定する値よりも優先されます。

たとえば:

SQLNET.KERBEROS5_CC_NAME=/usr/tmp/krbcache

SQLNET.KERBEROS5_CLOCKSKEW=number_of_seconds_accepted_as_network_delay

このパラメータは、Kerberos資格証明を期限切れとみなすまでの秒数を指定します。これは、資格証明がクライアントまたはデータベース・サーバーによって実際に受け取られるときに使用されます。また、再生攻撃を受けないように資格証明を格納する必要があるかどうかをOracleデータベース・サーバーが判断するときにも、使用されます。デフォルトは300秒です。

たとえば:

SQLNET.KERBEROS5_CLOCKSKEW=1200

SQLNET.KERBEROS5_CONF=pathname_to_Kerberos_configuration_file|AUTO_DISCOVER

このパラメータは、Kerberos構成ファイルへの完全パス名を指定します。構成ファイルには、デフォルトのKDC (key distribution center)のレルムが含まれており、レルムをKDCホストにマッピングします。デフォルトは、オペレーティング・システムによって異なります。UNIXでは、/krb5/krb.confです。

構成ファイルのかわりにAUTO_DISCOVERオプションを使用すると、KerberosクライアントでKDCを自動検出できます。

たとえば:

SQLNET.KERBEROS5_CONF=/krb/krb.conf
SQLNET.KERBEROS5_CONF=AUTO_DISCOVER

SQLNET.KERBEROS5_CONF_LOCATION=path_to_Kerberos_configuration_directory

このパラメータは、Kerberos構成ファイルがシステムによって作成され、クライアントで指定する必要がないことを示します。構成ファイルは、DNS参照を使用してデフォルトのKDCのレルムを取得し、レルムをKDCホストにマッピングします。

たとえば:

SQLNET.KERBEROS5_CONF_LOCATION=/krb

SQLNET.KERBEROS5_KEYTAB=path_to_Kerberos_principal/key_table

このパラメータは、Kerberosプリンシパル/秘密キー・マッピング・ファイルへの完全パス名を指定します。これは、Oracleデータベース・サーバーがキーを抽出し、クライアントから受信する認証情報を複号化するために使用されます。デフォルトは、オペレーティング・システムによって異なります。UNIXでは、/etc/v5srvtabです。

たとえば:

SQLNET.KERBEROS5_KEYTAB=/etc/v5srvtab

SQLNET.KERBEROS5_REALMS=path_to_Kerberos_realm_translation_file

このパラメータは、Kerberosレルム変換ファイルへの完全パス名を指定します。変換ファイルを使用して、ホスト名またはドメイン名をレルムにマッピングします。デフォルトは、オペレーティング・システムによって異なります。UNIXでは、/etc/krb.realmsです。

たとえば:

SQLNET.KERBEROS5_REALMS=/krb5/krb.realms
25.2.6.4 ステップ6D: TCPまたはUDPを使用するためのKerberosの構成(オプション)

デフォルトでは、Oracle DatabaseはKerberos接続にTCPを使用します。

  • OracleデータベースでTCPまたはUDPのどちらを使用するかを制御するには、krb5.confファイルのlibdefaultsセクションにあるforcetcpパラメータを次のように設定します。
    • TCP接続を使用するには:
      forcetcp = 1
    • UDP接続を使用するには:
      forcetcp = 0

25.2.7 ステップ7: Kerberosユーザーの作成

管理ツールがインストールされているKerberos認証サーバーで、Kerberosユーザーを作成する必要があります。

レルムはすでに存在している必要があります。

ノート:

この項のユーティリティ名は実行可能プログラムです。ただし、Kerberosユーザー名krbuserおよびレルムEXAMPLE.COMは単なる例です。システムによって異なる場合があります。

  • /krb5/admin/kadmin.localをrootとして実行して、krbuserなどの新しいKerberosユーザーを作成します。

    たとえば、UNIX固有のKerberosユーザーを作成するとします。

    # /krb5/admin/kadmin.local
    kadmin.local: addprinc krbuser
    Enter password for principal: "krbuser@example.com": (password does not display)
    Re-enter password for principal: "krbuser@example.com": (password does not display)
    kadmin.local: exit

25.2.8 ステップ8: 外部認証されたOracleユーザーの作成

次に、外部認証されるOracleユーザーを作成します。

  1. CREATE USER権限があるユーザーとしてPDBにログインします。
    sqlplus sec_admin@pdb_name
    Enter password: password
    

    CDB内の使用可能なPDBを確認するには、CDBルート・コンテナにログインし、DBA_PDBSデータ・ディクショナリ・ビューのPDB_NAME列を問い合せます。現在のコンテナを確認するには、show con_nameコマンドを実行します。

  2. OS_AUTHENT_PREFIXがnull ("")に設定されていることを確認します。
  3. Kerberosユーザーに対応するOracle Databaseユーザー・アカウントを作成します。Oracleユーザー名を大文字で入力して、その名前を二重引用符で囲みます。

    たとえば:

    CREATE USER krbuser IDENTIFIED EXTERNALLY AS 'krbuser@example.com'; 
    GRANT CREATE SESSION TO krbuser; 
    

ノート:

データベース管理者は、複数のデータベース・ユーザーが外部から同じKerberosプリンシパル名で識別されていないことを確認する必要があります。

25.2.9 ステップ9: Kerberos/Oracleユーザーの初期チケットの取得

データベースに接続するには、Key Distribution Center (KDC)に初期チケットを要求する必要があります。

初期チケットまたはチケット認可チケット(TGT)によって、ユーザーが追加のサービス・チケットを要求する権利を持つものとして識別されます。初期チケットがないと、他のチケットは取得できない。初期チケットは、okinitプログラムを実行し、パスワードを指定することで取得される。
複数のKerberosプリンシパルがこのクライアントを認証に使用する場合、各Kerberosプリンシパルは初期チケットを取得し、それを独自のディレクトリ内の資格証明キャッシュに格納する必要があります。追加のKerberosユーザーおよび資格証明キャッシュの場所(sqlnet.oraファイルで記述されているもの以外)は、接続文字列またはtnsnames.oraのいずれかで指定できます。
  • 初期チケットを要求するには、クライアントで次のコマンドを実行します。
    % okinit username
    

    データベース・リンク間で使用可能な資格証明を有効にするには、-fオプションを含めて、プロンプトが表示された場合はKerberosパスワードを指定します。

    % services/okinit -f
    Password for krbuser@EXAMPLE.COM:(password does not display)

    okinit: Cannot contact any KDC for requested realmなどのエラーが発生した場合は、kerberos 5エントリがあるかどうか/etc/servicesファイルを確認します。たとえば:

    kerberos        88/tcp          kerberos5 krb5  # Kerberos v5
    kerberos        88/udp          kerberos5 krb5  # Kerberos v5

25.3 Kerberos認証アダプタのユーティリティ

Oracle Kerberos認証アダプタのユーティリティは、Oracle Kerberos認証サポートがインストールされたOracleクライアントで使用するように設計されています。

25.3.1 初期チケットを取得するためのokinitユーティリティ・オプション

okinitユーティリティでは、Kerberosチケットを取得し、キャッシュします。

通常は、このユーティリティを使用してチケット認可チケットを取得し、ユーザーが入力したパスワードを使用してkey distribution center (KDC)からの資格証明を復号化します。チケット認可チケットは、ユーザーの資格証明キャッシュに格納されます。

次の表に、okinitで使用できるオプションを示します。表に示されている機能を使用するには、sqlnet.oraSQLNET.KERBEROS5_CONF_MITパラメータをTRUEに設定する必要があります。(SQLNET.KERBEROS5_CONF_MITは非推奨ですが、okinitの下位互換性のため現在も維持されていることに注意してください。)

表25-3 okinitユーティリティのオプション

オプション 説明

-f | -F

転送可能なチケットまたは転送不可のチケットを要求します。データベース・リンクをたどる場合は、このオプションが必要です。

-l lifetime

チケット認可チケットおよびすべての後続チケットの存続期間を指定します。デフォルトで、チケット認可チケットは8時間有効ですが、存続期間がより短いまたは長い資格証明を指定することもできます。KDCはこのオプションを無視するか、各サイトで指定できる時間を制限することができます。次の例に示すように、存続期間の値は、w (週)、d (日)、h (時間)、m (分)またはs (秒)で修飾された数字で構成される文字列です。

okinit -l 2wld6h20m30s

この例では、存続期間が2週間と1日6時間20分30秒のチケット認可チケットが要求されます。

-s start_time

チケットが有効になるまでの遅延の期間を指定します。チケットは、無効なフラグ・セットを使用して発行されます。

-r renewable_life

合計存続期間がrenewable_lifeの更新可能なチケットを要求します

-p | -P

プロキシ可能なチケットまたはプロキシ不可のチケットを要求します

-a

ホストのローカル・アドレスに制限されているチケットを要求します

-A

アドレスによって制限されていないチケットを要求します

-E

プリンシパル名を企業名として扱います

-v

キャッシュ内のチケット認可チケットをKDCに渡して検証するよう要求します。チケットが要求された期間内のものであれば、キャッシュは検証済のチケットで置き換えられます。

-R

チケット認可チケットの更新を要求します

-k [-t keytab_file]

ローカル・ホストのキー表内のキーから取得されたチケットを要求します

-n

匿名処理を要求します

-C

プリンシパル名の正規化を要求し、要求されたものとは異なるクライアント・プリンシパルでKDCが応答できるようにします

-c cache_name

キャッシュの名前をキャッシュの場所として指定します。KERBEROS5_CC_NAME sqlnet.oraパラメータを使用してファイルベースのキャッシュが指定されている場合、暗号化キャッシュ・ファイルを指定できます。sqlnet.oraファイルでSQLNET.KERBEROS5_CC_NAMEパラメータを設定して、代替資格証明キャッシュを指定することもできます。

UNIXでは、デフォルトは/tmp/krb5cc_uidです。

-I input_cache

すでにチケットが含まれている資格証明キャッシュの名前を指定します。そのチケットを取得する際、チケットを取得した方法に関する情報がキャッシュ内に格納されていれば、同じ情報を使用して、新しい資格証明を取得する方法に影響を及ぼします。

-T armor_cache

KDCでサポートされている場合、このキャッシュは要求を保護するために使用され、オフラインの辞書攻撃を防ぎ、追加で事前認証メカニズムを使用することを可能にします。

-X attribute[=value

事前認証属性と値を指定します。次のいずれかの値を指定します。
  • X509_user_identity=valueは、ユーザーのX509識別情報を確認する場所を指定します

  • X509_anchors=valueは、信頼できるX509アンカー情報を確認する場所を指定します

  • flag_RSA_PROTOCOL[=yes]は、デフォルトのDiffie-Hellmanプロトコルではなく、RSAの使用を指定します

-?

コマンドライン・オプションのリストを表示します。

25.3.2 資格証明を表示するためのoklistユーティリティ・オプション

oklistユーティリティは保持しているチケットのリストを表示します。

次の表に、oklistの使用可能なオプションを示します。表に示されている機能を使用するには、sqlnet.oraSQLNET.KERBEROS5_CONF_MITパラメータをTRUEに設定する必要があります。(SQLNET.KERBEROS5_CONF_MITは非推奨ですが、oklistの下位互換性のため現在も維持されていることに注意してください。)

表25-4 oklistユーティリティのオプション

オプション 説明

-f

資格証明のフラグを表示します。関連するフラグは次のとおりです。

  • I: 資格証明がチケット認可チケットです。

  • F: 資格証明が転送可能です。

  • f: 資格証明が転送済です。

-c

代替資格証明キャッシュを指定します。代替資格証明キャッシュ(暗号化キャッシュ・ファイルを含む)は、sqlnet.oraファイルでSQLNET.KERBEROS5_CC_NAMEパラメータを使用して指定することもできます。

UNIXでは、デフォルトは/tmp/krb5cc_uidです。

-k

UNIX上のサービス表のエントリ(デフォルト/etc/v5srvtab)をリストします。代替サービス表は、sqlnet.oraファイルでSQLNET.KERBEROS5_KEYTABパラメータを使用して指定することもできます。

-e

資格証明キャッシュ内の各資格証明のセッション・キーとチケットの暗号化タイプ、またはキー表ファイル内の各キーの暗号化タイプを表示します。

-l

キャッシュ・コレクションが使用可能な場合、コレクション内に存在するキャッシュを要約した表を表示します。

-A

キャッシュ・コレクションが使用可能な場合、コレクション内のすべてのキャッシュの内容を表示します。

-s

出力を生成せずにユーティリティを実行します。キャッシュが読取り不可または期限切れの場合、ユーティリティはステータス1で終了します。それ以外の場合はステータス0です

-a

資格証明内のアドレスのリストを表示します

-n

逆引きのアドレスのかわりに数字のアドレスを表示します

-C

klistによって検出された場合、資格証明のキャッシュに格納されている構成データをリストします。デフォルトでは、構成データはリストされません。

-t

キー表ファイル内の各キー表入力の時間入力のタイムスタンプを表示します

-K

キー表ファイル内の各キー表入力の暗号化キーの値を表示します

-V

Kerberosバージョンを表示して終了します。

フラグ表示オプション(-f)によって、次のような追加情報が表示されます。

% oklist -f
06/09/23 22:32:23 06/10/23 22:32:23 
krbtgt/EXAMPLE.COM@EXAMPLE.COM

25.3.3 キャッシュ・ファイルから資格証明を削除するためのokdstryユーティリティのオプション

okdstry (okdestroy)ユーティリティはキャッシュ・ファイルから資格証明を削除します。

次の表に、okdstryの使用可能なオプションを示します。表に示されている機能を使用するには、sqlnet.oraSQLNET.KERBEROS5_CONF_MITパラメータをTRUEに設定する必要があります。(SQLNET.KERBEROS5_CONF_MITは非推奨ですが、okdstryの下位互換性のため現在も維持されていることに注意してください。)

表25-5 okdstryユーティリティのオプション

オプション 説明

-A

キャッシュ・コレクションが使用可能な場合、コレクション内のキャッシュをすべて破棄します

-q

音なしで実行します。通常、okdstryはユーザーのチケットの破棄に失敗すると、ビープ音で通知します。このフラグによりこの動作が抑制されます。

-c cache_name

KERBEROS5_CC_NAME sqlnet.oraパラメータを使用してファイルベースのキャッシュが指定されている場合、cache_nameを資格証明(チケット)キャッシュ(暗号化キャッシュ・ファイルを含む)の名前および場所として使用します。

UNIXでは、デフォルトは/tmp/krb5cc_uidです。

25.3.4 キー表の作成を自動化するためのokcreateユーティリティのオプション

okcreateユーティリティは、KDCまたはサービス・エンドポイントから、キー表の作成を自動化します。

次の表に、okcreateの使用可能なオプションを示します。

表25-6 キー表の作成を自動化するためのokcreateユーティリティのオプション

オプション 説明

-name service_name

キー表を取得する対象となる、Kerberosを使用するサービスのサービス名を指定します。デフォルトはoracleです。

—hosts path-to_hosts_list

キー表を取得する対象となるホストをカンマ区切りのリストで指定するか、ホストのリストが含まれるテキスト・ファイルへのパスを指定します。デフォルトはnoneです。

—out path_to_output

結果のキー表を格納するための出力パスを指定します。デフォルトはカレント・ディレクトリです。

このディレクトリは、ルート・ユーザーのみがアクセスできるようにします。キー表ファイルは、ネットワークを介してクリアテキストで送信しないでください。

—k

KDCに対して操作を実行する場合に使用します。—sを使用している場合は、このオプションを使用しないでください。

—s

Kerberosを使用するサービスに対して操作を実行する場合に使用します。—kを使用している場合は、このオプションを使用しないでください。

-u KDC_username

KDCのユーザー名を指定します。この設定は、Kerberosを使用するサービス・エンドポイントのみで使用します。

—sを指定し、この設定を省略すると、okcreateのプロンプトは、KDCuser@KDCmachineになります。

-r

Kerberosレルムを指定します

—p

Kerberosプリンシパルを指定します

-q

Kerberos問合せを指定します

—d

KDCデータベース名を指定します

—e

作成された新しいキーに使用するsaltリストを指定します

—m

KDCメイン・パスワードを要求するよう指定します

25.4 Kerberosによって認証されたOracleデータベース・サーバーへの接続

Kerberosの構成後は、ユーザー名やパスワードを使用しないでOracleデータベース・サーバーに接続できます。

  • 次の構文を使用して、ユーザー名やパスワードを入力しないでデータベースに接続します。
    $ sqlplus /@net_service_name
    

    ここで、net_service_nameは、Oracle Net Servicesのサービス名です。たとえば:

    $ sqlplus /@oracle_dbname

25.5 Microsoft Windows Serverドメイン・コントローラKDCとの相互運用性の構成

Oracle DatabaseをMicrosoft Windows Serverドメイン・コントローラのキー配布センター(KDC)と相互作用するように構成できます。

25.5.1 Microsoft Windows Serverドメイン・コントローラKDCとの相互運用性の構成について

Oracle Databaseは、MIT Kerberosに準拠しています。

そのためOracle Databaseは、Microsoft Windows Serverドメイン・コントローラ上のKerberosキー発行センター(KDC)から発行されたチケットとの相互運用が可能です。このプロセスにより、OracleデータベースでのKerberos認証が可能になります。

25.5.2 ステップ1: Microsoft Windows Serverドメイン・コントローラのためのOracle Kerberosクライアントの構成

Microsoft Windows Serverドメイン・コントローラKDCと相互運用するようにOracle Kerberosクライアントを構成できます。

25.5.2.1 ステップ1A: クライアントKerberos構成ファイルの作成

Windows 2008ドメイン・コントローラをKerberos KDCとして参照するKerberosクライアント構成ファイルを構成する必要があります。

  • krb.confおよびkrb5.realmsファイルを作成します。Oracle Databaseに用意されているデフォルトのkrb5.confファイルは、自分のサイトにあわせて変更する必要があります。
    krb5.confファイルは、SQLNET.KERBEROS_CONFパラメータによって示された場所にあります。
    たとえば、Windows 2008ドメイン・コントローラがsales3854.us.example.comという名前のノード上で実行されていることを前提とします。
    • krb.confファイル

      たとえば:

      SALES3854.US.EXAMPLE.COM
      SALES3854.US.EXAMPLE.COM 
      sales3854.us.example.com admin server
      
    • krb5.confファイル

      たとえば:

      [libdefaults]
      default_realm=SALES.US.EXAMPLE.COM
      [realms]
      SALES.US.EXAMPLE.COM= { kdc=sales3854.us.example.com:88 }
      [domain_realm]
      .us.example.com=SALES.US.EXAMPLE.COM
      
    • krb5.realmsファイル

      たとえば:

      us.example.com SALES.US.EXAMPLE.COM
25.5.2.2 ステップ1B: sqlnet.oraファイルでのOracle構成パラメータの指定

Microsoft Windows Serverドメイン・コントローラKey Distribution Center(KDC)と相互運用するようにOracleクライアントを構成するには、クライアントおよびデータベース・サーバーでKerberosの構成用に使用されるものと同じsqlnet.oraファイルのパラメータを使用します。

  • クライアントのsqlnet.oraファイルで次のパラメータを設定します。
    SQLNET.KERBEROS5_CONF=pathname_to_Kerberos_configuration_file
    SQLNET.KERBEROS5_CONF_MIT=TRUE
    SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=Kerberos_service_name
    SQLNET.AUTHENTICATION_SERVICES=(BEQ,KERBEROS5)

    次のことに注意してください。

    • SQLNET.KERBEROS5_CONF_MITパラメータは非推奨となりましたが、okintoklistおよびokdstryユーティリティの下位互換性のため維持されています。

    • Windows Serverオペレーティング・システムはMIT Kerberosバージョン5に基づくセキュリティ・サービスとのみ相互運用するように設計されているため、SQLNET.KERBEROS5_CONF_MITパラメータがTRUEに設定されていることを確認してください。

    • 複数のKerberosプリンシパル・ユーザーを使用する場合は、それらを接続文字列の一部またはtnsnames.oraに指定できます。
25.5.2.3 ステップ1C: tnsnames.oraを使用した追加のKerberosプリンシパルの指定(オプション)

Oracle Databaseクライアントから接続するように追加のKerberosプリンシパル・ユーザーを構成できます。

  • KERBEROS5_CC_NAMEおよびKERBEROS5_PRINCIPAL設定をtnsnames.ora接続文字列に追加します。
    KERBEROS5_CC_NAMEは、追加のKerberosユーザーおよびプリンシパルすべてに必須ですが、KERBEROS5_PRINCIPAL設定はオプションです。KERBEROS5_CC_NAMEにより、複数のプリンシパルがサポートされ、Key Distribution Center (KDC)によって戻される資格証明が暗号化形式で格納されるようになりました。KERBEROS5_PRINCIPALは、sqlnet.oraファイルの他、tnsnames.oraでも指定できます。Oracle Databaseでは、資格証明キャッシュから取得された値に対してKERBEROS5_PRINCIPALがチェックされます。2つの値が一致しない場合、ユーザーは認証されません。
    たとえば:
    krbuser1 = 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostname)(PORT=port_number))
    (CONNECT_DATA=(SERVICE_NAME=db.example.com)) 
    (SECURITY=(KERBEROS5_CC_NAME = /tmp/krbuser1/krb.cc)
              (KERBEROS5_PRINCIPAL = krbprinc1@example.com)))
    krbuser2 = 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostname)(PORT=port_number))
    (CONNECT_DATA=(SERVICE_NAME=db.example.com)) 
    (SECURITY=(KERBEROS5_CC_NAME = /tmp/krbuser2/krb.cc) 
              (KERBEROS5_PRINCIPAL = krbprinc2@example.com)))
25.5.2.4 ステップ1D: リスニング・ポート番号の指定

Microsoft Windows Serverドメイン・コントローラKDCはUDP/TCPポート88でリスニングします。

  • kerberos5のシステム・ファイル・エントリが、UDP/TCPポート88に設定されていることを確認してください。

    UNIX環境では、/etc/servicesファイルの最初のkerberos5エントリが88に設定されていることを確認してください。

25.5.3 ステップ2: OracleクライアントのためのMicrosoft Windows Serverドメイン・コントローラKDCの構成

次に、Oracleクライアントと相互運用するようにWindows Serverドメイン・コントローラKDCを構成します。

関連項目:

Active Directoryでユーザーを作成する方法の詳細は、Microsoft社のドキュメントを参照してください。

25.5.3.1 ステップ2A: ユーザー・アカウントの作成

Microsoft Windows Serverドメイン・コントローラのKDCにユーザー・アカウントを作成する必要があります。

  • Microsoft Windows Serverドメイン・コントローラで、Microsoft Active DirectoryにOracleクライアントの新規ユーザー・アカウントを作成します。

25.5.3.2 ステップ2B: Oracleデータベースのプリンシパル・ユーザー・アカウントおよびキー表の作成

ユーザー・アカウントの作成後、Oracle Databaseプリンシパル・ユーザー・アカウントを作成します。

Windows Serverドメイン・コントローラでこのアカウントを作成した後、okcreateユーティリティを使用して、これをプリンシパル・キー表に登録する必要があります。このユーティリティを同じKDCに対して実行して、すべてのサービス・キー表を作成できます(それらを個々に作成せずに済みます)。または、KDCに接続するサービス・エンドポイントからokcreateを実行し、必要なコマンドを実行してから、結果のキー表をサービス・エンドポイントにコピーすることもできます。
  1. Microsoft Active DirectoryでOracleデータベースの新規ユーザー・アカウントを作成します。

    たとえば、Oracleデータベースがホストsales3854.us.example.comで実行されている場合は、Active Directoryを使用してユーザー名がsales3854.us.example.comのユーザーを作成します。

    Active Directoryでは、ユーザーをhost/hostname.dns.com (oracle/sales3854.us.example.comなど)として作成しないでください。Microsoft社のKDCは、MIT KDCのようにマルチパートの名前をサポートしていません。MIT KDCは、すべてのプリンシパルをユーザー名として扱うため、マルチパートの名前をサービス・プリンシパルに使用できます。ただし、Microsoft社のKDCでは使用できません。

  2. okcreateコマンドを実行して、このユーザー・アカウントを使用するキー表を作成します。構文は次のとおりです。
    okcreate (-s [-u KDCuser@KDCmachine] | -k) 
      [-name service_name] [-hosts path_to_host_list] 
      [-out path_to_output] [-r realm] [-p principal] 
      [-q query] [-d dbname] [-e enc:salt...] [-m] 
      [-x db_args]
    

    たとえば:

    okcreate -s -u kdcuser1@kdcmachine1 -name oracle 
      -hosts sales3854.us.example.com 
      -out /OSsecured/keytablocation 
  3. 抽出したkeytabファイルをOracleデータベースがインストールされているホスト・コンピュータにコピーします。

    たとえば、前のステップで作成したkeytab/krb5/v5svrtabにコピーできます。

25.5.4 ステップ3: Microsoft Windows Serverドメイン・コントローラKDCのためのOracleデータベースの構成

Oracleデータベースがインストールされているホスト・コンピュータでドメイン・コントローラに対してOracleデータベースを構成する必要があります。

25.5.4.1 ステップ3A: sqlnet.oraファイルでの構成パラメータの設定

最初に、データベースの構成パラメータを設定する必要があります。

  • データベース・サーバーのsqlnet.oraファイルで、次のパラメータの値を指定します。

    SQLNET.KERBEROS5_CONF=pathname_to_Kerberos_configuration_file
    SQLNET.KERBEROS5_KEYTAB=pathname_to_Kerberos_principal/key_table
    SQLNET.KERBEROS5_CONF_MIT=TRUE
    SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=Kerberos_service_name
    SQLNET.AUTHENTICATION_SERVICES=(BEQ,KERBEROS5)

ノート:

  • SQLNET.KERBEROS5_CONF_MITパラメータは非推奨となりましたが、okintoklistおよびokdstryユーティリティの下位互換性のため維持されています。

  • Windows Serverオペレーティング・システムはMIT Kerberosバージョン5に基づくセキュリティ・サービスとのみ相互運用するように設計されているため、SQLNET.KERBEROS5_CONF_MITパラメータがTRUEに設定されていることを確認してください。

  • sqlnet.oraファイル内の設定はすべてのPDBに適用されるということに注意してください。ただし、Kerberosを使用する場合は、すべてのPDBを1つのKDCで認証する必要があるという意味ではありません。sqlnet.oraファイルおよびKerberos構成ファイルの設定では複数のKDCをサポートできます。

25.5.4.2 ステップ3B: 外部認証されたOracleユーザーの作成

構成パラメータの設定後、外部認証されるOracleユーザーを作成します。

関連項目:

sqlnet.oraファイル・パラメータの設定の詳細は、「ステップ6: Kerberos認証の構成」を参照してください。

25.5.5 ステップ4: Kerberos/Oracleユーザーの初期チケットの取得

クライアントがデータベースに接続するには、初期チケットを要求する必要があります。

  1. 初期チケットを要求するには、ステップ9: Kerberos/Oracleユーザーの初期チケットの取得のタスク情報に従います。
    ユーザーは、Windows固有のキャッシュを使用する場合、okinitコマンドを使用して初期チケットを明示的に要求する必要はありません。

    OracleクライアントがMicrosoft Windows Server以上で実行されている場合、KerberosチケットはユーザーがWindowsにログインしたときに自動的に取得されます。

    システムのKerberosチケット情報を表示するために使用できるKerbtray.exeユーティリティの詳細は、Microsoft社のドキュメントを参照してください。

  2. tnsnames.oraに追加したKerberosプリンシパル・ユーザーごとに、クライアントでokinitコマンドを実行します。
    たとえば:
    okinit krbprinc1@example.com

25.6 Kerberos認証フォールバック動作の構成

Kerberos認証の障害に備え、フォールバック動作(パスワードベースの認証)を構成できます。

OracleクライアントでKerberos認証を構成してOracleデータベースを認証した後に、パスワード・ベースの認証にフォールバックする必要が発生する場合があります。たとえば、ユーザー・データベースのリンクをOracleデータベースに固定している場合などです。
  • Kerberos認証からパスワード・ベースの認証へのフォールバックを有効にするには、クライアントとサーバーの両方でsqlnet.ora内のSQLNET.FALLBACK_AUTHENTICATIONパラメータをTRUEに設定します。
    このパラメータのデフォルト値はFALSEです。これは、デフォルトでは、Kerberos認証に失敗すると接続が失敗することを意味します。

25.7 Oracle Kerberos認証の構成のトラブルシューティング

一般的なKerberos構成の問題に対するガイドラインを示します。

25.7.1 一般的なKerberos構成の問題

一般的なKerberos構成の問題に対するガイドラインを示します。

一般的な問題は次のとおりです。

  • okinitを使用してチケット認証チケットを取得できない場合:

    • krb.confファイルを調べて、デフォルトのレルムが正しいことを確認します。

    • レルムに対して指定されているホスト上でKDCが実行されていることを確認します。

    • KDCにユーザー・プリンシパルのエントリがあること、およびパスワードが一致していることを確認します。

    • krb.confファイルおよびkrb.realmsファイルがOracleによって読取り可能であることを確認します。

    • TNS_ADMIN環境変数が、sqlnet.ora構成ファイルを含むディレクトリを指していることを確認します。

  • 初期チケットはあるが接続できない場合は、次を試してください。

    • 接続を試みた後で、サービス・チケットを確認します。

    • データベース・サーバー側のsqlnet.oraファイルに、Kerberosによって認識されるサービスに対応するサービス名があることを確認します。

    • 関連するすべてのシステムでクロックのずれが数分以内に設定されていることを確認するか、sqlnet.oraファイルでSQLNET.KERBEROS5_CLOCKSKEWパラメータを変更します。

  • サービス・チケットはあるが接続できない場合:

    • クライアントおよびデータベース・サーバー上でクロックを確認します。

    • v5srvtabファイルが正しい場所にあり、Oracleによって読取り可能であることを確認します。sqlnet.oraパラメータを忘れずに設定してください。

    • データベース・サーバー側のsqlnet.oraファイルで指定されているサービスに対してv5srvtabファイルが生成されていることを確認します。

  • まったく問題がないように見えていても、別の問合せを発行したときに失敗する場合は、次の事項を試してください。

    • 初期チケットが転送可能であることを確認します。okinitユーティリティを実行して初期チケットを取得している必要があります。

    • 資格証明の有効期限を確認します。資格証明の有効期限が切れている場合は、接続をクローズし、okinitを実行して新しい初期チケットを取得します。

25.7.2 Kerberos構成のORA-12631エラー

ORA-12631: ユーザー名の検索に失敗しました。エラーは、Kerberos認証に不正なプリンシパルまたは間違った形式のプリンシパルが使用されていることが原因で発生する可能性があります

出力で、Wrong principal in requestsqlnetサーバー・トレース・ファイルを確認します。

この問題を修正するには、krb5.confファイルを編集して、[domain_realm]の設定を確認します。これらの設定では大文字と小文字が区別されるため、domain_realm名が正しいとしても、小文字の場合は正しく解析されません。この設定が大文字になっていることを確認します。たとえば:

[domain_realm]
.country.<DOMAIN_NAME> = SECWIN.LOCAL
country.<DOMAIN_NAME> = SECWIN.LOCAL

25.7.3 Kerberos構成のORA-28575エラー

ORA-28575: 外部プロシージャ・エージェントへのRPC接続をオープンできません。エラーは、クライアントがリモートのときにEXTPROCプロセスが生成されると発生することがあります。

外部プロシージャ・コールにはKerberos認証は不要です。この問題を修正するには、sqlnet.oraファイルのKERBEROS5およびKERBEROS5PREパラメータの前にBEQを追加します。

25.7.4 Kerberos構成のORA-01017エラー

ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。エラーは、okinitが失敗し、SQL*Plus接続に有効なチケットがない場合に発生する可能性があります。

okinitトレース・ファイルに、次のエラーが示されます。

nauk5l_sendto_kdc: entry
snauk5l_sendto_kdc: exit
snauk5l_sendto_kdc: exit
nauk5la_get_in_tkt: Returning 25: Additional pre-authentication required
.
snauk5l_sendto_kdc: exit
snauk5l_sendto_kdc: exit
nauk5la_get_in_tkt: Returning 24: Preauthentication failed
.
nauk5la_get_in_tkt: exit
nauk5zi_kinit: Getting TGT failed: Preauthentication failed
.
nauk5fq_free_principal: entry
nauk5fq_free_principal: exit
nauk5fq_free_principal: entry
nauk5fq_free_principal: exit
nauk5zi_kinit: Returning 24: Preauthentication failed
.
nauk5zi_kinit: exit

この問題を解決するには:

  1. krb5.confファイルで、default_tkt_enctypesパラメータを設定します。これにより、クライアントからリクエストされる暗号化のタイプを制御できます。たとえば:
    default_tgs_enctypes = aes256-cts-hmac-sha1-96
    default_tkt_enctypes = aes256-cts-hmac-sha1-96
  2. 次のオプションを指定して、okinitをテストします。
    okinit user_name

    DES暗号化アルゴリズムがActive Directoryサーバーに実装されていないと、okinitは失敗します。

    okinit user_name
    
    Kerberos Utilities for Solaris: Version 23.0.0.0.0 - Production on 15-MAY-2023 11:50:39
    Copyright (c) 1996, 2023 Oracle. All rights reserved.
    Password for user_name@domain:
    okinit: KDC has no support for encryption type
    
    okinit user_name
    Kerberos Utilities for Solaris: Version 23.0.0.0.0 - Production on 15-MAY-2023 11:50:39
    Copyright (c) 1996, 2023 Oracle. All rights reserved.
    Password for user_name@domain:
    okinit: Preauthentication failed

    ただし、次が成功します。

    okinit user_name
    Kerberos Utilities for Solaris: Version 23.0.0.0.0 - Production on 15-MAY-2023 11:50:39
    Copyright (c) 1996, 2023 Oracle. All rights reserved.
    Password for user_name@domain:

    oklistユーティリティは、チケットからユーザー・プリンシパルをリスト表示します。有効なチケットが存在する場合は、通常の方法で接続できます。okinitが正常に完了したら、次に示すように、ユーザー名やパスワードを使用せずにOracle Databaseサーバーに接続できます。

    % sqlplus /@service_name

25.7.5 Kerberos okinit操作に対するトレースの有効化

KRB5_TRACE環境変数を使用すると、Kerberos okinit操作をトレースできます。

この方法は、krb.confdefault_tkt_enctypes設定を使用して設定された暗号化タイプを検証するために使用できます。
  1. KRB5_TRACE環境変数に対してexportコマンドを実行します。
    たとえば、krb5.trcという名前のトレース・ファイルの場合:
    export KRB5_TRACE="/oracle/work/krb5.trc"
  2. 次のように、okinitコマンドを実行します。
    okinit user_name

    次のような出力が表示されます。

    Kerberos Utilities for Linux: Version 23.0.0.0.0 - Development on 15-MAY-2023 21:37:39
    Copyright (c) 1996, 2023 Oracle. All rights reserved.
    Configuration file : /oracle/work/krb/krb.conf.
    Password for user_name@US.EXAMPLE.COM:
    pfitch@sales_us:/oracle/work/
  3. grepコマンドを使用して、トレース・ファイルのdefault_tkt_enctype設定を検索します。
    たとえば:
    /oracle/work/fgrep aes256-cts krb5.trc
    [4072148] 1683321391.149999: Selected etype info: etype aes256-cts, salt "US.EXAMPLE.COMoratst", params ""
    [4072148] 1683321393.375503: AS key obtained from gak_fct: aes256-cts/95C0
    [4072148] 1683321393.375504: Decrypted AS reply; session key is: aes256-cts/40F6
    [4072182] 1683321415.915360: Selected etype info: etype aes256-cts, salt "US.EXAMPLE.COMoratst", params ""
    [4072182] 1683321417.701784: AS key obtained from gak_fct: aes256-cts/95C0
    [4072182] 1683321417.701785: Decrypted AS reply; session key is: aes256-cts/859E
    [4075441] 1683322653.162464: Selected etype info: etype aes256-cts, salt "US.EXAMPLE.COMoratst", params ""
    [4075441] 1683322656.084028: AS key obtained from gak_fct: aes256-cts/1938
    [4075455] 1683322659.360899: Selected etype info: etype aes256-cts, salt "US.EXAMPLE.COMoratst", params ""
    [4075455] 1683322661.242404: AS key obtained from gak_fct: aes256-cts/95C0
    [4075455] 1683322661.242405: Decrypted AS reply; session key is: aes256-cts/3580