45 Oracle Internet Directoryサーバー・プラグインの開発
45.1 Oracle Internet Directoryサーバー・プラグイン・フレームワークの概要
サーバー・プラグインは、Oracle Internet Directoryサーバーの機能拡張に使用されるカスタマイズされたプログラムです。
サーバー・プラグインは、PL/SQLパッケージ、Javaプログラムまたはパッケージ、共有オブジェクトまたはライブラリ、Windows上のダイナミック・リンク・ライブラリのいずれにもできます。各プラグインには構成エントリがOracle Internet Directoryサーバーにあります。構成エントリでは、プラグイン起動の条件が指定されます。プラグイン起動の条件には次のようなものがあります。
-
LDAP操作(
ldapbind
、ldapmodify
など) -
LDAP操作に関連したタイミング(pre_bind、post_modifyなど)
ディレクトリ・サーバーのプラグインは、次のような機能をディレクトリ・サーバーに追加します。
-
ディレクトリ・サーバーによる操作実行前のデータの妥当性チェック
-
サーバーによる操作実行後の指定処理の実行
-
パスワード・ポリシーの定義
-
外部に格納された資格証明によるユーザーの認証
起動時に、ディレクトリ・サーバーはプラグイン構成およびライブラリをロードします。その後、リクエストを処理するときに、指定されたイベントが発生した場合は常に、プラグイン・ファンクションをコールします。
図45-1に、LDAPクライアントが個々のアプリケーションを使用して行う、Oracleディレクトリ・サーバーとの間の情報の送受信について示します。同様に、プラグイン構成ツールもディレクトリ・サーバーに情報を送信します。ディレクトリ・サーバーはデータをプラグイン・モジュール1、プラグイン・モジュール2およびプラグイン・モジュール3に送信します。各プラグイン・モジュールはプラグイン・モジュール・インタフェースとプラグイン・ロジックを備えています。各プラグイン・モジュールは、LDAP APIおよびプラグインLDAPとの間の情報の送受信を行います。
図45-1 Oracle Internet Directoryプラグイン・フレームワーク

