ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Internet Directory管理者ガイド
11g リリース1(11.1.1)
B55919-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

45 Oracle Internet Directoryサーバー・プラグインの開発

この章では、Oracle Internet Directoryサーバー・プラグイン、およびOracle Internet Directoryのプラグイン・フレームワークについて説明します。

この章の項目は次のとおりです。

45.1 Oracle Internet Directoryサーバー・プラグインの開発の概要

サーバー・プラグインは、Oracle Internet Directoryサーバーの機能拡張に使用されるカスタマイズされたプログラムです。サーバー・プラグインは、PL/SQLパッケージ、Javaプログラムまたはパッケージ、共有オブジェクトまたはライブラリ、Windows上のダイナミック・リンク・ライブラリのいずれにもできます。各プラグインには構成エントリがOracle Internet Directoryサーバーにあります。構成エントリでは、プラグイン起動の条件が指定されます。プラグイン起動の条件には次のようなものがあります。

ディレクトリ・サーバーのプラグインは、次のような機能をディレクトリ・サーバーに追加します。

起動時に、ディレクトリ・サーバーはプラグイン構成およびライブラリをロードします。その後、リクエストを処理するときに、指定されたイベントが発生した場合は常に、プラグイン・ファンクションをコールします。

図45-1に、LDAPクライアントが個々のアプリケーションを使用して行う、Oracleディレクトリ・サーバーとの間の情報の送受信について示します。同様に、プラグイン構成ツールもディレクトリ・サーバーに情報を送信します。ディレクトリ・サーバーはデータをプラグイン・モジュール1、プラグイン・モジュール2およびプラグイン・モジュール3に送信します。各プラグイン・モジュールはプラグイン・モジュール・インタフェースとプラグイン・ロジックを備えています。各プラグイン・モジュールは、LDAP APIおよびプラグインLDAPとの間の情報の送受信を行います。

図45-1 Oracle Internet Directoryプラグイン・フレームワーク

この図については本文で説明しています。

通常のディレクトリ・サーバー操作の前後に実行するか、操作に追加して実行するかによって、プラグインが実行する作業は異なります。次の項では、様々な種類の操作ベースのプラグインについて説明します。

45.1.1 JVMへのオプション渡し

Javaサーバー・プラグインは、oidldapdサーバー自体の内部にあるJava仮想マシン(JVM)で実行されます。JVMは、Java Native Interface(JNI)を使用して実装されます。oidldapdサーバーは、JVMを起動するときにオプションをJVMに渡します。これらのJVMオプションは、DSA構成エントリのorcljvmoptions属性の中に含まれています。デフォルトでは、この属性の値は-Xmx64Mで、64MBのヒープ・サイズが指定されます。orcljvmoptionsの値を変更して、これらのオプションを変更できます。通常、これを行う必要があるのは、デフォルトの64Mを超えるヒープ・サイズを必要とするプラグインを追加する場合のみです。

DSA構成エントリのその他の属性と同じ方法で、またはOracle Enterprise Manager Fusion Middleware Controlを使用して、この属性を変更できます。詳細は、第9.4項「LDAPツールを使用したシステム構成属性の管理」および第45.4.5項「Oracle Enterprise Manager Fusion Middleware Controlを使用したJVMオプションの管理」を参照してください。

45.1.2 サーバー・プラグインの言語のサポート

10g(10.1.4.0.1)では、Oracle Internet Directoryは、JavaとPL/SQLのプラグインをサポートしています。この章では、JavaおよびPL/SQLプラグインに共通する情報について説明します。付録FではPL/SQLプラグインに固有の追加情報を示し、付録EではJavaプラグインに固有の追加情報を示します。

45.1.3 サーバー・プラグインの前提条件

Oracle Internet Directoryプラグインを開発するには、次の事項をよく理解している必要があります。

  • 一般的なLDAPの概念

  • Oracle Internet Directory

  • Oracle Internet DirectoryとOracle Application Serverの統合

次のいずれかの分野のプログラミング・スキルを備えている必要があります。

  • SQL、PL/SQLおよびデータベースRPC

  • Java

45.1.4 サーバー・プラグインの利点

プラグインを使用してLDAP操作を拡張するには、次のような方法があります。

  • サーバーによるデータに対するLDAP操作の実行前に、データの妥当性をチェックできます。

  • サーバーがLDAP操作を正常に終了した後で、定義した処置を実行できます。

  • 拡張操作を定義できます。

  • 外部に格納された資格証明を介してユーザーを認証できます。

  • 既存のサーバー・モジュールを独自のサーバー・モジュールに置換できます。

