この章では、Oracle Internet Directoryに関連する問題について説明します。内容は次のとおりです。
この項では、一般的な問題およびその回避方法について説明します。内容は次のとおりです。
Oracle Application Serverのバックアップおよびリカバリ・ツールなど、標準的なデータベース・バックアップおよびリストアの手順を使用する場合、次の管理タスクを実行した後に全データベース・バックアップを実行する必要があります。
bulkload
バルク管理ツールの使用
catalog
バルク管理ツールの使用
Oracle Internet Directoryのインストール
メジャー・リリースまたはパッチセットへのOracle Internet Directoryのアップグレード
cn=catalogs
エントリを変更してorclindexedattribute
を追加するLDAPアプリケーション(Oracle Collaboration Suiteなど)をOracle Internet Directoryに対してインストール
bulkload
バルク管理ツールを使用した後に全体バックアップを実行しないと、リストアの実行時に回復不能なエラーが発生することがあります。bulkload
ユーティリティは、REDOログを生成しないダイレクト・パス・ロードを実行します。bulkload
バルク管理ツールの使用後に全体バックアップを実行せず、後で、アーカイブ済REDOログの適用を試行するリストアを実行した場合、修正不可能なエラーが発生することがあります。
この他の4つのいずれかのタスクの後に全体バックアップを実行しない場合、リストアの実行時に回復可能なエラーが発生することがあります。これらのいずれかのタスクを実行すると、NOLOGGING
オプション付きで索引が作成されることがあります。つまり、索引にREDOログは作成されません。これらのいずれかの操作の後に全体バックアップを実行せず、後で、アーカイブ済REDOログの適用を試行するリストアを実行した場合、Oracle Internet Directoryの再起動時にエラーが発生することがあります。具体的には、oidmon.log
またはoidldapd*.log
にORA-1578およびORA-2640エラーが示されます。この場合、次のように入力して、Oracle Internet Directoryを停止し、すべてのOracle Internet Directoryデータベース索引を再作成します。
bulkload connect="conn_str" index="TRUE"
Oracle Internet Directoryの10g(10.1.4.0.1)リリースでは、アクセス制御リストに新しい制限(orclaci
属性およびorclentrylevelaci
属性)が追加されました。具体的には、ユーザーはディレクトリ・スキーマ内に定義されていない属性名を指定できません。このため、以前のOracle Internet Directoryリリースからエントリを追加または移行するときに、ディレクトリ・スキーマ内に定義されていない属性名を持つエントリがあると、ロード操作は失敗します。
この問題を回避するには、LDIFファイル内で、定義されていない属性を持つACLをコメントアウトします。
たとえば、次の10gリリース2(10.1.2)エントリでは、太字テキストで示された未定義の属性が使用されています。
orclaci: access to attr=(orclUserApplnProvStatus,orclUserApplnProvStatusDesc, orclUserProvFailureCount) by group="cn=oracledasedituser,cn=groups, cn=OracleContext,dc=us,dc=oracle,dc=com" (read,search,write,compare) by group="cn=oracledascreateuser,cn=groups,cn=OracleContext,dc=us,dc=oracle, dc=com" (read,search,write,compare) by self (read,search,nowrite,compare) by * (none)
この問題を回避するには、LDIFファイルをロードまたは検証する前に、次のようにエントリをコメントアウトします。
# orclaci: access to attr=(orclUserApplnProvStatus,orclUserApplnProvStatusDesc, # orclUserProvFailureCount) by group="cn=oracledasedituser,cn=groups, # cn=OracleContext,dc=us,dc=oracle,dc=com" (read,search,write,compare) by # group="cn=oracledascreateuser,cn=groups,cn=OracleContext,dc=us,dc=oracle, # dc=com" (read,search,write,compare) by self (read,search,nowrite,compare) # by * (none)
新しいディレクトリをディレクトリ・レプリケーション・グループに追加する場合、ldifwrite
およびbulkload
ツールを使用して既存のディレクトリから新しいディレクトリにエントリをコピーします。
通常、これを行うには、レプリケーション・アグリーメントDNをldifwrite
へのbasedn
引数として指定する方法が最も簡単です。これによって、ldifwrite
ツールは、指定されたレプリケーション・アグリーメントによりレプリケートされたすべてのエントリをダンプします。その後は、bulkload
ツールを使用して、別のレプリケート済ディレクトリにエントリをロードできるようになります。
リリース10g(10.1.4.0.1)では、レプリケーション・アグリーメントDNがorclagreementid=000001,cn=replication configuration
(アドバンスト・レプリケーション・アグリーメントのDN)の場合、これが機能しません。回避方法は、コピー対象のDITのDNを、ldifwrite
へのベースDN引数として明示的に指定することです。
この項では、構成の問題およびその回避方法について説明します。内容は次のとおりです。
サーバー・ロケールが英語以外の場合、bulkloadの実行前にNLS_LANG
をAMERICAN_AMERICA.AL32UTF8
に設定します。
この項では、ドキュメントの訂正箇所を示します。内容は次のとおりです。
9.3.3項「oracle.ldap.util.Subscriber.createUser()に関するドキュメントの誤り」
9.3.13項「Oracle Directory Managerヘルプおよび『Oracle Internet Directory管理者ガイド』の付録Aの誤り」
「関連ドキュメント」ヘルプ・ページで、Identity Management Grid ControlプラグインおよびOracle Internet Directoryサーバー管理性に関するドキュメントへのリンクが壊れています。これらのドキュメントへは、http://www.oracle.com/technology/documentation
からアクセスしてください。
HTMLバージョンの『Oracle Internet Directory管理者ガイド』では、付録IのI.6.2項「新規アドバンスト・レプリケーション・ノードで実行するタスク」の手順18に、次のコマンドラインが示されています。
$> sqlplus rep_admin_db_account_name/password@db_conn_str_of_new_nodeSQL> exec dbms_repcat.drop_master_repgroup( gname => 'LDAP_REP' )
正しくは、SQL>
の前に改行が必要です。つまり、コマンドは次のようになります。
$> sqlplus rep_admin_db_account_name/password@db_conn_str_of_new_node SQL> exec dbms_repcat.drop_master_repgroup( gname => 'LDAP_REP' )
『Oracle Internet Directory API Reference』と『Oracle Identity Managementアプリケーション開発者ガイド』の「JNDIに対するJava API拡張機能の使用」で、oracle.ldap.util.Subscriber.createUser()
メソッドの説明に誤りがあります。
『Oracle Internet Directory API Reference』のcreatUser()
の説明で、すべてのuseMandatoryAttr
という語をuseMandatoryObjectclasses
に変更する必要があります。
『Oracle Internet Directory API Reference』の次の文は正しくありません。
「オブジェクト・クラスは自動的に選択されるため、ModPropertySetに組み込む必要はありません。」
useMandatoryObjectclasses
がfalseに設定されている場合は、ModPropertySet
にオブジェクト・クラスを組み込む必要があります。
『Oracle Internet Directory API Reference』のコード・サンプルに次の行が含まれています。
User newUser = sub.createUser( ctx, mps, false );
この行は次のように変更する必要があります。
User newUser = sub.createUser( ctx, mps, true );
objectclass
属性がないため、コードを変更しないと例外がスローされます。
同様に、『Oracle Identity Managementアプリケーション開発者ガイド』の「JNDIに対するJava API拡張機能の使用」には次の行があります。
User newUser = sub.createUser( ctx, mps );
この行は次のように変更する必要があります。
User newUser = sub.createUser( ctx, mps, true );
ユーザー名または他のHTTPヘッダーがマルチバイトで、mod_ossoによって設定されている場合、そのヘッダーはMIMEデコーディングを使用してデコードする必要があります。『Oracle Identity Managementアプリケーション開発者ガイド』の「シングル・サインオン対応のアプリケーションの開発」には、この方法を示すJavaの例が必要です。
次のコード例は、サーブレット・リクエスト・オブジェクトから取得した、MIMEエンコードされたマルチバイトのユーザー名をデコードする方法を示します。
import javax.mail.internet.MimeUtility; ... String mimeUserName = request.getRemoteUser(); String userName = MimeUtility.decodeText(mimeUserName);
「ディレクトリ・サーバー」の「ユーザー統計」の「ヘルプ」ページに、「Oracle Directory Monitorまたはコマンドラインを使用して、監視するユーザーを表に追加できます。」という文章があります。この文で、Oracle Directory MonitorをOracle Directory Managerに変更する必要があります。
次の「注意」を、『Oracle Internet Directory管理者ガイド』の動的グループの章の「動的グループ作成のためのスキーマ要素」に追加する必要があります。
注意: labeledURI属性のhost : port セクションは構文を表すためだけに示されています。labeledURI属性のhostとportの設定に関係なく、ディレクトリ・サーバーは常にローカル・ディレクトリ・サーバーから動的グループのメンバーを計算します。他のディレクトリ・サーバーからメンバーを取得することはできません。 |
次の例を、『Oracle Internet Directory管理者ガイド』の「ディレクトリ・エントリの管理」に追加する必要があります。
次のコマンドラインを使用して、値がないものも含めてすべての属性を表示します。
ldapsearch -b "cn=subschemasubentry" -s base "objectclass=*"
『Oracle Identity Managementアプリケーション開発者ガイド』の「PL/SQLサーバー・プラグイン」および『Oracle Internet Directory管理者ガイド』の「Oracle Internet Directoryのパスワード・ポリシー・プラグイン」で、パス名の先頭にあるすべての$ORACLE/
を$ORACLE_HOME/
に変更する必要があります。
『Oracle Internet Directory管理者ガイド』の「Oracle Internet Directoryレプリケーションの概要」に次の誤りがあります。
図29-10で、「4'」の矢印の方向を逆にしてください。また、この図の4つの番号を表9-1のように変更する必要があります。
図29-12の説明で、「ノード4が失敗したら、ノード4にフェイルオーバーできます」で始まる文を「ノード2が失敗したら、ノード4にフェイルオーバーできます」に変更する必要があります。
図29-14の説明で、除外されたサブツリーの記述をcn=user1,cn=hr,c=us
からcn=user
s
,cn=hr,c=us
に変更する必要があります。
『Oracle Internet Directory管理者ガイド』の「ディレクトリのバックアップとリストア」の章の最初のページには、手順1のコマンドラインが次のように記載されています。
ldifwrite connect="connect_string" basedn="naming_context" file="backup.ldif"
これは次のように修正する必要があります。
ldifwrite connect="connect_string" basedn="naming_context" ldiffile="backup.ldif"
『Oracle Identity Managementアプリケーション開発者ガイド』の「Javaサーバー・プラグイン」の章で、「例2: Active Directoryの外部認証プラグイン」にある次の記述を変更してください。
// Retrieve the Base DN, Attribute and Attribute Value String bdn = opObj.getBaseDN().substring(0, opObj.getBaseDN().lastIndexOf("cn=users,dc=us,dc=oracle,dc=com")-1) +",cn=users,dc=dlin,dc=net";
次のように変更します。
// Retrieve the Base DN, Attribute and Attribute Value LdapBaseEntry baseEntry = plgObj.getLdapBaseEntry(); String bdn = baseEntry.getDN().substring(0, baseEntry.getDN().lastIndexOf("cn=users,dc=us,dc=oracle,dc=com")-1) +",cn=users,dc=dlin,dc=net";
『Oracle Internet Directory管理者ガイド』の「Secure Sockets Layer(SSL)とディレクトリ」で、「SSL対応のOracle Internet Directoryの構成」の手順13から次の内容を削除してください。
Windowsシステムでは、追加の構成手順を実行する必要があります。Oracle Directory Serviceのログイン・アカウントを、ローカル・システム・アカウントからWalletを所有するユーザーのアカウントに変更します。このユーザーは、Administrator Group
のメンバーである必要があります。次の手順に従ってアカウントを変更します。
Windowsの場合、「スタート」→「設定」→「コントロール パネル」→「管理ツール」→「サービス」を選択します。
「プロパティ」→「ログオン」をクリックします。
「ローカル システム アカウント」から、ウォレットを作成した際にログインしたアカウントに変更します。サービスを停止して、再起動します。
Oracle Directory Managerのオンライン・ヘルプおよび『Oracle Internet Directory管理者ガイド』の付録Aに示されている一部の属性の定義に誤りがあります。属性の定義とデフォルトについては、『Oracle Identity Managementユーザー・リファレンス』および『Oracle Internet Directory管理者ガイド』の前半部分を参照してください。次の誤りが報告されています。
表9-2 Oracle Directory Managerヘルプおよび付録Aの誤り
属性 | 正しい定義 | ヘルプおよび付録Aの間違っている定義 |
---|---|---|
パージの開始( |
ガベージ・コレクタの実行開始時間。形式はyyyymmddhhmmss。デフォルト値は、Oracle Internet Directoryのインストール日の午前12:00です。 |
ガベージ・コレクタの最初の実行時間(秒単位)。形式はYYYYMMDDHH24MISS。この属性はオプションです。デフォルト値は0です。この値は、ガベージ・コレクタがすぐに有効になることを示します。 |
パスワード有効期限( |
パスワードの最大有効時間(秒単位)。この時間に達すると、パスワードは期限切れとみなされます。デフォルトは10368000秒(120日)です。 |
指定のパスワードが有効な秒数。この属性が存在しない場合、または値が0の場合、パスワードは期限切れになりません。デフォルトでは、ユーザー・パスワードは期限切れになりません。 |
パスワードの期限切れ警告( |
パスワードの期限が切れる前に、認証を受けるユーザーに期限切れの警告メッセージが返される最大秒数。デフォルト値は604800秒(7日)です。 |
パスワードの期限が切れる前に、ディレクトリ・サーバーがユーザーに警告を送信する秒数。パスワードの期限が有効である場合、ディレクトリ・サーバーは、デフォルトでパスワードの期限が切れる3日前にユーザーに警告を送信します。 |
『Oracle Internet Directory管理者ガイド』にpwdGraceLoginLimit
の最大値が指定されていません。最大値は250です。
『Oracle Internet Directory管理者ガイド』の第16章の「受信した機密の属性のプライバシ」で、orcldataprivacymode
の値を0から1に変更してプライバシ・モードを有効にする必要があると説明されています。ただし、このように変更すると、OC4J_SECURITY
が起動されません。OC4J_SECURITY
またはOracle Application Server Single Sign-Onを使用する場合は、値を1に変更しないでください。