この章では、Kerberos認証を使用できるようにOracle Advanced Security for Oracle Databaseを構成する方法、およびOracleデータベース・ユーザーを認証するようにKerberosを構成する方法について説明します。この章には、次の項が含まれています。
関連項目: KerberosユーザーをKerberos認証のエンタープライズ・ユーザーに移行する方法の詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。 |
認証サーバーとして動作するシステムにKerberosをインストールします。
関連項目: Kerberosの構築とインストールに関する注意事項は、Kerberosバージョン5ソース配布に同梱されています。 |
注意: 32ビット・バージョンのOracle Databaseからアップグレードした後に初めてKerberos認証アダプタを使用すると、エラー・メッセージ「ORA-01637: パケット受信に失敗しました。」 が表示されます。
回避策: 64ビット・バージョンのデータベースにアップグレードした後、Kerberos外部認証方式を使用する前に、コンピュータ上の |
Kerberosを使用して自己を認証するクライアントの識別情報をOracleデータベース・サーバーで検証できるようにするには、Oracle Databaseのサービス・プリンシパルを作成する必要があります。
プリンシパルの名前は、次の形式にする必要があります。
kservice/kinstance@REALM
サービス・プリンシパル内の各フィールドで次の値を指定します。
注意: この項のユーティリティ名は実行可能プログラムです。ただし、Kerberosユーザー名krbuser およびレルムEXAMPLE.COM は単なる例です。 |
たとえば、kservice
がoracle
、Oracle Databaseが実行されているシステムの完全修飾名をdbserver.example.com
、レルムをEXAMPLE.COM
とします。この場合、プリンシパル名は次のようになります。
oracle/dbserver.example.com@EXAMPLE.COM
通常、DNSドメイン名をレルムの名前として使用します。service principalを作成するには、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
Kerberosからサービス・キー表を抽出し、Oracleデータベース・サーバー/Kerberosクライアント・システムにコピーします。
たとえば、次の手順を使用してdbserver.example.com
のサービス・キー表を抽出します。
次のように入力してサービス・キー表を抽出します。
kadmin.local: ktadd -k /tmp/keytab oracle/dbserver.example.com Entry for principal oracle/dbserver.example.com with kvno 2, encryption DES-CBC-CRC added to the keytab WRFILE: 'WRFILE:/tmp/keytab kadmin.local: exit oklist -k -t /tmp/keytab
サービス・キー表を抽出した後、古いエントリに加えて新しいエントリが表にあることを確認します。新しいエントリがない場合、またはさらに追加する必要がある場合は、kadmin.local
を使用して追加します。
ktadd
を使用するときにレルムを入力しない場合、Kerberosサーバーのデフォルトのレルムが使用されます。kadmin.local
は、localhost
で実行されているKerberosサーバーに接続されます。
Kerberosサービス・キー表がKerberosクライアントと同じシステム上にある場合は、移動できます。Kerberosサービス・キー表がKerberosクライアントと異なるシステム上にある場合は、FTPなどのプログラムを使用してファイルを転送する必要があります。FTPを使用する場合は、ファイルをバイナリ・モードで転送します。
次の例は、UNIXプラットフォームでサービス・キー表を移動する方法を示しています。
# mv /tmp/keytab /etc/v5srvtab
サービス・ファイルのデフォルト名は、/etc/v5srvtab
です。
Oracleデータベース・サーバー実行可能ファイルの所有者がサービス・キー表(前の例の/etc/v5srvtab
)を読み取ることができることを確認します。そのためには、ファイル所有者をOracleユーザーに設定するか、またはファイルをOracleが属するグループに対して読取り可能にします。
注意: ファイルをすべてのユーザーに対して読取り可能にしないでください。そのことによってセキュリティ侵害が発生する場合があります。 |
Oracleデータベース・サーバーとクライアント・ソフトウェアをインストールします。
関連項目: オペレーティング・システム固有のOracle Databaseインストール関連ドキュメント |
Oracleデータベース・サーバーとOracleクライアント・システムにOracle Net ServicesとOracle Advanced Securityをインストールします。
関連項目: オペレーティング・システム固有のOracle Databaseインストール関連ドキュメント |
Oracleデータベース・サーバーとクライアントでOracle Net Servicesを構成します。
関連項目:
|
次の手順を実行して、Oracleデータベース・サーバーおよびクライアントのsqlnet.ora
ファイルで必須パラメータを設定します。
この項の内容は次のとおりです。
クライアントとデータベース・サーバーでKerberos認証サービス・パラメータを構成する手順:
Oracle Net Managerを起動します。
(UNIX) $ORACLE_HOME
/bin
から、コマンドラインで次のコマンドを入力します。
netmgr
(Windows)「スタート」→「プログラム」→「Oracle - HOME_NAME」→「Configuration and Migration Tools」→「Net Manager」を選択します。
「Oracle Netの構成」を展開し、「ローカル」から「プロファイル」を選択します。
「ネーミング」リストから、「ネットワーク・セキュリティ」を選択します。
ネットワーク・セキュリティのタブ付きウィンドウが表示されます。
「認証」タブを選択します。
「使用可能なメソッド」リストから、「KERBEROS5」を選択します。
右矢印(>)をクリックして、「KERBEROS5」を「選択メソッド」に移動します。
選択したメソッドを使用する順に並べます。そのためには、「選択メソッド」リストでメソッドを選択し、「上へ」または「下へ」をクリックしてリスト内に配置します。たとえば、最初に使用するサービスをKERBEROS5
にするには、リストの先頭に移動します。
「その他のパラメータ」タブを選択します。
「認証サービス」リストから「KERBEROS(V5)」を選択します。
Serviceフィールドでは、Kerberosのサービス・チケットを取得するためにOracle Databaseが使用するサービスの名前を定義します。このフィールドに値を入力すると、他のフィールドに入力できるようになります。
オプションで、次のフィールドの値を入力します。
「資格証明キャッシュ・ファイル」
「構成ファイル」
「レルム変換ファイル」
「キー表」
「時間誤差」
構成するフィールドとパラメータの詳細は、Oracle Net Managerオンライン・ヘルプおよび「手順7C: sqlnet.oraパラメータの設定(オプション)」を参照してください。
「ファイル」メニューから、「ネットワーク構成の保存」を選択します。
sqlnet.ora
ファイルは次のエントリで更新されます。
SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5) SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=kservice
Kerberosユーザー名には長いものにできますが、Oracleユーザー名は30文字に制限されているため、初期化パラメータ・ファイルのOS_AUTHENT_PREFIX
の値をnullに設定することをお薦めします。
OS_AUTHENT_PREFIX=""
このパラメータをnullに設定すると、OPS$
のデフォルト値が上書きされます。
注意: Oracle Database 11g リリース2 (11.2)では、30文字を超えるKerberosユーザー名を持つ外部データベース・ユーザーを作成できます。詳細は、「手順9: 外部認証されたOracleユーザーの作成」を参照してください。 |
必須パラメータ以外に、オプションで、クライアントおよびOracleデータベース・サーバーでsqlnet.ora
ファイルの次のパラメータを設定できます。
資格証明キャッシュ・タイプ4形式のサポート
Oracle Databaseは、資格証明キャッシュ・タイプ4形式をサポートおよび認識するようになりました。この機能は、新しいバージョンのMIT Kerberos 5 (1.3.x以上)ユーティリティを使用する環境で役立ちます。
この機能を使用するには、sqlnet.ora
ファイルで次のパラメータを設定する必要があります。
SQLNET.KERBEROS5_CONF_MIT = TRUE
Kerberos構成ファイル(krb5.conf
)は、次のように設定する必要があります。
... [libdefaults] ... kdc_timesync = 1 ccache_type = 4
Kerberosで認証できるOracleユーザーを作成するには、管理ツールがインストールされているKerberos認証サーバーで次のタスクを実行します。レルムはすでに存在している必要があります。
注意: この項のユーティリティ名は実行可能プログラムです。ただし、Kerberosユーザー名krbuser およびレルムEXAMPLE.COM は単なる例です。システムによって異なる場合があります。 |
/krb5/admin/kadmin.local
をrootとして実行して、krbuser
などの新しいKerberosユーザーを作成します。
次の例は、UNIXの場合です。
# ./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
Oracleデータベース・サーバー上でSQL*Plusを実行して、Kerberosユーザーに対応するOracleユーザーを作成します。次の例で、OS_AUTHENT_PREFIX
はnull (""
)に設定されます。次の例に示すように、Oracleユーザー名は大文字とし、二重引用符で囲みます。
SQL> CONNECT / AS SYSDBA; SQL> CREATE USER "KRBUSER@EXAMPLE.COM" IDENTIFIED EXTERNALLY; SQL> GRANT CREATE SESSION TO "KRBUSER@EXAMPLE.COM";
ユーザーのKerberosプリンシパル名が30文字を超え、最大1024文字の場合は、次のようにユーザーを作成します。
SQL> CREATE USER db_user_name IDENTIFIED EXTERNALLY AS 'kerberos_principal_name'
例:
SQL> CREATE USER KRBUSER IDENTIFIED EXTERNALLY AS 'KerberosUser@EXAMPLE.COM';
注意: データベース管理者は、2つのデータベース・ユーザーが同じKerberosプリンシパル名で外部から識別されないことを確認する必要があります。 |
データベースに接続するには、Key Distribution Center (KDC)に初期チケットを要求する必要があります。そのためには、クライアントで次を実行します。
% okinit username
データベースに接続するときに、データベース・リンクの後に次のような参照が続く場合は、転送可能フラグ(-f
)オプションを使用する必要があります。
sqlplus /@oracle
okinit -f
を実行すると、データベース・リンクをまたいで使用できる資格証明が有効になります。Oracleクライアントで次のコマンドを実行します。
% okinit -f Password for krbuser@EXAMPLE.COM:password
Oracle Kerberos認証アダプタとともに3つのユーティリティが提供されています。これらのユーティリティは、Oracle Kerberos認証サポートがインストールされたOracleクライアントでの使用を意図したものです。特定のタスクで、次のユーティリティを使用します。
okinit
ユーティリティでは、Kerberosチケットを取得し、キャッシュします。通常は、このユーティリティを使用してチケット認可チケットを取得し、ユーザーが入力したパスワードを使用してkey distribution center (KDC)からの資格証明を復号化します。チケット認可チケットは、ユーザーの資格証明キャッシュに格納されます。
okinit
で使用可能なオプションを表12-1に示します。
表12-1 okinitユーティリティのオプション
オプション | 説明 |
---|---|
|
転送可能なチケット認可チケットを要求します。データベース・リンクをたどる場合は、このオプションが必要です。 |
|
チケット認可チケットおよびすべての後続チケットの存続期間を指定します。デフォルトで、チケット認可チケットは8時間有効ですが、存続期間がより短いまたは長い資格証明を指定することもできます。KDCはこのオプションを無視したり、各サイトで指定できる時間を制限したりできます。次の例に示すように、存続期間の値は、 okinit -l 2wld6h20m30s この例では、存続期間が2週間と1日6時間20分30秒のチケット認可チケットが要求されます。 |
|
代替資格証明キャッシュを指定します。UNIXでは、デフォルトは |
|
使用するKerberos暗号化タイプを表す数字を指定します。 このオプションは、セッションに対して特定のKerberos暗号化タイプの鍵を要求する場合に使用できます。複数の暗号化タイプを指定すると、KDCでは一般的で最も強力な暗号化タイプがリストから選択されます。 許容される値は次のとおりです。
次の例では、 okinit -e 1 -e 16 krbuser@REALM 複数の暗号化タイプを要求するには、このオプションを繰り返します。 |
|
コマンドライン・オプションのリストを表示します。 |
oklist
ユーティリティを実行して、保持しているチケットのリストを表示します。表12-2
に、使用できるoklistオプションを示します。
表12-2 oklistユーティリティのオプション
オプション | 説明 |
---|---|
|
資格証明のフラグを表示します。関連するフラグは次のとおりです。
|
|
代替資格証明キャッシュを指定します。UNIXでは、デフォルトは |
|
UNIX上のサービス表のエントリ(デフォルト |
フラグ表示オプション(-f
)によって、次のような追加情報が表示されます。
% oklist -f 27-Jul-1999 21:57:51 28-Jul-1999 05:58:14 krbtgt/EXAMPLE.COM@EXAMPLE.COM Flags: FI
okdstry
ユーティリティを使用して、資格証明キャッシュ・ファイルから資格証明を削除します。
$ okdstry -f
-f
コマンド・オプションによって、代替資格証明キャッシュを指定できます。UNIXでは、デフォルトは/tmp/krb5cc_
uid
です。代替資格証明キャッシュは、sqlnet.ora
ファイルでSQLNET.KRB5_CC_NAME
パラメータを使用して指定することもできます。
ユーザー名やパスワードを使用しないでOracleデータベース・サーバーに接続できるようになりました。次のようにコマンドを入力します。
$ sqlplus /@net_service_name
net_service_name
は、Oracle Net Servicesのサービス名です。例:
$ sqlplus /@oracle_dbname
関連項目: 外部認証の詳細は、第1章「Oracle Advanced Securityの概要」およびOracle Database Heterogeneous Connectivityユーザーズ・ガイドを参照してください。 |
Oracle Advanced SecurityはMIT Kerberosに準拠しており、OracleデータベースでのKerberos認証を可能にするために、Windows 2000ドメイン・コントローラ上で、Kerberos Key Distribution Center (KDC)によって発行されたチケットを相互運用できます。Windows 2000ドメイン・コントローラKDCを使用するKerberosを構成するには、次のタスクを実行します。
Oracle Kerberosクライアントで次の手順を実行する必要があります。
Windows 2000ドメイン・コントローラをKerberos KDCとして参照する次のKerberosクライアント構成ファイルを作成します。次の例で、Windows 2000ドメイン・コントローラは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
Windows 2000ドメイン・コントローラKDCと相互運用するようにOracleクライアントを構成するには、「手順7A: クライアントとデータベース・サーバーでの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)
注意: Windows 2000オペレーティング・システムはMIT Kerberosバージョン5に基づくセキュリティ・サービスとのみ相互運用するように設計されているため、SQLNET.KERBEROS5_CONF_MIT パラメータがTRUE に設定されていることを確認してください。 |
Windows 2000ドメイン・コントローラで、次の手順を実行する必要があります。
関連項目: Active Directoryでユーザーを作成する方法の詳細は、Microsoft社のドキュメントを参照してください。 |
Microsoft Active DirectoryでOracleデータベースの新規ユーザーを作成します。
たとえば、Oracleデータベースがホストsales3854.us.example.com
で実行されている場合は、Active Directoryを使用してユーザー名sales3854.us.example.com
とパスワードoracle
でユーザーを作成します。
Active Directoryでは、ユーザーをhost/hostname.dns.com
(oracle/sales3854.us.example.com
など)として作成しないでください。Microsoft社のKDCは、MIT KDCのようにマルチパートの名前をサポートしていません。MIT KDCは、すべてのプリンシパルをユーザー名として扱うため、マルチパートの名前をサービス・プリンシパルに使用できます。ただし、Microsoft社のKDCでは使用できません。
Ktpass
コマンドライン・ユーティリティを使用して、次の構文によってキー表ファイルを抽出します。
Ktpass -princ service/hostname@NT-DNS-REALM-NAME -mapuser account -pass password -out keytab.file
次に、前の手順で作成したデータベース・ユーザーを使用したKtpass
の使用例を示します。
C:> Ktpass -princ oracle/sales3854.us.example.com@SALES.US.COM -mapuser sales3854 -pass oracle -out C:\temp\v5srvtab
このユーティリティはWindows 2000サポート・ツールの一部であり、\support\reskit\netmgmt\security
フォルダのWindows 2000配布媒体にあります。
抽出したキー表ファイルをOracleデータベースがインストールされているホスト・コンピュータにコピーします。
たとえば、前の手順で作成したキー表を/krb5/v5svrtab
にコピーできます。
関連項目: Windows 2000とKerberos 5の相互運用の詳細は、次のURLを参照してください。
|
Oracleデータベースがインストールされているホスト・コンピュータで、次の手順を実行する必要があります。
データベース・サーバーの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)
注意: Windows 2000オペレーティング・システムはMIT Kerberosバージョン5に基づくセキュリティ・サービスとのみ相互運用するように設計されているため、SQLNET.KERBEROS5_CONF_MIT パラメータがTRUE に設定されていることを確認してください。 |
「手順9: 外部認証されたOracleユーザーの作成」のタスク情報に従って、外部認証されたOracleユーザーを作成します。ユーザー名はすべて大文字で作成します。たとえば、ORAKRB@SALES.US.EXAMPLE.COM
のようにします。
クライアントがデータベースに接続するには、初期チケットを要求する必要があります。初期チケットを要求するには、「手順10: Kerberos/Oracleユーザーの初期チケットの取得」のタスク情報に従います。
注意: ユーザーは、Windows固有のキャッシュを使用する場合、okinit コマンドを使用して初期チケットを明示的に要求する必要はありません。
OracleクライアントがWindows 2000以上で実行されている場合、KerberosチケットはユーザーがWindowsにログインしたときに自動的に取得されます。 |
関連項目: システムのKerberosチケット情報を表示するために使用できるKerbtray.exe ユーティリティの詳細は、Microsoft社のドキュメントを参照してください。 |
OracleクライアントでKerberos認証を構成してOracleデータベースを認証した後に、パスワード・ベースの認証にフォールバックする必要が発生する場合があります。たとえば、ユーザー・データベースのリンクをOracleデータベースに固定している場合などです。
Kerberos認証からパスワード・ベースの認証へのフォールバックを有効にするには、クライアントとサーバーの両方でsqlnet.ora
内のSQLNET.FALLBACK_AUTHENTICATION
パラメータをTRUE
に設定します。このパラメータのデフォルトはFALSE
です。つまり、デフォルトではKerberos認証に失敗すると接続は失敗します。
関連項目: 『Oracle Database Net Servicesリファレンス』 |
この項では、一般的な構成の問題を示し、その解決方法について説明します。
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
を実行して新しい初期チケットを取得します。