起動時に、ディレクトリ・サーバーはプラグイン構成およびライブラリをロードします。様々なLDAPリクエストの処理中にプラグイン・ファンクションをコールします。


関連項目:

『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のパスワード・ポリシー・プラグインに関する章。この章には、独自のパスワード値チェックを実装して、Oracle Internet Directoryサーバーに配置する方法の例が用意されています。


45.1.5 プラグイン設計のガイドライン

プラグイン設計時は、次のガイドラインを参考にします。

  • プラグインを使用して、特定のLDAP操作が確実に実行され、関連アクションも確実に実行されるようにします。

  • プラグインは、プログラム本体の文をどのユーザーやLDAPアプリケーションが発行したかに関係なく、その文に対して起動される、一元化されたグローバル操作にのみ使用します。

  • 再帰プラグインは作成しないでください。たとえば、それ自体がldapbind文を発行するpre_ldap_bindプラグインを作成すると、リソースが不足するまでこのプラグインが再帰的に実行されるようになります。

    プラグインは慎重に使用してください。プラグインは、関連するLDAP操作が発生するたびに実行されます。

45.1.6 サーバー・プラグイン・フレームワーク

プラグイン・フレームワークとは、プラグインを開発、構成および適用する環境です。個々のプラグイン・インスタンスは、プラグイン・モジュールと呼びます。

プラグイン・フレームワークには、次のものが含まれます。

  • プラグイン構成ツール

  • プラグイン・モジュール・インタフェース

  • プラグインLDAP API

    • PL/SQLパッケージODS.LDAP_PLUGIN

    • Javaパッケージoracle.ldap.ospf

どちらの言語の場合も、次の一般的手順に従い、サーバー・プラグイン・フレームワークを使用します。

  1. ユーザー定義プラグイン・プロシージャをPL/SQLまたはJavaで作成します。

  2. プラグイン・モジュールをコンパイルします。

  3. コマンドラインまたはOracle Directory Services Managerのいずれかを使用し、構成エントリ・インタフェースを介して、プラグイン・モジュールを登録します。

45.1.7 ディレクトリでサポートされているLDAP操作およびタイミング

Oracle Internet Directoryサーバーでは、次のLDAP操作のプラグインをサポートしています。

  • ldapadd

  • ldapbind

  • ldapcompare

  • ldapdelete

  • ldapmoddn(Javaのみ)

  • ldapmodify

  • ldapsearch

Oracle Internet Directoryでは、プラグインに対して4つの操作タイミングをサポートしています。

  • 操作時

  • 操作時置換

これらについては、この後の4項で説明します。

45.1.7.1 操作前サーバー・プラグイン

サーバーは、LDAP操作の実行前に、操作前プラグイン・モジュールをコールします。このタイプのプラグインの主な目的は、データがLDAP操作で使用される前に、データを検証することです。

操作前プラグインで例外が発生すると、次のいずれかが発生します。

  • 戻りエラー・コードが警告のステータスを示したとき、関連のLDAPリクエストは続行します。

  • 戻りコードが失敗ステータスを示すと、リクエストは続行されません。

関連のLDAPリクエストが後で失敗すると、ディレクトリではプラグイン・モジュールでコミットされたコードをロールバックしません。

45.1.7.2 操作後サーバー・プラグイン

Oracle Internet Directoryサーバーは、LDAP操作の実行後に、操作後プラグイン・モジュールをコールします。このタイプのプラグインの主な目的は、特定のLDAP操作が実行された後に、ファンクションを起動することです。たとえば、ロギングや通知は、操作後プラグイン・ファンクションです。

操作後プラグインで例外が発生すると、関連のLDAP操作はロールバックされません。

関連のLDAPリクエストが失敗しても、操作後プラグインはそのまま実行されます。

45.1.7.3 操作時サーバー・プラグイン

ディレクトリは、標準のLDAP操作の実行中に、操作時プラグイン・モジュールをコールします。操作時プラグインは、操作に対するサーバー自身のコードの直前に実行されます。このタイプのプラグインの主な目的は、同じLDAPトランザクション内で既存の操作を強化することです。操作時プラグインが失敗すると、標準のLDAP操作は実行されません。操作時プラグインが正常に完了しても、標準のLDAP操作が失敗すると、プラグインで加えられた変更はロールバックされません。