通常のディレクトリ・サーバー操作の前後に実行するか、操作に追加して実行するかによって、プラグインが実行する作業は異なります。
この項では、次の項目について説明します。
45.1.1 サーバー・プラグインの言語のサポート
10g (10.1.4.0.1)では、Oracle Internet Directoryは、JavaとPL/SQLのプラグインをサポートしています。
この章では、JavaおよびPL/SQLプラグインに共通する情報について説明します。「PL/SQLサーバー・プラグイン開発者リファレンス」ではPL/SQLプラグインに固有の追加情報を示し、「Javaサーバー・プラグイン開発者リファレンス」では、Javaプラグインに固有の追加情報を示しています。
45.1.2 サーバー・プラグイン開発の前提条件
Oracle Internet Directoryプラグインを開発するには、次の各トピックについてよく理解している必要があります。
-
一般的なLDAPの概念
-
Oracle Internet Directory
-
Oracle Internet DirectoryとOracle Application Serverの統合
次のいずれかの分野のプログラミング・スキルを備えている必要があります。
-
SQL、PL/SQLおよびデータベースRPC
-
Java
45.1.3 サーバー・プラグインを使用する利点
プラグインを使用してLDAP操作を拡張するには、次のような方法があります。
-
サーバーによるデータに対するLDAP操作の実行前に、データの妥当性をチェックできます。
-
サーバーがLDAP操作を正常に終了した後で、定義した処置を実行できます。
-
拡張操作を定義できます。
-
外部に格納された資格証明を介してユーザーを認証できます。
-
既存のサーバー・モジュールを独自のサーバー・モジュールに置換できます。
起動時に、ディレクトリ・サーバーはプラグイン構成およびライブラリをロードします。様々なLDAPリクエストの処理中にプラグイン・ファンクションをコールします。
関連項目:
パスワード・ポリシー・プラグインについては、『Oracle Internet Directoryの管理』の「カスタマイズされたパスワード・ポリシー・プラグインの構成」を参照してください。この章には、独自のパスワード値チェックを実装して、Oracle Internet Directoryサーバーに配置する方法の例が用意されています。
45.1.4 サーバー・プラグイン設計のガイドライン
プラグイン設計時は、次のガイドラインを参考にします。
-
プラグインを使用して、特定のLDAP操作が確実に実行され、関連アクションも確実に実行されるようにします。
-
プラグインは、プログラム本体の文をどのユーザーやLDAPアプリケーションが発行したかに関係なく、その文に対して起動される、一元化されたグローバル操作にのみ使用します。
-
再帰プラグインは作成しないでください。たとえば、それ自体が
ldapbind
文を発行するpre_ldap_bind
プラグインを作成すると、リソースが不足するまでこのプラグインが再帰的に実行されるようになります。プラグインは慎重に使用してください。プラグインは、関連するLDAP操作が発生するたびに実行されます。
45.1.5 サーバー・プラグイン・フレームワークの使用方法
プラグイン・フレームワークとは、プラグインを開発、構成および適用する環境です。個々のプラグイン・インスタンスは、プラグイン・モジュールと呼びます。
プラグイン・フレームワークには、次のものが含まれます。
-
プラグイン構成ツール
-
プラグイン・モジュール・インタフェース
-
プラグインLDAP API:
-
PL/SQLパッケージ
ODS.LDAP_PLUGIN
-
Javaパッケージ
oracle.ldap.ospf
-
どちらの言語の場合も、次の一般的ステップに従い、サーバー・プラグイン・フレームワークを使用します。
45.1.6 Oracle Internet DirectoryでサポートされるLDAP操作
Oracle Internet Directoryサーバーでは、次のLDAP操作のプラグインをサポートしています。
-
ldapadd
-
ldapbind
-
ldapcompare
-
ldapdelete
-
ldapmoddn
(Javaのみ) -
ldapmodify
-
ldapsearch
45.1.7 Oracle Internet DirectoryでサポートされるLDAPタイミングの理解
Oracle Internet Directoryでは、プラグインに対して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操作時プラグインは、ldapadd
、ldapdelete
およびldapmodify
でサポートされています。Java操作時プラグインは、ldapadd
、ldapdelete
、ldapmoddn
、ldapmodify
およびldapsearch
でサポートされています。
45.1.7.4 操作時置換サーバー・プラグインについて
操作時置換プラグインは、操作に対するサーバー自身のコードのかわりに実行されます。たとえば、ldapcompare操作とともに操作時置換プラグインを使用できます。ディレクトリでは、ディレクトリ自身の比較コードは実行されません。かわりに、比較の実行はプラグイン・モジュールに任せます。
PL/SQL操作時置換プラグインは、ldapadd
、ldapcompare
、ldapdelete
、ldapmodify
およびldapbind
でのみサポートされています。
Java操作時置換プラグインは、ldapadd、ldapbind、ldapcompare、ldapdelete
、ldapmoddn
、ldapmodify
およびldapsearch
でサポートされています。
45.1.8 レプリケーション環境でのプラグインの使用
レプリケーション環境にプラグインをデプロイする際は注意してください。
次のような誤った手法により一貫性のない状態になる場合があります。
-
他のノードへのプラグイン・メタデータのレプリケート
-
一部のメンバー・ノードへのプラグインのインストール
-
ディレクトリ・データに依存する追加チェックのプラグインへの組込み
-
プラグイン・プログラムまたはLDAP操作別のディレクトリ・エントリの変更
すべてのノードにプラグインをデプロイして、レプリケーションによる変更でプラグインが起動されないように構成した場合は、レプリケーション環境のディレクトリ・エントリを変更するプラグインを使用できます。この手順は次のとおりです。
-
すべてのノードのレプリカIDをグループに追加します。
-
プラグイン属性の
orclpluginrequestneggroup
値としてグループをインクルードします。たとえば:orclpluginrequestneggroup: cn=pluginNegate,cn=groups,cn=oraclecontext.
変更リクエストがグループ
cn=pluginNegate
のメンバーから発生していることがプラグインによって検出された場合、常にこのプラグインは起動されません。
45.1.9 サーバー・プラグイン用の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を使用して、この属性を変更できます。詳細は、「LDAPツールを使用したシステム構成属性の管理」および「Oracle Enterprise Manager Fusion Middleware Controlを使用したJVMオプションの管理」を参照してください。
45.2 プラグインの作成
この項では、サーバー・プラグインを作成する手順について説明します。
サーバー・プラグイン・フレームワークを使用するには、次のステップに従います。
- ユーザー定義プラグイン・プロシージャをPL/SQLまたはJavaで作成します。
- プラグイン・モジュールをコンパイルします。
- コマンド行またはOracle Directory Services Managerのいずれかを使用し、構成エントリ・インタフェースを介して、プラグイン・モジュールを登録します。
45.3 コマンドラインでのプラグインの登録
ディレクトリ・サーバーが適時にプラグインをコールできるように、プラグインをディレクトリ・サーバーに登録する必要があります。
プラグインを登録するには、cn=plugin,cn=subconfigsubentry
の下のディレクトリ・スキーマにプラグインのエントリを作成します。
この項では、次の項目について説明します。
45.3.1 プラグイン構成エントリを作成するためのオブジェクト・クラスおよび属性
この項では、プラグイン構成で指定できるオブジェクト・クラスおよび属性とその説明を示します。
表45-1に、プラグイン構成で指定できるオブジェクト・クラスおよび属性とその説明を示します。
表45-1 プラグイン構成オブジェクトおよび属性
名前 | 値 | 必須 |
---|---|---|
|
|
はい |
|
|
いいえ |
|
プラグイン・エントリ識別名 |
はい |
|
プラグイン・エントリ名 |
はい |
|
プラグインの実行を制御する、セミコロンで区切られた属性名のリスト。ターゲット属性がリストに含まれている場合は、プラグインが呼び出されます。 |
いいえ |
|
|
いいえ |
|
|
いいえ |
|
|
いいえ |
|
PL/SQLまたはJava(デフォルトはPL/SQL) |
いいえ |
|
次のいずれかの値になる。
|
はい |
|
プラグイン名 |
はい |
|
カスタム・テキスト情報(Javaのみ)。サブタイプを示すには、 |
いいえ |
|
カスタム・バイナリ情報(Javaのみ)。 |
いいえ |
|
クリアテキストで表示されることのないカスタム・テキスト情報(Javaのみ)。サブタイプを示すには、 ユーザーがこの属性をクリアテキストで取得できないようにするため、Oracle Internet Directoryでは必ずプライバシ・モードを有効にします。『Oracle Internet Directoryの管理』の取得された機密の属性のプライバシに関する項を参照してください。 |
いいえ |
|
セミコロンで区切られたグループ・リストで、プラグインの実行を制御します。このグループを使用して実際にプラグインを起動できるユーザーを指定できます。 たとえば、プラグインの登録時に |
いいえ |
|
セミコロンで区切られたグループ・リストで、プラグインの実行を制御します。このグループを使用して、プラグインを起動できないユーザーを指定できます。たとえば、プラグインの登録時に |
いいえ |
|
LDAPの結果コードを指定する整数値。この値を指定すると、LDAP操作がこの結果コードの状態の場合にのみ、プラグインが起動します。 操作後プラグイン・タイプにのみ有効です。 |
いいえ |
|
ダイナミック・リンク・ライブラリのファイルの位置。この値が存在しない場合、Oracle Internet Directoryサーバーではプラグイン言語はPL/SQLであるとみなされます。 |
いいえ |
|
セミコロンで区切られた識別名のリストで、プラグインの実行を制御します。LDAP操作のターゲット識別名がリストに含まれている場合、プラグインが起動されます。 |
いいえ |
|
次のいずれかの値になる。
操作時置換タイミングの場合、 |
いいえ |
|
次のいずれかの値になる。
|
はい |
|
サポート対象のプラグイン・バージョン番号 |
いいえ |
|
この値が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を使用して、プラグインを登録、編集および削除します。
この項では、次の項目について説明します。
45.4.1 Oracle Directory Services Managerによるプラグインの作成
この項では、Oracle Directory Services Managerを使用してプラグインを作成する手順について説明します。
新しいプラグインを作成するには、次のステップに従います。
- 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
- タスク選択バーで、「拡張」を選択します。
- 「プラグイン」を展開します。左側のパネルにエントリが表示されます。
- 対象のプラグイン管理構成エントリを選択し、有効にします。
- 「作成」アイコンをクリックします。右側のペインに新規プラグイン・ウィンドウが表示されます。
- この時点でプラグインを有効にするには、「プラグイン有効化」を選択します。
- 「プラグイン名」を入力します。
- 他の必須プロパティ用の値を選択します。
- 値を入力した後、「OK」を選択します。作成したプラグインがこの時点でページの左側に表示されます。
45.4.2 Oracle Directory Services Managerによるプラグインの登録
この項では、Oracle Directory Services Managerを使用してプラグインを登録する手順について説明します。
プラグインを登録するには、次のステップに従います。
- 「Oracle Directory Services Managerの起動」の説明に従って、Oracle Directory Services Managerを起動し、Oracle Internet Directoryサーバーに接続します。
- タスク選択バーで、「拡張」を選択します。
- 「プラグイン」を展開します。左側のパネルにエントリが表示されます。
- 対象のプラグイン管理構成エントリを選択し、有効にします。右側のペインに「プラグイン管理」タブが表示されます。
- 「プラグイン有効化」を選択します。
- 「適用」をクリックします。
- 値を入力した後、「OK」を選択します。作成したプラグインがこの時点でページの左側に表示されます。
45.4.3 Oracle Directory Services Managerによるプラグインの編集
この項では、Oracle Directory Services Managerを使用してプラグインを編集する手順について説明します。
プラグイン・エントリを編集するには、次のステップに従います。
- タスク選択バーで、「拡張」を選択します。
- 「プラグイン」を展開します。左側のパネルにエントリが表示されます。
- 対象のプラグイン管理構成エントリを選択し、変更します。
- ページの右側の「必須プロパティ」および「オプション・プロパティ」に変更内容を入力します。
- 「適用」をクリックします。
45.4.4 Oracle Directory Services Managerによるプラグインの削除
この項では、Oracle Internet Directory Services Managerを使用してプラグインを削除する手順について説明します。
プラグインを削除するには、次のステップに従います。
- タスク選択バーで、「拡張」を選択します。
- 「プラグイン」を展開します。左側のパネルにエントリが表示されます。
- 削除するプラグイン・エントリを選択します。
- 「削除」アイコンをクリックします。削除したプラグイン・エントリは、今後、リストに表示されません。
45.4.5 Oracle Enterprise Manager Fusion Middleware Controlを使用したJVMオプションの管理
JVMオプションは、DSA構成エントリのorcljvmoptions
属性の中に含まれています。デフォルト値は-Xmx64M
で、ヒープ・サイズが64Mに設定されます。より大きなヒープを割り当てる必要がある場合は、この属性を更新します。
Oracle Enterprise Manager Fusion Middleware Controlを使用してこの属性を変更するには、「共有プロパティの構成」を参照してください。コマンド行から変更する場合は、「LDAPコマンド行ツールを使用したエントリの管理」を参照してください。