19 Kerberos認証の構成

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

19.1 Kerberos認証の有効化

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

関連項目:

KerberosユーザーをKerberos認証のエンタープライズ・ユーザーに移行する方法の詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

19.1.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

19.1.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ユーザーとしてこのコマンドを実行します。
    # cd /kerberos-install-directory/sbin
    # ./kadmin.local
    

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

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

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

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

たとえば、dbserver.example.comのサービス・キー表を抽出するには、次の手順を実行します。

  1. 次のように入力してサービス・キー表を抽出します。
    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
    
  2. サービス・キー表をチェックするには、次のコマンドを入力します。
    oklist -k -t /tmp/keytab
    
  3. サービス・キー表を抽出した後、古いエントリに加えて新しいエントリが表にあることを確認します。

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

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

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

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

    # mv /tmp/keytab /etc/v5srvtab
    

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

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

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

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

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

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

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

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

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

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

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

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

ノート:

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

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

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

  1. Oracle Net Managerを起動します。
    • (UNIX) $ORACLE_HOME/binから、コマンドラインで次のコマンドを入力します。

      netmgr
      
    • (Windows)「スタート」「プログラム」「Oracle - HOME_NAME」「Configuration and Migration Tools」「Net Manager」を選択します。

  2. 「Oracle Netの構成」を展開し、「ローカル」から「プロファイル」を選択します。
  3. 「ネーミング」リストから、「ネットワーク・セキュリティ」を選択します。

    ネットワーク・セキュリティのタブ付きウィンドウが表示されます。

  4. 「認証」タブを選択します。
  5. 「使用可能なメソッド」リストから、「KERBEROS5」を選択します。
    Kerberosクロスレルム認証はKERBEROS5またはKERKBEROS5PREアダプタによる制約委任の使用ではサポートされないということに注意してください。
  6. 右矢印(>)をクリックして、「KERBEROS5」を「選択メソッド」リストに移動します。
  7. 選択したメソッドを使用する順に並べます。

    そのためには、「選択メソッド」リストでメソッドを選択し、「上へ」または「下へ」をクリックしてリスト内に配置します。たとえば、最初に使用するサービスをKERBEROS5にするには、リストの先頭に移動します。

  8. 「その他のパラメータ」タブを選択します。
  9. 「認証サービス」リストから「KERBEROS(V5)」を選択します。
  10. 「サービス」フィールドに「Kerberos」と入力します。

    このフィールドでは、Kerberosのサービス・チケットを取得するためにOracle Databaseが使用するサービスの名前を定義します。このフィールドに値を入力すると、他のフィールドに入力できるようになります。

  11. オプションで、次のフィールドの値を入力します。
    • 資格証明キャッシュ・ファイル

    • 構成ファイル

    • レルム変換ファイル

    • キー表

    • 時間誤差

    構成するフィールドとパラメータの詳細は、Oracle Net Managerオンライン・ヘルプおよび「ステップ6C: sqlnet.oraパラメータの設定(オプション)」を参照してください。

  12. 「ファイル」メニューから、「ネットワーク構成の保存」を選択します。

    sqlnet.oraファイルは、前述のステップで行った可能性のあるオプションの選択だけでなく、次のエントリでも更新されます。

    SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5)
    SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=kservice
19.1.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ユーザー名を持つ外部データベース・ユーザーを作成できます。詳細は、「ステップ8: 外部認証されたOracleユーザーの作成」を参照してください。

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

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

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

表19-1 Kerberos固有のsqlnet.oraパラメータ

パラメータ 説明

SQLNET.KERBEROS5_CC_NAME=pathname_to_credentials_cache_file|OS_MEMORY

Kerberos資格証明キャッシュ(CC)ファイルへの完全パス名を指定します。デフォルト値は、オペレーティング・システムによって異なります。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

19.1.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

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

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

  1. CREATE USER権限を持つユーザーとしてSQL*Plusにログインします。
    sqlplus sec_admin - Or, CONNECT sec_admin@hrpdb
    Enter password: password
    
  2. OS_AUTHENT_PREFIXがnull ("")に設定されていることを確認します。
  3. Kerberosユーザーに対応するOracle Databaseユーザー・アカウントを作成します。Oracleユーザー名を大文字で入力して、その名前を二重引用符で囲みます。

    たとえば:

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

ノート:

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

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

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

  • 初期チケットを要求するには、クライアントで次のコマンドを実行します。

    % 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

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

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

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

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

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

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

表19-2 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

キャッシュの名前をキャッシュの場所として指定します。UNIXでは、デフォルトは/tmp/krb5cc_uidです。代替資格証明キャッシュは、sqlnet.oraファイルでSQLNET.KERBEROS5_CC_NAMEパラメータを使用して指定することもできます。

-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の使用を指定します

-?

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

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

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

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

表19-3 oklistユーティリティのオプション

オプション 説明

-f

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

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

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

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

-c

代替資格証明キャッシュを指定します。UNIXでは、デフォルトは/tmp/krb5cc_uidです。代替資格証明キャッシュは、sqlnet.oraファイルでSQLNET.KERBEROS5_CC_NAMEパラメータを使用して指定することもできます。

-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
04-Aug-2015 21:57:51   28-Aug-2015 05:58:14
krbtgt/EXAMPLE.COM@EXAMPLE.COM
Flags: FI

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

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

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

表19-4 okdstryユーティリティのオプション

オプション 説明

—A

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

—q

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

—c cache_name

資格証明(チケット)のキャッシュの名前および場所としてcache_nameを使用します。UNIXでは、デフォルトは/tmp/krb5cc_uidです。代替資格証明キャッシュは、sqlnet.oraファイルでSQLNET.KERBEROS5_CC_NAMEパラメータを使用して指定することもできます。

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

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

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

表19-5 キー表の作成を自動化するための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マスター・パスワードを要求するよう指定します

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

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

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

    $ sqlplus /@net_service_name
    

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

$ sqlplus /@oracle_dbname

関連項目:

外部認証の詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』を参照してください。

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

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

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

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

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

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

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

19.4.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
19.4.2.2 ステップ1B: sqlnet.oraファイルでのOracle構成パラメータの指定

sqlnet.oraファイルにはKerbose 5特有のパラメータがあります。

Windows 2008ドメイン・コントローラKDCと相互運用するようにOracleクライアントを構成するには、クライアントおよびデータベース・サーバーでKerberos用に使用されるものと同じsqlnet.oraファイルのパラメータを使用します。これらのパラメータは、ステップ6A: クライアントとデータベース・サーバーでのKerberosの構成で説明されています。

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

19.4.2.3 ステップ1C: リスニング・ポート番号の指定

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

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

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

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

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

関連項目:

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

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

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

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

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

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

Windows 2008ドメイン・コントローラでこのアカウントを作成した後、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にコピーできます。

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

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

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

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

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

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

関連項目:

Oracle Net Managerを使用してsqlnet.oraファイルのパラメータを設定する方法の詳細は、ステップ6: Kerberos認証の構成を参照してください。

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

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

ノート:

ユーザーは、Windows固有のキャッシュを使用する場合、okinitコマンドを使用して初期チケットを明示的に要求する必要はありません。

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

関連項目:

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

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

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

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

関連項目:

SQLNET.FALLBACK_AUTHENTICATIONパラメータの詳細は、『Oracle Database Net Servicesリファレンス』を参照してください。

19.6 Oracle 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を実行して新しい初期チケットを取得します。

19.6.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を実行して新しい初期チケットを取得します。

19.6.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

19.6.3 Kerberos構成のORA-28575エラー

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

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

19.6.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

19.6.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