たとえば、ldapcompare操作とともに操作時プラグインを使用できます。ディレクトリでは、ディレクトリ自身のサーバー比較コードを実行し、プラグイン開発者によって定義されたプラグイン・モジュールを実行します。

PL/SQL操作時プラグインは、ldapaddldapdeleteおよびldapmodifyでサポートされています。Java操作時プラグインは、ldapaddldapdeleteldapmoddnldapmodifyおよびldapsearchでサポートされています。

45.1.7.4 操作時置換サーバー・プラグイン

操作時置換プラグインは、操作に対するサーバー自身のコードのかわりに実行されます。たとえば、ldapcompare操作とともに操作時置換プラグインを使用できます。ディレクトリでは、ディレクトリ自身の比較コードは実行されません。かわりに、比較の実行はプラグイン・モジュールに任せます。

PL/SQL操作時置換プラグインは、ldapaddldapcompareldapdeleteldapmodifyおよびldapbindでのみサポートされています。

Java操作時置換プラグインは、ldapadd、ldapbind、ldapcompare、ldapdeleteldapmoddnldapmodifyおよびldapsearchでサポートされています。

45.1.8 レプリケーション環境でのプラグインの使用

レプリケーション環境にプラグインをデプロイする際は注意してください。次のような誤った手法により一貫性のない状態になる場合があります。

  • 他のノードへのプラグイン・メタデータのレプリケート

  • 一部のメンバー・ノードへのプラグインのインストール

  • ディレクトリ・データに依存する追加チェックのプラグインへの組込み

  • プラグイン・プログラムまたはLDAP操作別のディレクトリ・エントリの変更

すべてのノードにプラグインをデプロイして、レプリケーションによる変更でプラグインが起動されないように構成した場合は、レプリケーション環境のディレクトリ・エントリを変更するプラグインを使用できます。この手順は次のとおりです。

  • すべてのノードのレプリカIDをグループに追加します。

  • プラグイン属性のorclpluginrequestneggroup値としてグループをインクルードします。次に例を示します。

    orclpluginrequestneggroup: cn=pluginNegate,cn=groups,cn=oraclecontext. 
    

    変更リクエストがグループcn=pluginNegateのメンバーから発生していることがプラグインによって検出された場合、常にこのプラグインは起動されません。

45.2 プラグインの作成

次の一般的な手順に従い、サーバー・プラグイン・フレームワークを使用します。

  1. ユーザー定義プラグイン・プロシージャをPL/SQLまたはJavaで作成します。

  2. プラグイン・モジュールをコンパイルします。

  3. コマンドラインまたはOracle Directory Services Managerのいずれかを使用し、構成エントリ・インタフェースを介して、プラグイン・モジュールを登録します。

45.3 コマンドラインでのプラグインの登録

ディレクトリ・サーバーが適時にプラグインをコールできるように、プラグインをディレクトリ・サーバーに登録する必要があります。登録するには、cn=plugin,cn=subconfigsubentryの下のディレクトリ・スキーマにプラグインのエントリを作成します。

45.3.1 プラグイン構成エントリの作成

表45-1に、プラグイン構成で指定できるオブジェクト・クラスおよび属性とその説明を示します。

表45-1 プラグイン構成オブジェクトおよび属性

名前 必須

objectclass

orclPluginConfig

objectclass

top

×

dn

プラグイン・エントリ識別名

cn

プラグイン・エントリ名

orclPluginAttributeList

プラグインの実行を制御する、セミコロンで区切られた属性名のリスト。ターゲット属性がリストに含まれている場合は、プラグインが呼び出されます。ldapcompareプラグインおよびldapmodifyプラグインにのみ有効です。

×

orclPluginEnable

0 = 無効(デフォルト)

1 = 有効

×

orclPluginEntryProperties

ldapsearchフィルタ・タイプ値。たとえば、orclPluginEntryProperties: (&(objectclass=inetorgperson)(sn=Cezanne))と指定すると、ターゲット・エントリにinetorgpersonに等しいobjectclassと、Cezanneに等しいsnがある場合、プラグインは起動されません。

×

orclPluginIsReplace

0 = 無効(デフォルト)

1 = 有効

when_replaceタイミングの場合、これを有効にして、orclPluginTimingwhenに設定します。

×

orclPluginKind

PL/SQLまたはJava(デフォルトはPL/SQL)

×

orclPluginLDAPOperation

次のいずれかの値です。

ldapcompare

