この章では、Kerberos認証を使用できるようにOracle DatabaseのOracle Advanced Securityを構成する方法、およびKerberosを構成してOracle Databaseユーザーを認証する方法について説明します。この章の項目は次のとおりです。
認証サーバーとして動作するシステムにKerberosをインストールします。
関連項目: Kerberosの構築とインストールに関する注意事項は、Kerberosバージョン5ソース配布に同梱されています。 |
注意: 32ビット・バージョンのOracle Databaseからアップグレードした後で初めてKerberos認証アダプタを使用すると、エラー・メッセージ ORA-01637: パケット受信に失敗しました。 が発行されます。
回避策: 64ビット・バージョンのデータベースにアップグレードした後、Kerberos外部認証方式を使用する前にコンピュータ上の |
Kerberosを使用して自己を認証するクライアントの識別情報をOracle Databaseサーバーで検証できるようにするには、Oracle Databaseのサービス・プリンシパルを作成する必要があります。
プリンシパルの名前を次の書式で指定する必要があります。
kservice/kinstance@REALM
サービス・プリンシパルの各フィールドには、次の値を指定します。
サービス・プリンシパル・フィールド | 説明 |
---|---|
kservice | Oracleサービスを表す、大文字と小文字を区別する文字列。データベース・サービス名と同じでもかまいません。 |
kinstance | 通常は、Oracle Databaseが稼働しているシステムの完全修飾名。 |
REALM | データベース・サーバーのドメイン名。REALMは常に大文字である必要があり、一般的に、DNSドメイン名が指定されます。 |
注意: この項で説明するユーティリティ名は、実行可能プログラムです。ただし、Kerberosユーザー名 krbuser とレルムSOMECO.COM は単なる例です。 |
たとえば、kserviceがoracle
で、Oracle Databaseが稼働しているシステムの完全修飾名がdbserver.someco.com
、レルムがSOMECO.COM
とします。この場合、プリンシパル名は次のようになります。
oracle/dbserver.someco.com@SOMECO.COM
通常は、DNSドメイン名をレルムの名前として使用します。サービス・プリンシパルを作成するには、kadmin.local
を実行します。UNIXの場合は、次の構文を使用し、rootユーザーでこのコマンドを入力します。
# cd /kerberos-install-directory/sbin # ./kadmin.local
oracle/dbserver.someco.com@SOMECO.COM
というプリンシパルを、Kerberosが認識するサーバー・プリンシパルのリストに追加するには、次のように入力します。
kadmin.local:addprinc -randkey oracle/dbserver.someco.com@SOMECO.COM
Kerberosからサービス表を抽出し、そのサービス表をOracle Databaseサーバー/Kerberosクライアント・システムにコピーします。
たとえば、次の手順を使用してdbserver.someco.com
のサービス表を抽出します。
次のコマンドを入力して、サービス表を抽出します。
kadmin.local: ktadd -k /tmp/keytab oracle/dbserver.someco.com Entry for principal oracle/dbserver.someco.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
を使用するときにレルムを入力しないと、kadmin.localが現行ホストのレルムを使用して、それを手順1のようにコマンド出力に表示します。
Kerberosサービス表がKerberosクライアント・システムと同じシステム上にある場合は、それを移動するのみでかまいません。サービス表がKerberosクライアントと異なるシステム上にある場合は、FTPなどのプログラムを使用してファイルを転送する必要があります。FTPを使用する場合は、ファイルをバイナリ・モードで転送します。
次に、UNIXプラットフォームでのサービス表の移動方法の例を示します。
# mv /tmp/keytab /etc/v5srvtab
サービス・ファイルのデフォルト名は、/etc/v5srvtab
です。
Oracle Databaseサーバー・プログラム(実行ファイル)の所有者がサービス表(前述の例では/etc/v5srvtab
)を読み取ることができるか確認します。このためには、ファイル所有者をOracleユーザーに設定するか、ファイルをOracleが属しているグループに対して読取り可能にします。
注意: ファイルをすべてのユーザーに対して読取り可能にしないでください。セキュリティが侵害されるおそれがあります。 |
Oracle Databaseサーバーとクライアント・ソフトウェアをインストールします。
関連項目: オペレーティング・システム固有のOracle Databaseインストレーション・ガイド |
Oracle DatabaseサーバーとOracleクライアント・システムに、Oracle Net ServicesとOracle Advanced Securityをインストールします。
関連項目: オペレーティング・システム固有のOracle Databaseインストレーション・ガイド |
Oracle DatabaseサーバーとクライアントでOracle Net Servicesを構成します。
次の作業を実行して、Oracle Databaseサーバーおよびクライアントのsqlnet.ora
ファイルに必要なパラメータを設定します。
クライアントおよびデータベース・サーバーにKerberos認証サービス・パラメータを構成するには、Oracle Net Managerを使用して次の手順を実行します(「Oracle Net Managerの起動」を参照してください)。
Oracle Advanced Securityプロファイルにナビゲートします。(「Oracle Advanced Securityプロファイルへのナビゲート」を参照)。「Oracle Advanced Security」ウィンドウが表示されます(図7-1)。
図7-1 「Oracle Advanced Security」ウィンドウの「認証」タブ(Kerberos)
「認証」タブをクリックします。
「使用可能なメソッド」リストから「KERBEROS5」を選択します。
右矢印(>)をクリックして、「KERBEROS5」を「選択メソッド」リストに移動します。
選択したメソッドを使用する順に並べます。「選択メソッド」リストで方式を選択し、「上へ」または「下へ」をクリックして並べ替えます。たとえば、最初に使用するサービスをKERBEROS5
にするには、リストの先頭に移動します。
「その他のパラメータ」タブをクリックします(図7-2)。
図7-2 Oracle Advanced Securityの「その他のパラメータ」ウィンドウ(Kerberos)
「認証サービス」リストから「KERBEROS(V5)」を選択します。
「サービス」フィールドに「Kerberos」と入力します。このフィールドは、Kerberosのサービス・チケットを取得するためにOracle Databaseが使用するサービスの名前を定義します。このフィールドに値を指定すると、他のフィールドに入力できるようになります。
オプションとして、次のフィールドの値を入力します。
「資格証明キャッシュ・ファイル」
「構成ファイル」
「レルム変換ファイル」
「キー表」
「時間誤差」
「ファイル」→「ネットワーク構成の保存」を選択します。
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 リリース1(11.1)では、30文字を超えるKerberosユーザー名を持つ外部データベース・ユーザーを作成できます。詳細は、「タスク9: 外部認証されたOracleユーザーの作成」を参照してください。 |
必須パラメータの他に、sqlnet.ora
ファイルの次のオプション・パラメータをクライアントおよびOracle Databaseサーバーで設定できます。
資格証明キャッシュ・タイプ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 とレルムSOMECO.COM は単なる例にすぎません。システムによって異なる場合があります。 |
/krb5/admin/kadmin.local
をrootユーザーで実行して、krbuser
などの新しいKerberosユーザーを作成します。
次に示す例は、UNIXの場合です。
# ./kadmin.local kadmin.local: addprinc krbuser Enter password for principal: "krbuser@SOMECO.COM": (password does not display) Re-enter password for principal: "krbuser@SOMECO.COM": (password does not display) kadmin.local: exit
SQL*PlusをOracle Databaseサーバー上で実行して、Kerberosユーザーに対応するOracleユーザーを作成します。次の例では、OS_AUTHENT_PREFIX
はNULL(""
)に設定されます。Oracleユーザー名は、次の例のように大文字で入力し、二重引用符で囲む必要があります。
SQL> CONNECT / AS SYSDBA; SQL> CREATE USER "KRBUSER@SOMECO.COM" IDENTIFIED EXTERNALLY; SQL> GRANT CREATE SESSION TO "KRBUSER@SOMECO.COM";
ユーザーのKerberosプリンシパル名が30文字を超える場合は、次のようにユーザーを作成します。
SQL> CREATE USER db_user_name IDENTIFIED EXTERNALLY AS 'kerberos_principal_name'
例:
SQL> CREATE USER KRBUSER IDENTIFIED EXTERNALLY AS 'KerberosUser@SOMEORGANIZATION.COM';
注意: データベース管理者は、2つのデータベース・ユーザーが同じKerberosプリンシパル名で外部的に識別されていないことを確認する必要があります。 |
データベースに接続する前に、Key Distribution Center(KDC)に初期チケットを要求する必要があります。要求するには、クライアントに対して次を実行します。
% okinit username
データベースに接続するときに、データベース・リンクの後に次のような参照が続く場合は、転送可能フラグ(-f
)オプションを使用する必要があります。
sqlplus /@oracle
okinit -f
を実行すると、データベース・リンクで使用できる資格証明が使用可能になります。Oracleクライアントで次のコマンドを実行します。
% okinit -f Password for krbuser@SOMECO.COM:password
Oracle Kerberos認証アダプタとともに3つのユーティリティが提供されています。これらのユーティリティは、Oracle Kerberos認証サポートがインストールされたOracleクライアントでの使用を意図したものです。特定のタスクで、次のユーティリティを使用します。
okinit
ユーティリティを使用してKerberosチケットを取得しキャッシュに書き込みます。通常は、このユーティリティを使用してチケット認可チケットを取得し、ユーザーが入力したパスワードを使用してKey Distribution Center(KDC)から送られる資格証明を復号化します。チケット認可チケットはユーザーの資格証明キャッシュに格納されます。
okinit
で使用できるオプションを表7-1にリストします。
表7-1 okinitユーティリティのオプション
オプション | 説明 |
---|---|
|
転送可能なチケット認可チケットを要求します。データベース・リンクをたどる場合は、このオプションが必要です。 |
|
チケット認可チケットを含むすべてのチケットの存続期間を指定します。デフォルトで、チケット認可チケットの有効期間は8時間ですが、それより長い時間または短い時間も指定できます。KDCはこのオプションを無視したり、各サイトで指定できる時間を制限することができます。次の例に示すように、存続期間は、数字と、 okinit -l 2wld6h20m30s この例では、チケット認可チケットの存続期間は2週間と1日と6時間20分30秒です。 |
|
代替資格証明キャッシュを指定します。UNIXでは、デフォルトが |
|
使用するKerberos暗号化タイプを表す番号を指定します。 このオプションは、セッションに対して特定のKerberos暗号化タイプの鍵を要求する場合に使用できます。複数の暗号化タイプを指定すると、KDCでは、一般的で最も強力な暗号化タイプがリストから選択されます。 使用可能な値は次のとおりです。
次の例は、 okinit -e 1 -e 16 krbuser@REALM 複数の暗号化タイプを要求するには、このオプションを繰り返し指定します。 |
|
コマンドライン・オプションのリストを表示します。 |
oklist
ユーティリティを実行すると、所有しているチケットのリストを表示できます。表7-2に、使用できるoklist
のオプションをリストします。
表7-2 oklistユーティリティのオプション
オプション | 説明 |
---|---|
|
資格証明のフラグを表示します。表示されるフラグは次のとおりです。
|
|
代替資格証明キャッシュを指定します。UNIXでは、デフォルトが |
|
UNIX上のサービス表のエントリ(デフォルト |
このフラグ表示オプション(-f
)によって、次のような追加情報が表示されます。
% oklist -f 27-Jul-1999 21:57:51 28-Jul-1999 05:58:14 krbtgt/SOMECO.COM@SOMECO.COM Flags: FI
okdstry
ユーティリティを使用して、次のように資格証明キャッシュ・ファイルから資格証明を削除します。
$ okdstry -f
-f
コマンド・オプションによって、代替資格証明キャッシュを指定できます。UNIXでは、デフォルトが/tmp/krb5cc_
uid
となります。sqlnet.ora
ファイルでSQLNET.KRB5_CC_NAME
パラメータを使用して、代替資格証明キャッシュを指定することもできます。
これで、ユーザー名またはパスワードを使用せずにOracle Databaseサーバーに接続できます。次のようなコマンドを入力します。
$ sqlplus /@net_service_name
net_service_name
はOracle Net Servicesのネット・サービス名です。例:
$ sqlplus /@oracle_dbname
関連項目: 外部認証の詳細は、第1章「Oracle Advanced Securityの概要」および『Oracle Database Heterogeneous Connectivity管理者ガイド』を参照してください。 |
MIT Kerberosに準拠しているOracle Advanced Securityは、Windows 2000ドメイン・コントローラ上で、Kerberos Key Distribution Center(KDC)が発行するチケットを相互運用することによって、Oracle DatabaseでのKerberos認証を実現します。Windows 2000ドメイン・コントローラKDCを使用してKerberos認証を構成するには、次のタスクを実行します。
タスク1: Windows 2000ドメイン・コントローラKDCと相互運用するためのOracle Kerberosクライアントの構成
タスク3: Windows 2000ドメイン・コントローラKDCと相互運用するためのOracle Databaseの構成
Oracle Kerberosクライアントで、次の手順を実行する必要があります。
Windows 2000ドメイン・コントローラをKerberos KDCとして参照するように、次のKerberosクライアント構成ファイルを作成します。次の例は、Windows 2000ドメイン・コントローラがノード名sales3854.us.acme.com
上で実行されていることを想定しています。
krb.conf
ファイル
例:
SALES3854.US.ACME.COM SALES3854.US.ACME.COM sales3854.us.acme.com admin server
krb5.conf
ファイル
例:
[libdefaults] default_realm=SALES.US.ACME.COM [realms] SALES.US.ACME.COM= {
kdc=sales3854.us.acme.com:88 }
[domain_realm] .us.acme.com=SALES.US.ACME.COM
krb5.realms
ファイル
例:
us.acme.com SALES.US.ACME.COM
Windows 2000ドメイン・コントローラKDCと相互運用するようにOracleクライアントを構成するには、「手順1: クライアントとデータベース・サーバーでの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 Databaseの新規ユーザーを作成します。
たとえば、Oracle Databaseがホストsales3854.us.acme.com
上で実行されている場合は、Active Directoryでユーザー名sales3854.us.acme.com
とパスワードoracle
を使用してユーザーを作成します。
注意: Active Directoryでは、ユーザーを host/hostname.dns.com (oracle/sales3854.us.acme.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.acme.com@SALES.US.COM -mapuser sales3854 -pass oracle -out C:\temp\v5srvtab
このユーティリティはWindows 2000サポート・ツールの一部で、Windows 2000配布メディアの¥support¥reskit¥netmgmt¥security
フォルダにあります。
抽出したキータブ・ファイルをOracle Databaseがインストールされているホスト・コンピュータにコピーします。
たとえば、前述の手順で作成されたキータブを/krb5/v5svrtab
にコピーします。
関連項目: Windows 2000とKerberos 5との相互運用の詳細は、次のURLを参照してください。
|
Oracle Databaseがインストールされているホスト・コンピュータで、次の手順を実行する必要があります。
データベース・サーバーの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.ACME.COM
となります。
クライアントは、データベースに接続する前に、初期チケットを要求する必要があります。初期チケットを要求するには、「タスク10: Kerberos/Oracleユーザーの初期チケットの取得」のタスク情報に従います。
この項では、構成に関する一般的な問題とその解決メソッドについて説明します。
okinit
を使用してチケット認可チケットを取得できない場合
krb.conf
ファイルを調べて、デフォルトのレルムが適切であるかどうかを確認します。
レルムに対して指定されているホスト上で、KDCが稼働しているかどうかを確認します。
KDCにユーザー・プリンシパルのエントリがあること、およびパスワードが一致しているかどうかを確認します。
krb.conf
ファイルとkrb.realms
ファイルがOracleで読取り可能になっているかどうかを確認します。
初期チケットはあるが接続できない場合
接続を試みた後で、サービス・チケットをチェックします。
データベース・サーバー側のsqlnet.ora
ファイルに、Kerberosが認識するサービスに対応するサービス名があることをチェックします。
関係するすべてのシステムで、クロックのずれが数分以内に設定されていることをチェックします。または、sqlnet.ora
ファイルのSQLNET.KERBEROS5_CLOCKSKEW
パラメータを変更します。
サービス・チケットはあるが接続できない場合
クライアントおよびデータベース・サーバー上でクロックをチェックします。
v5srvtab
ファイルが適切な場所に存在し、Oracleで読取り可能になっているかどうかをチェックします。sqlnet.ora
パラメータを設定することを忘れないでください。
データベース・サーバー側のsqlnet.ora
ファイルで指定されているサービスに対してv5srvtab
ファイルが生成されていることをチェックします。
何も問題はないが別の問合せが失敗する場合
初期チケットが転送可能であるかどうかをチェックしますokinit
ユーティリティを実行して、初期チケットを取得している必要があります。
資格証明の有効期限をチェックします。資格証明の有効期限が切れている場合は、接続をクローズし、okinit
を実行して新しい初期チケットを取得します。