ldapmodify

ldapbind

ldapadd

ldapdelete

ldapsearch

ldapmoddn(Javaのみ)

orclPluginName

プラグイン名

orclPluginFlexfield

カスタム・テキスト情報(Javaのみ)。サブタイプを示すには、orclPluginFlexfield;subtypename(orclPluginFlexfield;minPwdLength: 8など)を指定します。

×

orclPluginBinaryFlexfield

カスタム・バイナリ情報(Javaのみ)。

×

orclPluginSecuredFlexfield

クリアテキストで表示されることのないカスタム・テキスト情報(Javaのみ)。サブタイプを示すには、orclPluginSecuredFlexfield;subtypename(orclPluginSecuredFlexfield;telephonenumber1: 650.123.456など)を指定します。値は暗号化形式で格納および表示されます。検索結果には、orclPluginSecuredFlexfield;telephonenumber1: 1291zjs8134のように表示されることがあります。

ユーザーがこの属性をクリアテキストで取得できないようにするため、Oracle Internet Directoryでは必ずプライバシ・モードを有効にします。『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』の受信した機密の属性のプライバシに関する項を参照してください。

×

orclPluginRequestGroup

セミコロンで区切られたグループ・リストで、プラグインの実行を制御します。このグループを使用して、プラグインを実際に起動するユーザーを指定できます。

たとえば、プラグインの登録時にorclpluginrequestgroup:cn=security,cn=groups,dc=oracle,dc=comを指定すると、グループcn=security,cn=groups,dc=oracle,dc=comに属しているユーザーからldapリクエストがないかぎり、プラグインは起動されません。

×

orclPluginRequestNegGroup

セミコロンで区切られたグループ・リストで、プラグインの実行を制御します。このグループを使用して、プラグインを起動できないユーザーを指定できます。たとえば、プラグインの登録時にorclpluginrequestgroup: cn=security,cn=groups,dc=oracle,dc=comを指定すると、グループcn=security,cn=groups,dc=oracle,dc=comに属しているユーザーからのLDAPリクエストである場合、プラグインは起動されません。

×

orclPluginResultCode

LDAPの結果コードを指定する整数値。この値を指定すると、LDAP操作がこの結果コードの状態の場合にのみ、プラグインが起動します。

操作後プラグイン・タイプにのみ有効です。

×

orclPluginShareLibLocation

ダイナミック・リンク・ライブラリのファイルの位置。この値が存在しない場合、Oracle Internet Directoryサーバーではプラグイン言語はPL/SQLであるとみなされます。

×

orclPluginSubscriberDNList

セミコロンで区切られた識別名のリストで、プラグインの実行を制御します。LDAP操作のターゲット識別名がリストに含まれている場合、プラグインが起動されます。

×

orclPluginTiming

次のいずれかの値です。

操作時

操作時置換タイミングの場合、whenを指定して、orclPluginIsReplaceを有効にします。

×

orclPluginType

次のいずれかの値です。

構成

属性

パスワード・ポリシー

構文

一致規則

関連項目: 「ディレクトリでサポートされているLDAP操作およびタイミング」

orclPluginVersion

サポート対象のプラグイン・バージョン番号

×

orclPluginClassReloadEnabled

この値が1の場合、サーバーではプラグインを起動するたびにプラグイン・クラスをリロードします。この値が0の場合、サーバーでは最初にプラグインを起動したときにのみクラスをロードします。



45.3.2 コマンドライン・ツールによるプラグイン構成エントリの追加

コマンドラインからプラグイン構成エントリを追加するには、プラグイン構成を含むLDIFファイルを作成します。cn=plugin,cn=subconfigsubentryで識別名を指定します。

次の2つの部分から成るLDIFファイルmy_ldif_file.ldifは、my_plugin1という操作ベース・プラグイン用のエントリを作成します。

dn: cn=when_comp,cn=plugin,cn=subconfigsubentry
objectclass: orclPluginConfig
objectclass: top
orclPluginName: my_plugin1
orclPluginType: configuration
orclPluginTiming: when
orclPluginLDAPOperation: ldapcompare
orclPluginEnable: 1
orclPluginVersion: 1.0.1
orclPluginIsReplace: 1
cn: when_comp
orclPluginKind: PLSQL
orclPluginSubscriberDNList: dc=COM,c=us;dc=us,dc=oracle,dc=com;dc=org,dc=us;
 o=IMC,c=US
orclPluginAttributeList: userpassword
dn: cn=post_mod_plugin, cn=plugin,cn=subconfigsubentry
objectclass: orclPluginConfig
objectclass: top
orclPluginName: my_plugin1
orclPluginType: configuration
orclPluginTiming: post
orclPluginLDAPOperation: ldapmodify
orclPluginEnable: 1
orclPluginVersion: 1.0.1
cn: post_mod_plugin
orclPluginKind: PLSQL

このファイルを、次のようなコマンドで、ディレクトリに追加します。

ldapadd -p 3060 -h myhost -D binddn -q -f my_ldif_file.ldif

注意:

プラグイン構成エントリはレプリケートされません。レプリケートすると、一貫性のない状態になります。


45.4 Oracle Directory Services ManagerおよびOracle Enterprise Manager Fusion Middleware Controlを使用したプラグインの管理

Oracle Directory Services Managerを使用して、プラグインを登録、編集および削除できます。

この項の内容は次のとおりです。

  1. 第45.4.1項「Oracle Directory Services Managerを使用した新しいプラグインの作成」

  2. 第45.4.2項「Oracle Directory Services Managerによるプラグインの登録」

  3. 第45.4.3項「Oracle Directory Services Managerによるプラグインの編集」

  4. 第45.4.4項「Oracle Directory Services Managerによるプラグインの削除」

  5. 第45.4.5項「Oracle Enterprise Manager Fusion Middleware Controlを使用したJVMオプションの管理」

45.4.1 Oracle Directory Services Managerを使用した新しいプラグインの作成

新しいプラグインを作成する手順は、次のとおりです。

  1. 第7.4.5項「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。

  2. タスク選択バーで、「拡張」を選択します。

  3. 「プラグイン」を展開します。左側のパネルにエントリが表示されます。

  4. 対象のプラグイン管理構成エントリを選択し、有効にします。

  5. 「作成」アイコンをクリックします。右側のペインに新規プラグイン・ウィンドウが表示されます。

  6. この時点でプラグインを有効にするには、「プラグイン有効化」を選択します。

  7. 「プラグイン名」を入力します。

  8. 他の必須プロパティ用の値を選択します。

  9. 値を入力した後、「OK」を選択します。作成したプラグインがこの時点でページの左側に表示されます。

45.4.2 Oracle Directory Services Managerによるプラグインの登録

プラグインを登録する手順は、次のとおりです。

  1. 第7.4.5項「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。

  2. タスク選択バーで、「拡張」を選択します。

  3. 「プラグイン」を展開します。左側のパネルにエントリが表示されます。

  4. 対象のプラグイン管理構成エントリを選択し、有効にします。右側のペインに「プラグイン管理」タブが表示されます。

  5. 「プラグイン有効化」を選択します。

  6. 「適用」をクリックします。

  7. 値を入力した後、「OK」を選択します。作成したプラグインがこの時点でページの左側に表示されます。

45.4.3 Oracle Directory Services Managerによるプラグインの編集

プラグイン・エントリを編集する手順は、次のとおりです。

  1. タスク選択バーで、「拡張」を選択します。

  2. 「プラグイン」を展開します。左側のパネルにエントリが表示されます。

  3. 対象のプラグイン管理構成エントリを選択し、変更します。

  4. ページの右側の「必須プロパティ」および「オプション・プロパティ」に変更内容を入力します。

  5. 「適用」をクリックします。

45.4.4 Oracle Directory Services Managerによるプラグインの削除

プラグインを削除する手順は、次のとおりです。

  1. タスク選択バーで、「拡張」を選択します。

  2. 「プラグイン」を展開します。左側のパネルにエントリが表示されます。

  3. 削除するプラグイン・エントリを選択します。

  4. 「削除」アイコンをクリックします。削除したプラグイン・エントリは、リストに表示されなくなります。

45.4.5 Oracle Enterprise Manager Fusion Middleware Controlを使用したJVMオプションの管理

JVMオプションは、DSA構成エントリのorcljvmoptions属性の中に含まれています。デフォルト値は-Xmx64Mで、ヒープ・サイズが64Mに設定されます。より大きなヒープを割り当てる必要がある場合は、この属性を更新します。

Oracle Enterprise Manager Fusion Middleware Controlを使用してこの属性を変更する方法は、第9.2.2項「共有プロパティの構成」を参照してください。コマンドラインから変更する方法は、第13.3項「LDAPコマンドライン・ツールを使用したエントリの管理」を参照してください。