Oracle® Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド

11g リリース1 (11.1.1)

B56242-05(原本部品番号:E10186-05)

目次

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

SDKの新機能

- 11g リリース1(11.1.1.7.0)のSDKの新機能

- 11gリリース1(11.1.1.6)のSDKの新機能

- 11gリリース1(11.1.1)のSDKの新機能

- 10g(10.1.4.0.1)のSDKの新機能

- リリース10.1.2のSDKの新機能

- リリース9.0.4のSDKの新機能

第I部 Oracle Identity Management用プログラミング

1 Oracle Identity Managementアプリケーションの開発

- 1.1 アプリケーション統合に使用可能なOracle Identity Managementサービス

- 1.2 既存のアプリケーションとOracle Identity Managementとの統合

- 1.3 Oracle Identity Managementのプログラミング: 概要

- 1.3.1 Oracle Internet Directory SDKでサポートされているプログラミング言語

- 1.3.2 Oracle Identity Management SDKコンポーネント

- 1.3.3 Oracle Identity Management環境でのアプリケーション開発

- 1.3.3.1 Oracle Identity Managementアプリケーションのアーキテクチャ

- 1.3.3.2 アプリケーション・ライフサイクルでのOracle Identity Managementの相互作用

- 1.3.3.3 アプリケーションをOracle Identity Managementと統合するためのサービスおよびAPI

- 1.3.3.4 既存のアプリケーションとOracle Identity Managementとの統合

2 標準的なLDAP APIを使用したアプリケーションの開発

- 2.1 LDAPの歴史

- 2.2 LDAPモデル

- 2.2.1 ネーミング・モデル

- 2.2.2 情報モデル

- 2.2.3 機能モデル

- 2.2.4 セキュリティ・モデル

- 2.2.4.1 認証

- 2.2.4.2 アクセス制御と認可

- 2.2.4.3 データ整合性

- 2.2.4.4 データ・プライバシ

- 2.2.4.5 パスワード・ポリシー

- 2.3 標準的なLDAP APIの概要

- 2.3.1 APIの使用モデル

- 2.3.2 C APIスタート・ガイド

- 2.3.3 DBMS_LDAPパッケージ・スタート・ガイド

- 2.3.4 Java APIスタート・ガイド

- 2.4 LDAPセッションの初期化

- 2.4.1 C APIを使用したセッションの初期化

- 2.4.2 DBMS_LDAPを使用したセッションの初期化

- 2.4.3 JNDIを使用したセッションの初期化

- 2.5 LDAPセッションの認証

- 2.5.1 C APIを使用したLDAPセッションの認証

- 2.5.2 DBMS_LDAPを使用したLDAPセッションの認証

- 2.6 ディレクトリの検索

- 2.6.1 検索操作のプログラム・フロー

- 2.6.2 検索有効範囲

- 2.6.3 フィルタ

- 2.6.4 C APIを使用したディレクトリの検索

- 2.6.5 DBMS_LDAPを使用したディレクトリの検索

- 2.7 セッションの終了

- 2.7.1 C APIを使用したセッションの終了

- 2.7.2 DBMS_LDAPを使用したセッションの終了

3 LDAPプロトコルに対する拡張機能

- 3.1 SASL認証

- 3.1.1 Digest-MD5を使用したSASL認証

- 3.1.1.1 Digest-MD5を使用したSASL認証に含まれる手順

- 3.1.2 外部メカニズムを使用したSASL認証

- 3.2 コントロールの使用

- 3.3 エンド・ユーザーの代理となるプロキシ

- 3.4 動的パスワード・ベリファイアの作成

- 3.4.1 動的パスワード・ベリファイアのリクエスト・コントロール

- 3.4.2 DynamicVerifierRequestControlの構文

- 3.4.3 ハッシング・アルゴリズムに必要なパラメータ

- 3.4.4 認証APIの構成

- 3.4.4.1 ldap_searchの使用時に渡されるパラメータ

- 3.4.4.2 ldap_compareの使用時に渡されるパラメータ

- 3.4.5 動的パスワード・ベリファイアのレスポンス・コントロール

- 3.4.6 動的ベリファイア・フレームワークに対する権限の取得

- 3.5 階層検索の実行

- 3.5.1 CONNECT_BYコントロールの新機能

- 3.5.2 CONNECT_BYコントロールの値フィールド

- 3.6 ソート済のLDAP検索結果

- 3.7 ページング済のLDAP検索結果

- 3.8 パスワード・ポリシー

- 3.8.1 ユーザーのプロビジョニング

- 3.8.2 ユーザー認証

- 3.8.2.1 LDAPバインド/比較操作ベースの認証

- 3.8.2.2 LDAP検索操作ベースの認証

- 3.8.3 ユーザー・アカウントのメンテナンス

4 標準的なAPIに対するOracleの拡張機能を使用したアプリケーションの開発

- 4.1 標準的なAPIに対するOracleの拡張機能の使用

- 4.2 ディレクトリへのアプリケーション・アイデンティティの作成

- 4.2.1 アプリケーションのアイデンティティの作成

- 4.2.2 アプリケーションのアイデンティティへの権限の割当て

- 4.3 ユーザーの管理

- 4.4 グループの管理

- 4.5 レルムの管理

- 4.6 ディレクトリ・サーバーの検出

- 4.6.1 Oracle Internet Directoryの検出インタフェースの利点

- 4.6.2 検出インタフェースの使用モデル

- 4.6.3 DNSからのサーバー名およびポート番号の判断

- 4.6.3.1 ネーミング・コンテキストの識別名のマッピング

- 4.6.3.2 ローカル・マシンのドメイン・コンポーネントによる検索

- 4.6.3.3 DNSでのデフォルトSRVレコードの検索

- 4.6.4 DNSサーバー検出の環境変数

- 4.6.5 DNSサーバー検出のプログラミング・インタフェース

5 JNDIに対するJava API拡張機能の使用

- 5.1 Java拡張機能のインストール

- 5.2 oracle.ldap.utilパッケージを使用したLDAPオブジェクトのモデル化

- 5.3 PropertySetCollection、PropertySetおよびPropertyクラス

- 5.4 ユーザーの管理

- 5.5 ユーザーの認証

- 5.6 ユーザーの作成

- 5.7 ユーザー・オブジェクトの取得

- 5.8 レルムからのオブジェクトの取得

- 5.9 例: Oracle Single Sign-Onログイン名の検索

- 5.10 ディレクトリ・サーバーの検出

- 5.11 例: ディレクトリ・サーバーの検出

- 5.12 Digest-MD5を使用したSASL認証の実行

- 5.13 例: SASL Digest-MD5のauth-intモードおよびauth-confモードの使用

- 5.14 LDAPトランザクションの使用

- 5.15 例:LDAPトランザクションの使用

- 5.15.1 トランザクション開始リクエスト・インタフェースの実装(LdapStartTxnReq.java)

- 5.15.2 トランザクション開始レスポンス・インタフェースの実装(LdapStartTxnRes.java)

- 5.15.3 トランザクション終了リクエスト・インタフェースの実装(LdapEndTxnReq.java)

- 5.15.4 トランザクション終了レスポンス・インタフェースの実装(LdapEndTxnRes.java)

- 5.15.5 トランザクション・セマンティクス内のLDAP更新操作でのJavaおよび疑似コード・インタフェース・サンプル(LdapTxnOperation.java)

6 PL/SQLでのAPI拡張機能の使用

- 6.1 PL/SQL拡張機能のインストール

- 6.2 ハンドルを使用したディレクトリ・データへのアクセス

- 6.3 ユーザーの管理

- 6.4 ユーザーの認証

- 6.5 PL/SQL LDAP APIの依存性と制限事項

7 プロビジョニング統合アプリケーションの開発

第II部 Oracle Internet Directoryプログラミング・リファレンス

8 C APIリファレンス

- 8.1 Oracle Internet Directory C APIの概要

- 8.1.1 Oracle Internet Directory SDK C API SSL拡張機能

- 8.1.1.1 SSLインタフェース・コール

- 8.1.1.2 ウォレットのサポート

- 8.2 C APIのファンクション

- 8.2.1 ファンクションの概要

- 8.2.2 LDAPセッションの初期化

- 8.2.2.1 ldap_initおよびldap_open

- 8.2.3 LDAPセッション・ハンドル・オプション

- 8.2.3.1 ldap_get_optionおよびldap_set_option

- 8.2.4 参照を追跡するためのバインド資格証明の取得

- 8.2.4.1 ldap_set_rebind_proc

- 8.2.5 ディレクトリに対する認証

- 8.2.5.1 ldap_sasl_bind、ldap_sasl_bind_s、ldap_simple_bindおよびldap_simple_bind_s

- 8.2.6 Oracleの拡張機能を使用したSASL認証

- 8.2.6.1 ora_ldap_init_SASL

- 8.2.6.2 ora_ldap_create_cred_hdl、ora_ldap_set_cred_props、ora_ldap_get_cred_propsおよびora_ldap_free_cred_hdl

- 8.2.7 コントロールの使用

- 8.2.8 セッションのクローズ

- 8.2.8.1 ldap_unbind、ldap_unbind_extおよびldap_unbind_s

- 8.2.9 LDAP操作の実行

- 8.2.9.1 ldap_search_ext、ldap_search_ext_s、ldap_searchおよびldap_search_s

- 8.2.9.2 エントリの読取り

- 8.2.9.3 エントリの子のリスト表示

- 8.2.9.4 ldap_compare_ext、ldap_compare_ext_s、ldap_compareおよびldap_compare_s

- 8.2.9.5 ldap_modify_ext、ldap_modify_ext_s、ldap_modifyおよびldap_modify_s

- 8.2.9.6 ldap_renameおよびldap_rename_s

- 8.2.9.7 ldap_add_ext、ldap_add_ext_s、ldap_addおよびldap_add_s

- 8.2.9.8 ldap_delete_ext、ldap_delete_ext_s、ldap_deleteおよびldap_delete_s

- 8.2.9.9 ldap_extended_operationおよびldap_extended_operation_s

- 8.2.10 操作の中止

- 8.2.10.1 ldap_abandon_extおよびldap_abandon

- 8.2.11 結果の取得とLDAPメッセージの確認

- 8.2.11.1 ldap_result、ldap_msgtypeおよびldap_msgid

- 8.2.12 エラーの処理と結果の解析

- 8.2.12.1 ldap_parse_result、ldap_parse_sasl_bind_result、ldap_parse_extended_resultおよびldap_err2string

- 8.2.13 結果リストの参照

- 8.2.13.1 ldap_first_messageおよびldap_next_message

- 8.2.14 検索結果の解析

- 8.2.14.1 ldap_first_entry、ldap_next_entry、ldap_first_reference、ldap_next_reference、ldap_count_entriesおよびldap_count_references

- 8.2.14.2 ldap_first_attributeおよびldap_next_attribute

- 8.2.14.3 ldap_get_values、ldap_get_values_len、ldap_count_values、ldap_count_values_len、ldap_value_freeおよびldap_value_free_len

- 8.2.14.4 ldap_get_dn、ldap_explode_dn、ldap_explode_rdnおよびldap_dn2ufn

- 8.2.14.5 ldap_get_entry_controls

- 8.2.14.6 ldap_parse_reference

- 8.3 C APIの使用例

- 8.3.1 SSLモードを使用するC APIの使用方法

- 8.3.2 SSLモードを使用しないC APIの使用方法

- 8.3.3 SASLベースのDigest-MD5認証でのC APIの使用方法

- 8.3.4 参照の追跡時に資格証明を得るためのコールバック・ファンクションの設定と使用

- 8.4 C APIに必要なヘッダー・ファイルおよびライブラリ

- 8.5 C APIの依存性と制限事項

9 DBMS_LDAP PL/SQLリファレンス

- 9.1 サブプログラムの概要

- 9.2 例外の概要

- 9.3 データ型の概要

- 9.4 サブプログラム

- 9.4.1 initファンクション

- 9.4.2 simple_bind_sファンクション

- 9.4.3 bind_sファンクション

- 9.4.4 unbind_sファンクション

- 9.4.5 compare_sファンクション

- 9.4.6 search_sファンクション

- 9.4.7 search_stファンクション

- 9.4.8 first_entryファンクション

- 9.4.9 next_entryファンクション

- 9.4.10 count_entriesファンクション

- 9.4.11 first_attributeファンクション

- 9.4.12 next_attributeファンクション

- 9.4.13 get_dnファンクション

- 9.4.14 get_valuesファンクション

- 9.4.15 get_values_lenファンクション

- 9.4.16 delete_sファンクション

- 9.4.17 modrdn2_sファンクション

- 9.4.18 err2stringファンクション

- 9.4.19 create_mod_arrayファンクション

- 9.4.20 populate_mod_arrayプロシージャ(文字列バージョン)

- 9.4.21 populate_mod_arrayプロシージャ(バイナリ・バージョン)

- 9.4.22 populate_mod_arrayプロシージャ(バイナリ・バージョン。BLOBデータ型を使用)

- 9.4.23 get_values_blobファンクション

- 9.4.24 count_values_blobファンクション

- 9.4.25 value_free_blobファンクション

- 9.4.26 modify_sファンクション

- 9.4.27 add_sファンクション

- 9.4.28 free_mod_arrayプロシージャ

- 9.4.29 count_valuesファンクション

- 9.4.30 count_values_lenファンクション

- 9.4.31 rename_sファンクション

- 9.4.32 explode_dnファンクション

- 9.4.33 open_sslファンクション

- 9.4.34 msgfreeファンクション

- 9.4.35 ber_freeファンクション

- 9.4.36 nls_convert_to_utf8ファンクション

- 9.4.37 nls_convert_to_utf8ファンクション

- 9.4.38 nls_convert_from_utf8ファンクション

- 9.4.39 nls_convert_from_utf8ファンクション

- 9.4.40 nls_get_dbcharset_nameファンクション

10 Java APIリファレンス

11 DBMS_LDAP_UTL PL/SQLリファレンス

- 11.1 サブプログラムの概要

- 11.2 サブプログラム

- 11.2.1 ユーザー関連サブプログラム

- 11.2.1.1 authenticate_userファンクション

- 11.2.1.2 create_user_handleファンクション

- 11.2.1.3 set_user_handle_propertiesファンクション

- 11.2.1.4 get_user_propertiesファンクション

- 11.2.1.5 set_user_propertiesファンクション

- 11.2.1.6 get_user_extended_propertiesファンクション

- 11.2.1.7 get_user_dnファンクション

- 11.2.1.8 check_group_membershipファンクション

- 11.2.1.9 locate_subscriber_for_userファンクション

- 11.2.1.10 get_group_membershipファンクション

- 11.2.2 グループ関連サブプログラム

- 11.2.2.1 create_group_handleファンクション

- 11.2.2.2 set_group_handle_propertiesファンクション

- 11.2.2.3 get_group_propertiesファンクション

- 11.2.2.4 get_group_dnファンクション

- 11.2.3 サブスクライバ関連サブプログラム

- 11.2.3.1 create_subscriber_handleファンクション

- 11.2.3.2 get_subscriber_propertiesファンクション

- 11.2.3.3 get_subscriber_dnファンクション

- 11.2.3.4 get_subscriber_ext_propertiesファンクション

- 11.2.4 プロパティ関連サブプログラム

- 11.2.5 その他のサブプログラム

- 11.2.5.1 normalize_dn_with_caseファンクション

- 11.2.5.2 get_property_namesファンクション

- 11.2.5.3 get_property_valuesファンクション

- 11.2.5.4 get_property_values_lenファンクション

- 11.2.5.5 free_propertyset_collectionプロシージャ

- 11.2.5.6 create_mod_propertysetファンクション

- 11.2.5.7 populate_mod_propertysetファンクション

- 11.2.5.8 free_mod_propertysetプロシージャ

- 11.2.5.9 free_handleプロシージャ

- 11.2.5.10 check_interface_versionファンクション

- 11.2.5.11 get_property_values_blobファンクション

- 11.2.5.12 property_value_free_blobプロシージャ

- 11.3 ファンクション・リターン・コードの概要

- 11.4 データ型の概要

12 Oracle Directory Integration and Provisioning Java APIリファレンス

- 12.1 アプリケーション構成

- 12.1.1 アプリケーション登録とプロビジョニング構成

- 12.1.1.1 アプリケーションの登録

- 12.1.1.2 プロビジョニングの構成

- 12.1.2 アプリケーション構成クラス

- 12.2 ユーザー管理

- 12.2.1 ユーザーの作成

- 12.2.2 ユーザーの変更

- 12.2.3 ユーザーの削除

- 12.2.4 ユーザーの検索

- 12.3 デバッグ

- 12.4 サンプル・コード

13 Oracle Directory Integration Platform PL/SQL APIリファレンス

- 13.1 プロビジョニング・ファイルおよびインタフェースのバージョニング

- 13.2 拡張可能なイベント定義の構成

- 13.3 着信イベントおよび発信イベント

- 13.4 PL/SQL双方向インタフェース(バージョン3.0)

- 13.5 PL/SQL双方向インタフェース(バージョン2.0)

- 13.6 プロビジョニング・イベント・インタフェース(バージョン1.1)

- 13.6.1 事前定義されるイベント型

- 13.6.2 属性の型

- 13.6.3 属性の変更型

- 13.6.4 イベント処理の定数

- 13.6.5 コールバック

- 13.6.5.1 GetAppEvent()

- 13.6.5.2 PutAppEventStatus()

- 13.6.5.3 PutOIDEvent()

第III部 付録

A ユーザー・プロビジョニング用のJavaプラグイン

- A.1 プロビジョニング・プラグイン・タイプとその用途

- A.2 プロビジョニング・プラグインの要件

- A.3 データ・エントリ・プロビジョニング・プラグイン

- A.3.1 プレデータ・エントリ・プロビジョニング・プラグイン

- A.3.2 ポストデータ・エントリ・プロビジョニング・プラグイン

- A.4 データ・アクセス・プロビジョニング・プラグイン

- A.5 イベント配信プロビジョニング・プラグイン

- A.6 プロビジョニング・プラグインのリターン・ステータス

- A.7 プロビジョニング・プラグインの構成テンプレート

- A.8 プロビジョニング・プラグインのサンプル・コード

B DSML構文

- B.1 DSMLの機能

- B.2 DSMLの利点

- B.3 DSML構文

- B.3.1 トップレベルの構造

- B.3.2 ディレクトリ・エントリ

- B.3.3 スキーマ・エントリ

- B.4 DSMLで使用可能なツール

C Netscape LDAP SDK APIからOracle LDAP SDK APIへの移行

- C.1 機能

- C.2 ファンクション

- C.3 マクロ

索引

図一覧

- 1-1 ディレクトリ対応のアプリケーション

- 1-2 APIとサービスを利用するアプリケーション

- 2-1 ディレクトリ情報ツリー

- 2-2 Anne Smithに関するエントリの属性

- 2-3 DBMS_LDAPの一般的な使用手順

- 2-4 検索関連の操作の流れ

- 2-5 3つの有効範囲オプション

- 4-1 APIの拡張機能のプログラム・フロー

- 12-1 プロビジョニング構成データのディレクトリ情報ツリー

表一覧

- 1-1 アプリケーション・ライフサイクルでの相互作用

- 1-2 Oracle Internet Directoryとの統合用のサービスとAPI

- 1-3 既存のアプリケーションを変更するためのサービス

- 2-1 LDAPの機能

- 2-2 SSL認証モード

- 2-3 ldap_init()のパラメータ

- 2-4 ldap_simple_bind_s()の引数

- 2-5 search_s()またはsearch_st()ファンクションのオプション

- 2-6 検索フィルタ

- 2-7 ブール演算子

- 2-8 ldap_search_s()の引数

- 2-9 DBMS_LDAP.search_s()およびDBMS_LDAP.search_st()の引数

- 3-1 Oracle Internet Directoryでサポートされているリクエスト・コントロール

- 3-2 Oracle Internet Directoryでサポートされているレスポンス・コントロール

- 3-3 DynamicVerifierRequestControlのパラメータ

- 3-4 ハッシング・アルゴリズムに必要なパラメータ

- 4-1 DNS検出の環境変数

- 5-1 ディレクトリ・サーバー検出のメソッド

- 8-1 SSLインタフェース・コールの引数

- 8-2 C APIのファンクションおよびプロシージャ

- 8-3 LDAPセッションを初期化するためのパラメータ

- 8-4 LDAPセッション・ハンドル・オプションのパラメータ

- 8-5 定数

- 8-6 コールバック・ファンクションのパラメータおよびコールバック・ファンクションを設定するためのパラメータ

- 8-7 ディレクトリに対する認証のパラメータ

- 8-8 ora_ldap_init_sasl()に渡されるパラメータ

- 8-9 SASL資格証明の管理パラメータ

- 8-10 ldapcontrol構造体のフィールド

- 8-11 セッションをクローズするためのパラメータ

- 8-12 検索操作のパラメータ

- 8-13 比較操作のパラメータ

- 8-14 変更操作のパラメータ

- 8-15 LDAPMod構造体のフィールド

- 8-16 名前の変更操作のパラメータ

- 8-17 追加操作のパラメータ

- 8-18 削除操作のパラメータ

- 8-19 拡張操作のパラメータ

- 8-20 操作の中止のパラメータ

- 8-21 結果の取得とLDAPメッセージの確認のためのパラメータ

- 8-22 エラーの処理と結果の解析を行うためのパラメータ

- 8-23 結果リストを参照するためのパラメータ

- 8-24 エントリと継続リファレンスを検索結果セットから取得したり、戻されたエントリの件数をカウントするためのパラメータ

- 8-25 エントリとともに戻される属性の型を参照するためのパラメータ

- 8-26 属性値を取得してその件数をカウントするためのパラメータ

- 8-27 エントリ名を取得、分割および変換するためのパラメータ

- 8-28 LDAPコントロールをエントリから抽出するためのパラメータ

- 8-29 参照とコントロールをSearchResultReferenceメッセージから抽出するためのパラメータ

- 9-1 DBMS_LDAP APIのサブプログラム

- 9-2 DBMS_LDAP例外の概要

- 9-3 DBMS_LDAPデータ型の概要

- 9-4 INITファンクションのパラメータ

- 9-5 INITファンクションの戻り値

- 9-6 INITファンクションの例外

- 9-7 SIMPLE_BIND_Sファンクションのパラメータ

- 9-8 SIMPLE_BIND_Sファンクションの戻り値

- 9-9 SIMPLE_BIND_Sファンクションの例外

- 9-10 BIND_Sファンクションのパラメータ

- 9-11 BIND_Sファンクションの戻り値

- 9-12 BIND_Sファンクションの例外

- 9-13 UNBIND_Sファンクションのパラメータ

- 9-14 UNBIND_Sファンクションの戻り値

- 9-15 UNBIND_Sファンクションの例外

- 9-16 COMPARE_Sファンクションのパラメータ

- 9-17 COMPARE_Sファンクションの戻り値

- 9-18 COMPARE_Sファンクションの例外

- 9-19 SEARCH_Sファンクションのパラメータ

- 9-20 SEARCH_Sファンクションの戻り値

- 9-21 SEARCH_Sファンクションの例外

- 9-22 SEARCH_STファンクションのパラメータ

- 9-23 SEARCH_STファンクションの戻り値

- 9-24 SEARCH_STファンクションの例外

- 9-25 FIRST_ENTRYファンクションのパラメータ

- 9-26 FIRST_ENTRYの戻り値

- 9-27 FIRST_ENTRYの例外

- 9-28 NEXT_ENTRYファンクションのパラメータ

- 9-29 NEXT_ENTRYファンクションの戻り値

- 9-30 NEXT_ENTRYファンクションの例外

- 9-31 COUNT_ENTRYファンクションのパラメータ

- 9-32 COUNT_ENTRYファンクションの戻り値

- 9-33 COUNT_ENTRYファンクションの例外

- 9-34 FIRST_ATTRIBUTEファンクションのパラメータ

- 9-35 FIRST_ATTRIBUTEファンクションの戻り値

- 9-36 FIRST_ATTRIBUTEファンクションの例外

- 9-37 NEXT_ATTRIBUTEファンクションのパラメータ

- 9-38 NEXT_ATTRIBUTEファンクションの戻り値

- 9-39 NEXT_ATTRIBUTEファンクションの例外

- 9-40 GET_DNファンクションのパラメータ

- 9-41 GET_DNファンクションの戻り値

- 9-42 GET_DNファンクションの例外

- 9-43 GET_VALUESファンクションのパラメータ

- 9-44 GET_VALUESファンクションの戻り値

- 9-45 GET_VALUESファンクションの例外

- 9-46 GET_VALUES_LENファンクションのパラメータ

- 9-47 GET_VALUES_LENファンクションの戻り値

- 9-48 GET_VALUES_LENファンクションの例外

- 9-49 DELETE_Sファンクションのパラメータ

- 9-50 DELETE_Sファンクションの戻り値

- 9-51 DELETE_Sファンクションの例外

- 9-52 MODRDN2_Sファンクションのパラメータ

- 9-53 MODRDN2_Sファンクションの戻り値

- 9-54 MODRDN2_Sファンクションの例外

- 9-55 ERR2STRINGファンクションのパラメータ

- 9-56 ERR2STRINGファンクションの戻り値

- 9-57 CREATE_MOD_ARRAYファンクションのパラメータ

- 9-58 CREATE_MOD_ARRAYファンクションの戻り値

- 9-59 POPULATE_MOD_ARRAY(文字列バージョン)プロシージャのパラメータ

- 9-60 POPULATE_MOD_ARRAY(文字列バージョン)プロシージャの例外

- 9-61 POPULATE_MOD_ARRAY(バイナリ・バージョン)プロシージャのパラメータ

- 9-62 POPULATE_MOD_ARRAY(バイナリ・バージョン)プロシージャの例外

- 9-63 POPULATE_MOD_ARRAY(バイナリ)のパラメータ

- 9-64 POPULATE_MOD_ARRAY(バイナリ)の例外

- 9-65 GET_VALUES_BLOBのパラメータ

- 9-66 get_values_blobの戻り値

- 9-67 get_values_blobの例外

- 9-68 COUNT_VALUES_BLOBのパラメータ

- 9-69 COUNT_VALUES_BLOBの戻り値

- 9-70 VALUE_FREE_BLOBのパラメータ

- 9-71 MODIFY_Sファンクションのパラメータ

- 9-72 MODIFY_Sファンクションの戻り値

- 9-73 MODIFY_Sファンクションの例外

- 9-74 ADD_Sファンクションのパラメータ

- 9-75 ADD_Sファンクションの戻り値

- 9-76 ADD_Sファンクションの例外

- 9-77 FREE_MOD_ARRAYプロシージャのパラメータ

- 9-78 COUNT_VALUESファンクションのパラメータ

- 9-79 COUNT_VALUESファンクションの戻り値

- 9-80 COUNT_VALUES_LENファンクションのパラメータ

- 9-81 COUNT_VALUES_LENファンクションの戻り値

- 9-82 RENAME_Sファンクションのパラメータ

- 9-83 RENAME_Sファンクションの戻り値

- 9-84 RENAME_Sファンクションの例外

- 9-85 EXPLODE_DNファンクションのパラメータ

- 9-86 EXPLODE_DNファンクションの戻り値

- 9-87 EXPLODE_DNファンクションの例外

- 9-88 OPEN_SSLファンクションのパラメータ

- 9-89 OPEN_SSLファンクションの戻り値

- 9-90 OPEN_SSLファンクションの例外

- 9-91 MSGFREEファンクションのパラメータ

- 9-92 MSGFREEの戻り値

- 9-93 BER_FREEファンクションのパラメータ

- 9-94 nls_convert_to_utf8のパラメータ

- 9-95 nls_convert_to_utf8の戻り値

- 9-96 nls_convert_to_utf8のパラメータ

- 9-97 nls_convert_to_utf8の戻り値

- 9-98 nls_convert_from_utf8のパラメータ

- 9-99 nls_convert_from_utf8の戻り値

- 9-100 nls_convert_from_utf8のパラメータ

- 9-101 nls_convert_from_utf8の戻り値

- 9-102 nls_get_dbcharset_nameの戻り値

- 11-1 DBMS_LDAP_UTLのユーザー関連サブプログラム

- 11-2 DBMS_LDAP_UTLのグループ関連サブプログラム

- 11-3 DBMS_LDAP_UTLのサブスクライバ関連サブプログラム

- 11-4 DBMS_LDAP_UTLのその他のサブプログラム

- 11-5 authenticate_userファンクションのパラメータ

- 11-6 authenticate_userファンクションの戻り値

- 11-7 CREATE_USER_HANDLEファンクションのパラメータ

- 11-8 CREATE_USER_HANDLEファンクションの戻り値

- 11-9 SET_USER_HANDLE_PROPERTIESファンクションのパラメータ

- 11-10 SET_USER_HANDLE_PROPERTIESファンクションの戻り値

- 11-11 GET_USER_PROPERTIESファンクションのパラメータ

- 11-12 GET_USER_PROPERTIESファンクションの戻り値

- 11-13 SET_USER_PROPERTIESファンクションのパラメータ

- 11-14 SET_USER_PROPERTIESファンクションの戻り値

- 11-15 GET_USER_EXTENDED_PROPERTIESファンクションのパラメータ

- 11-16 GET_USER_EXTENDED_PROPERTIESファンクションの戻り値

- 11-17 GET_USER_DNファンクションのパラメータ

- 11-18 GET_USER_DNファンクションの戻り値

- 11-19 CHECK_GROUP_MEMBERSHIPファンクションのパラメータ

- 11-20 CHECK_GROUP_MEMBERSHIPファンクションの戻り値

- 11-21 LOCATE_SUBSCRIBER_FOR_USERファンクションのパラメータ

- 11-22 LOCATE SUBSCRIBER FOR USERファンクションの戻り値

- 11-23 GET_GROUP_MEMBERSHIPファンクションのパラメータ

- 11-24 GET_GROUP_MEMBERSHIPファンクションの戻り値

- 11-25 CREATE_GROUP_HANDLEファンクションのパラメータ

- 11-26 CREATE_GROUP_HANDLEファンクションの戻り値

- 11-27 SET_GROUP_HANDLE_PROPERTIESファンクションのパラメータ

- 11-28 SET_GROUP_HANDLE_PROPERTIESファンクションの戻り値

- 11-29 GET_GROUP_PROPERTIESファンクションのパラメータ

- 11-30 GET_GROUP_PROPERTIESファンクションの戻り値

- 11-31 GET_GROUP_DNファンクションのパラメータ

- 11-32 GET_GROUP_DNファンクションの戻り値

- 11-33 CREATE_SUBSCRIBER_HANDLEファンクションのパラメータ

- 11-34 CREATE_SUBSCRIBER_HANDLEファンクションの戻り値

- 11-35 GET_SUBSCRIBER_PROPERTIESファンクションのパラメータ

- 11-36 GET_SUBSCRIBER_PROPERTIESファンクションの戻り値

- 11-37 GET_SUBSCRIBER_DNファンクションのパラメータ

- 11-38 GET_SUBSCRIBER_DNファンクションの戻り値

- 11-39 GET_SUBSCRIBER_EXT_PROPERTIESファンクションのパラメータ

- 11-40 GET_USER_EXTENDED_PROPERTIESファンクションの戻り値

- 11-41 NORMALIZE_DN_WITH_CASEファンクションのパラメータ

- 11-42 NORMALIZE_DN_WITH_CASEファンクションの戻り値

- 11-43 GET_PROPERTY_NAMESファンクションのパラメータ

- 11-44 GET_PROPERTY_NAMESファンクションの戻り値

- 11-45 GET_PROPERTY_VALUESファンクションのパラメータ

- 11-46 GET_PROPERTY_VALUESファンクションの戻り値

- 11-47 GET_PROPERTY_VALUES_LENファンクションのパラメータ

- 11-48 GET_PROPERTY_VALUES_LENファンクションの戻り値

- 11-49 FREE_PROPERTYSET_COLLECTIONプロシージャのパラメータ

- 11-50 CREATE_MOD_PROPERTYSETファンクションのパラメータ

- 11-51 CREATE_MOD_PROPERTYSETファンクションの戻り値

- 11-52 POPULATE_MOD_PROPERTYSETファンクションのパラメータ

- 11-53 POPULATE_MOD_PROPERTYSETファンクションの戻り値

- 11-54 FREE_MOD_PROPERTYSETプロシージャのパラメータ

- 11-55 FREE_HANDLEプロシージャのパラメータ

- 11-56 CHECK_INTERFACE_VERSIONファンクションのパラメータ

- 11-57 CHECK_VERSION_INTERFACEファンクションの戻り値

- 11-58 GET_PROPERTY_VALUES_BLOBファンクションのパラメータ

- 11-59 GET_PROPERTY_VALUES_BLOBの戻り値

- 11-60 PROPERTY_VALUE_FREE_BLOBファンクションのパラメータ

- 11-61 ファンクション・リターン・コード

- 11-62 DBMS_LDAP_UTLのデータ型

- 12-1 一部の有用な権限グループ

- 12-2 インタフェースとその構成

- 12-3 PL/SQLインタフェースでサポートされる情報の書式

- 12-4 属性の構成エントリに属性として格納されるプロパティ

- 12-5 イベント伝播のパラメータ

- 13-1 事前定義済のイベント定義

- 13-2 プロビジョニング・サブスクリプション・プロファイルの属性

Oracle® Fusion Middleware

Oracle Identity Managementアプリケーション開発者ガイド

11g リリース1 (11.1.1)

B56242-05(原本部品番号:E10186-05)

2013年2月

アプリケーションを変更し、旧Oracle LDAP API, 10g Oracle Delegated Administration Serviceおよびディレクトリ統合プラットフォームと連携させる方法を説明します。

Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド, 11gリリース1(11.1.1)

B56242-05

Copyright © 1999, 2013, Oracle and/or its affiliates.All rights reserved.

原本主著者: John Spencer

原本主協力者: Ellen Desmond

原本協力者: Vasuki Ashok、Maud Jamati-Bartlett、Ajay Keni、Ashish Kolli、Stephen Lee、David Lin、Pierre-Ephrem Madiot、Venkat Medam、Samit Roy、Ramaprakash Sathyanarayan、Daniel Shih、Olaf Stullich、Arun Theebaprakasam、Mark Wilcox

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

このドキュメントの一部はInternet Engineering Task Forceのインターネットドラフト『The C LDAP Application Program Interface』(Copyright (C) The Internet Society (1997-1999).All Rights Reserved)(有効期限は2000年4月8日)に記載されたものです。これらの箇所は次のIETFの指示に基づいて使用されています。「This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works.However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.」

RSAおよびRC4はRSA Data Security社の商標です。Oracle Internet Directoryの一部はRSA Data Security社のもので、ライセンスはオラクル社によって供与されています。

この製品には、Consensus Development社のSSLPlus Integration SuiteTMバージョン1.2が含まれています。

はじめに

『Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド』では、アプリケーションを変更してOracle Application Server Single Sign-On、Oracle Internet Directory、Oracle Delegated Administration Serviceおよびディレクトリ統合プラットフォームを含むOracle Identity Managementと連携させる方法について説明します。

内容は次のとおりです。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

このドキュメントは次のような読者を対象としています。

- アプリケーションをOracle Identity Managementと統合する開発者。このプロセスはOracle Internet Directoryサーバーの情報の保存および更新を伴います。またOracle HTTP Server上の認証モジュールmod_ossoと連動させるためのアプリケーションの変更も伴います。

- LDAP APIおよびこれらのAPIに対するOracleの拡張機能について学習するすべてのユーザー。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleカスタマは、My Oracle Supportから電子サポートにアクセスできます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のOracleドキュメントを参照してください。

- 『Oracle Fusion Middleware Oracle Identity Managementインストレーション・ガイド』

- 『Oracle Internet Directory管理者ガイド』

- Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド

- 『Oracle Database PL/SQLユーザーズ・ガイドおよびリファレンス』

- 『Oracle Databaseアプリケーション開発者ガイド - 基礎編』

- 『Oracle Fusion Middleware Reference for Oracle Security Developer Tools』

10g(10.1.4.3.0)以上のOracle Delegated Administration ServicesまたはOracle Single Sign-Onを使用している場合、Oracle Application Server 10g(10.1.4.0.1)ライブラリの次のドキュメントを参照してください。

- 『Oracle Identity Management委任管理ガイド』

- 『Oracle Application Server Single Sign-On管理者ガイド』

追加情報は、次のURLを参照してください。

- David Chadwick著『Understanding X.500—The Directory』(Thomson Computer Press, 1996)。

- Tim HowesおよびMark Smith著『LDAP: Programming Directory-enabled Applications with Lightweight Directory Access Protocol』Macmillan Technical Publishing、1997年。

- Howes、Tim、Mark SmithおよびGordon Good著『Understanding and Deploying LDAP Directory Services』Macmillan Technical Publishing、1999年。

- Internet Assigned Numbers Authorityのホームページ(http://www.iana.org)のオブジェクト識別子に関する情報

- http://www.ietf.orgで入手可能なInternet Engineering Task Force(IETF)のドキュメント、特に次のものを参照してください。

- LDAPEXTのCharterおよびLDAPのDraft

- LDUPのCharterおよびDraft

- RFC 2251、「Lightweight Directory Access Protocol (v3)」

- RFC 2254、「The String Representation of LDAP Search Filters」

- RFC 1823、「The LDAP Application Program Interface」

- OpenLDAP Community(http://www.openldap.org)

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

SDKの新機能

ここでは、Oracle Identity ManagementのSoftware Developer's Kit(SDK)の現在のリリースおよび以前のリリースでの新機能について説明します。各機能の詳細は、記載のリンクを使用して参照してください。

11gリリース1(11.1.1)リリースの時点で、Fusion Middlewareアプリケーション開発者へ推奨されるセキュリティAPIはOracle Platform Security for Javaです。詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。現在のドキュメントに記載されているOracle Identity Managementインタフェースは、すでにSDKに統合されている既存のソリューションの保守および拡張を行う開発者向けにサポートされています。

Oracle Fusion Middleware 11gリリース1(11.1.1)には、Oracle Single Sign-OnもOracle Delegated Administration Servicesも含まれていません。ただし、Oracle Internet Directory 11gリリース1(11.1.1)は、Oracle Single Sign-On 10g(10.1.4.3.0)以上およびOracle Delegated Administration Services 10g(10.1.4.3.0)以上と互換性があります。

11g リリース1(11.1.1.7.0)のSDKの新機能

11g リリース1(11.1.1.7.0)のSDKでは、次の新しいコントロールが追加されています。

- 仮想リスト表示(VLV)のリクエストおよびレスポンス・コントロールでは、指定のLDAP検索で、大規模な検索結果セットの連続したサブセットを返すことをクライアントがサーバーに求めることを許可します。

- 計算属性値の一意性コントロールでは、ディレクトリ全体での計算属性値の一意性が確保されます。

「コントロールの使用」を参照してください。

11gリリース1(11.1.1.6)のSDKの新機能

11gリリース1(11.1.1.6)のSDKではトランザクションのサポートが追加されています。「LDAPトランザクションの使用」を参照してください。

11gリリース1(11.1.1)のSDKの新機能

11gリリース1(11.1.1)のSDKでは、インターネット・プロトコル・バージョン6(IPv6)のサポートが追加されています。CおよびJava APIで、IPv6とIPv4のアドレスをサポートするようになりました。

10g(10.1.4.0.1)のSDKの新機能

10g(10.1.4.0.1)のSDKには、次の機能が追加されています。

- Javaプラグイン・サポート。
サーバー・プラグインはJavaおよびPL/SQLで記述できます。詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

- LDAP検索結果のページングおよびソート。
LDAP検索からページングおよびソート済の結果を取得できるようになりました。詳細は、第3章「LDAPプロトコルに対する拡張機能」の「ソート済のLDAP検索結果」および「ページング済のLDAP検索結果」を参照してください。

- 階層検索への追加機能。
階層をどの方向にも検索できるようになりました。また、検索する階層のレベル数も指定できるようになりました。詳細は第3章「LDAPプロトコルに対する拡張機能」の「階層検索の実行」を参照してください。

- SASL Digest-MD5認証の3つのすべてのモードに対するサポート。
Oracle Internet Directoryは、jdk1.4 APIのJava Naming and Directory Interface(JNDI)またはOpenLDAP Java APIで3つのモードをすべてサポートします。詳細は、第3章「LDAPプロトコルに対する拡張機能」の「SASL認証」および第5章「JNDIに対するJava API拡張機能の使用」の「例: SASL Digest-MD5のauth-intモードおよびauth-confモードの使用」を参照してください。

リリース10.1.2のSDKの新機能

リリース10.1.2のSDKには、次の機能が追加されています。

- 一元化されたユーザー・プロビジョニング
この機能により、アプリケーション・ユーザーをOracle Identity Managementインフラストラクチャにプロビジョニングできます。詳細は、第12章「Oracle Directory Integration and Provisioning Java APIリファレンス」を参照してください。

- 動的パスワード・ベリファイア
この機能は、パスワード・ベリファイアのパラメータを実行時にのみ指定するアプリケーションの必要性に対応したものです。詳細は、第3章の「動的パスワード・ベリファイアの作成」を参照してください。

- ldapmodify、ldapaddおよびldapcompareのプラグインに対するバイナリ・サポート
ディレクトリ・プラグインがディレクトリ・データベースのバイナリ属性にアクセスできるようになりました。詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のPL/SQLプラグイン・フレームワークのバイナリ・サポートに関する項を参照してください。

- Oracle Directory Integration and Provisioningサーバーのプラグイン・サポート
これらのJavaフックにより、企業では、独自のビジネス・ルールを組み入れ、各要件に合せてフットプリント作成をカスタマイズできます。詳細は、付録Aを参照してください。

リリース9.0.4のSDKの新機能

次の機能は、リリース9.0.4のSDKで導入されました。

- Oracle Delegated Administration ServicesのURL API
このAPIを使用すると、委任管理者がディレクトリ操作を行うために使用する管理セルフ・サービス・コンソールを構築できます。

- PL/SQL APIの拡張機能

- LDAP v3規格の新規ファンクション。これまではC APIでのみ使用可能でしたが、PL/SQLでも使用できるようになりました。

- 中間層アプリケーションへのプロキシ・アクセスを可能にするファンクション。

- Oracle Directory Integration and Provisioningでプロファイルを作成および管理するファンクション。

詳細は、第7章を参照してください。

- 外部認証プラグインのサポート
この機能により、管理者はMicrosoft Active Directoryを使用してOracleコンポーネントのセキュリティ資格証明を格納および管理できます。第12章

- DNSを使用したサーバー検出
この機能により、ディレクトリ・クライアントはディレクトリ・サーバーのホスト名およびポート番号を検出できます。その結果、大規模なデプロイメントにおけるディレクトリ・クライアントの維持コストが削減されます。詳細は、第4章の「ディレクトリ・サーバーの検出」を参照してください。

- ディレクトリSDKとディレクトリ・ツールに対するXMLサポート
この機能により、LDAPツールでXMLおよびLDIF表記法を処理できます。ディレクトリAPIではDSML 1.0形式のデータを操作できます。

- クライアント側の参照キャッシュ
この機能により、クライアントは参照情報をキャッシュできるため、参照プロセスの処理時間が短縮されます。

第I部

Oracle Identity Management用プログラミング

第I部では、アプリケーションを変更してOracle Identity Managementの各種コンポーネントと連携させる方法について説明します。最初に、Oracle Internet Directory SDKとLDAPプログラミングの概念を紹介します。次に、3種類のLDAP APIとその拡張機能を使用してアプリケーションをOracle Internet Directory対応にする方法を説明します。

第I部は、次の章で構成されています。

- 第1章「Oracle Identity Managementアプリケーションの開発」

- 第2章「標準的なLDAP APIを使用したアプリケーションの開発」

- 第3章「LDAPプロトコルに対する拡張機能」

- 第4章「標準的なAPIに対するOracleの拡張機能を使用したアプリケーションの開発」

- 第5章「JNDIに対するJava API拡張機能の使用」

- 第6章「PL/SQLでのAPI拡張機能の使用」

- 第7章「プロビジョニング統合アプリケーションの開発」

1 Oracle Identity Managementアプリケーションの開発

11gリリース1(11.1.1)リリースの時点で、Fusion Middlewareアプリケーション開発者へ推奨されるセキュリティAPIはOracle Platform Security for Javaです。詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。現在のドキュメントに記載されているOracle Identity Managementインタフェースは、Oracle Platform Security for Javaに含まれるものではありません。

Oracle Identity Managementは、すべてのOracleアプリケーションに共有インフラストラクチャを提供します。また、サード・パーティのエンタープライズ・アプリケーションの開発を容易にするサービスやインタフェースも提供します。このインタフェースは、アプリケーションにアイデンティティ管理を組み込む必要のあるアプリケーション開発者にとって有益です。

この章では、このインタフェースについて説明し、Oracle Identity Management環境におけるアプリケーション開発の推奨ベスト・プラクティスを示します。

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

- 第1.1項「アプリケーション統合に使用可能なOracle Identity Managementサービス」

- 第1.2項「既存のアプリケーションとOracle Identity Managementとの統合」

- 第1.3項「Oracle Identity Managementのプログラミング: 概要」

1.1 アプリケーション統合に使用可能なOracle Identity Managementサービス

カスタム・アプリケーションでは、ドキュメントに記載され、サポートされている一連のサービスやAPIを通じてOracle Identity Managementを使用できます。次に例を示します。

- Oracle Internet Directoryでは、C、JavaおよびPL/SQLのLDAP APIを提供します。他のLDAP SDKと互換性があります。

- Oracle Delegated Administration Servicesは、サード・パーティのアプリケーションをサポートするようにカスタマイズできるコア・セルフサービス・コンソールを提供します。また、ディレクトリ・データを操作するカスタマイズされた管理インタフェース構築用のいくつかのサービスも提供します。

- Oracle Directory Integration Servicesでは、Oracle Internet Directoryをサード・パーティ・ディレクトリやその他のユーザー・リポジトリと同期化するためのカスタム・ソリューションの開発およびデプロイメントが容易になります。

- Oracle Provisioning Integration Servicesでは、サード・パーティ・アプリケーションをプロビジョニングするメカニズムを提供します。また、Oracle環境をその他のプロビジョニング・システムと統合する手段にもなります。

- Oracle Single Sign-Onでは、その他のOracle Webアプリケーションとシングル・サインオン・セッションを共有するパートナ・アプリケーションの開発およびデプロイを行うAPIを提供します。

- JAZNは、Java Authentication and Authorization Service(JAAS)Support標準のOracle実装です。Oracle J2EE環境を使用してWeb向けに開発されたアプリケーションが、アイデンティティ管理インフラストラクチャを使用して認証と認可を行えるようにします。

注意:

Oracle Fusion Middleware 11gリリース1(11.1.1)には、Oracle Single Sign-OnもOracle Delegated Administration Servicesも含まれていません。ただし、Oracle Internet Directory 11gリリース1(11.1.1)は、Oracle Single Sign-OnおよびOracle Delegated Administration Services 10g(10.1.4.3.0)以上と互換性があります。

1.2 既存のアプリケーションとOracle Identity Managementとの統合

新規のアプリケーションでは、Oracle Fusion Middlewareセキュリティ・ガイドに記載されているOracle Platform Security for Javaを使用します。

企業は重要な業務機能を実行するために特定のアプリケーションをすでにデプロイしている可能性があります。Oracle Identity Managementは、既存アプリケーションの変更のため、デプロイメントで活用できる次のサービスを提供します。

- ユーザーの自動プロビジョニング: デプロイメントにより、カスタム・プロビジョニング・エージェントを開発し、Oracle Identity Managementインフラストラクチャでのプロビジョニング・イベントに対応する、既存のアプリケーションでのユーザーのプロビジョニングを自動化できます。このエージェントは、Oracle Provisioning Integration Serviceのインタフェースを使用して開発する必要があります。

関連項目:

ユーザーの自動プロビジョニングの開発の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

- ユーザー認証サービス: 既存のアプリケーションのユーザー・インタフェースがHTTPに基づいている場合は、Oracle HTTP Serverと統合し、mod_ossoを使用してURLを保護することで、Oracle Single Sign-Onサービスを使用するすべての受信ユーザー・リクエストを認証できます。

- ユーザー・プロファイルの一元管理: 既存のアプリケーションのユーザー・インタフェースがHTTPに基づいており、認証がOracle Single Sign-Onと統合されている場合、アプリケーションでOracle Delegated Administration Servicesのセルフ・サービス・コンソールを使用してユーザー・プロファイルを一元管理できます。セルフ・サービス・コンソールは、アプリケーションの特定の要件に対応できるようにデプロイメント内でカスタマイズできます。

1.3 Oracle Identity Managementのプログラミング: 概要

この項では、Oracle Identity Management Software Developer's Kitについて説明します。アプリケーションでキットを使用してディレクトリと統合する方法の概要を示します。ディレクトリ製品スイートのその他のコンポーネントも示します。

この項では、次の項目について説明します。

- 第1.3.1項「Oracle Internet Directory SDKでサポートされているプログラミング言語」

- 第1.3.2項「Oracle Identity Management SDKコンポーネント」

- 第1.3.3項「Oracle Identity Management環境でのアプリケーション開発」

1.3.1 Oracle Internet Directory SDKでサポートされているプログラミング言語

SDKは、C、C++およびPL/SQLを使用するアプリケーション開発者を対象としています。Java開発者がディレクトリとの統合を行う場合は、JNDIプロバイダを使用する必要があります。

1.3.2 Oracle Identity Management SDKコンポーネント

Oracle Identity Management Software Developer's Kit 11gリリース1(11.1.1)は、次のもので構成されます。

- LDAPバージョン3に準拠したC API

- PL/SQL API(DBMS_LDAPというPL/SQLパッケージに同梱)

- 『Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド』(このドキュメント)

- コマンドライン・ツール

1.3.3 Oracle Identity Management環境でのアプリケーション開発

この項では、次の項目について説明します。

- 第1.3.3.1項「Oracle Identity Managementアプリケーションのアーキテクチャ」

- 第1.3.3.2項「アプリケーション・ライフサイクルでのOracle Identity Managementの相互作用」

- 第1.3.3.3項「アプリケーションをOracle Identity Managementと統合するためのサービスおよびAPI」

- 第1.3.3.4項「既存のアプリケーションとOracle Identity Managementとの統合」

1.3.3.1 Oracle Identity Managementアプリケーションのアーキテクチャ

ほとんどのOracle Identity Managementアプリケーションは、複数のユーザーからの複数のリクエストを同時に処理するバックエンド・プログラムです。図1-1に、これらのアプリケーションによるディレクトリの使用方法を示します。

図1-1 ディレクトリ対応のアプリケーション

「図1-1 ディレクトリ対応のアプリケーション」の説明

図1-1に示すように、ユーザー・リクエストがLDAP対応の操作を必要とする場合、アプリケーションはあらかじめ確立されたディレクトリ接続の一部を使用してリクエストを処理します。

1.3.3.2 アプリケーション・ライフサイクルでのOracle Identity Managementの相互作用

表1-1に、アプリケーションがライフサイクルで行う通常のディレクトリ操作を順に示します。

表1-1 アプリケーション・ライフサイクルでの相互作用

アプリケーションのライフサイクルでのポイント

ロジック

アプリケーションのインストール

1. ディレクトリにアプリケーションのアイデンティティを作成します。アプリケーションはこのアイデンティティを使用して、ほとんどのLDAP操作を実行します。

2. LDAP認可を指定するために、アプリケーションのアイデンティティを正しいLDAPグループに含めます。この認可により、アプリケーションはユーザー資格証明を受け入れて、ディレクトリに対して認証することができます。また、ディレクトリは、そのユーザーにかわってLDAP操作を実行する必要があるときに、アプリケーション認可を使用してユーザーの代理を務めることができます。

アプリケーションの起動とブートストラップ

アプリケーションは、自身をディレクトリに対して認証するための資格証明を取得する必要があります。

Oracle Internet Directoryに構成メタデータを格納しているアプリケーションは、そのメタデータを取得して、アプリケーションの他の部分を初期化できます。

次に、アプリケーションは、接続のプールを確立してユーザー・リクエストを処理できます。

アプリケーションの実行

LDAP操作が必要なすべてのエンド・ユーザー・リクエストについて、アプリケーションは次の処理を行うことができます。

- LDAP接続のプールから接続を選択します。

- エンド・ユーザーの有効な権利を使用してLDAP操作を実行する必要がある場合は、ユーザーをエンド・ユーザー・アイデンティティに切り替えます。

- この章で説明する標準APIまたはAPI拡張機能を使用して、LDAP操作を実行します。

- LDAP操作の完了時、有効なユーザーがアプリケーションのアイデンティティになっていることを確認します。

- LDAP接続を接続のプールに戻します。

アプリケーションの停止

未処理のLDAP操作を中止して、すべてのLDAP接続をクローズします。

アプリケーションの削除

アプリケーションのアイデンティティとそのアプリケーションのアイデンティティに指定されているLDAP認可を削除します。

1.3.3.3 アプリケーションをOracle Identity Managementと統合するためのサービスおよびAPI

アプリケーション開発者は、表1-2で説明するサービスおよびAPIを使用してOracle Identity Managementを統合することができます。

表1-2 Oracle Internet Directoryとの統合用のサービスとAPI

サービス/API

説明

詳細

C、PL/SQLおよびJavaでの標準的なLDAP API

これらのAPIによって、基本的なLDAP操作が可能になります。Javaで使用する標準的なLDAP APIは、LDAPサービス・プロバイダで使用可能なJNDI APIです。

第2章「標準的なLDAP APIを使用したアプリケーションの開発」

標準的なC、PL/SQLおよびJava APIに対するOracleの拡張機能

これらのAPIは、アイデンティティ管理関連の様々な概念をモデル化するプログラム・インタフェースを提供します。

第4章「標準的なAPIに対するOracleの拡張機能を使用したアプリケーションの開発」

Oracle Delegated Administration Service

Oracle Delegated Administration Servicesは、セルフ・サービス・コンソールと管理インタフェースで構成されています。管理インタフェースは、サード・パーティ・アプリケーションをサポートするように変更できます。

10g (10.1.4.0.1)ライブラリ。

Oracle Directory Provisioning Integration Service

Oracle Provisioning Integration Systemを使用して、サード・パーティ・アプリケーションのプロビジョニング、およびその他のプロビジョニング・システムの統合を行うことができます。

- 第7章「プロビジョニング統合アプリケーションの開発」

- Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド

図1-2に、表1-2のサービスの一部を利用するアプリケーションを示します。

図1-2 APIとサービスを利用するアプリケーション

図1-2に示すとおり、アプリケーションは次のようにOracle Internet Directoryと統合されます。

- PL/SQL、CまたはJavaのAPIを使用して、ディレクトリに対してLDAP操作を直接実行します。

- ユーザーをOracle Delegated Administration Servicesのセルフ・サービス機能に転送する場合もあります。

- Oracle Internet Directory内のユーザーまたはグループのエントリに対する変更について通知を受けます。Oracle Directory Provisioning Integration Serviceでこの通知を行います。

1.3.3.4 既存のアプリケーションとOracle Identity Managementとの統合

Oracleのアイデンティティ管理インフラストラクチャとの統合の対象となるアプリケーションが企業内にすでにデプロイされている場合があります。表1-3に示すサービスを使用して、これらのアプリケーションを統合できます。

表1-3 既存のアプリケーションを変更するためのサービス

サービス

説明

詳細

ユーザーの自動プロビジョニング

Oracleのアイデンティティ管理インフラストラクチャでプロビジョニング・イベントが発生したときに、ユーザーのプロビジョニングを自動的に行うエージェントを開発できます。このエージェントの開発には、Oracle Directory Provisioning Integration Serviceのインタフェースを使用します。

第7章「プロビジョニング統合アプリケーションの開発」

ユーザー認証サービス

ユーザー・インタフェースがHTTPに基づいている場合、ユーザー・インタフェースをOracle HTTP Serverと統合できます。これにより、mod_ossoとOracleAS Single Sign-Onを使用してアプリケーションのURLを保護できるようになります。

『Oracle Application Server Single Sign-On管理者ガイド』

ユーザー・プロファイルの一元管理

ユーザー・インタフェースがHTTPに基づいていて、OracleAS Single Sign-Onと統合されている場合、Oracle Internet Directoryセルフ・サービス・コンソールを使用してユーザー・プロファイルを一元管理できます。コンソールは、アプリケーションの要件に応じてカスタマイズできます。

- 10g (10.1.4.0.1)ライブラリ。

- 『Oracle Identity Management委任管理ガイド』の委任管理サービス・フレームワークに関する章

2 標準的なLDAP APIを使用したアプリケーションの開発

この章では、標準的なLDAP APIを使用して行うことのできる操作について概説します。また、アプリケーションをAPIと統合する方法も説明します。これらの説明の前に、Lightweight Directory Access Protocol(LDAP)について説明します。

この章では、次の項目について説明します。

- 第2.1項「LDAPの歴史」

- 第2.2項「LDAPモデル」

- 第2.3項「標準LDAP APIについて」

- 第2.4項「LDAPセッションの初期化」

- 第2.5項「LDAPセッションの認証」

- 第2.6項「ディレクトリの検索」

- 第2.7項「セッションの終了」

2.1 LDAPの歴史

LDAPは、X.500 Directory Access Protocolに対する軽量フロントエンドとして開発されました。LDAPはX.500 Directory Access Protocolを次のように簡素化しています。

- TCP/IP接続を使用します。これは、X.500の実装に必要なOSI通信スタックよりも軽量です。

- ほとんど使用されないX.500 Directory Access Protocolの冗長な機能を削減しています。

- 単純な書式を使用してデータ要素を表現します。この書式は、複雑で高度に構造化されたX.500の表現よりも処理が簡単です。

- ネットワーク上のデータ・トランスポートに使用されるX.500エンコーディング規則の簡素化バージョンを使用します。

2.2 LDAPモデル

LDAPは次の項で説明する4つの基本モデルを使用して操作を定義します。

- 第2.2.1項「ネーミング・モデル」

- 第2.2.2項「情報モデル」

- 第2.2.3項「機能モデル」

- 第2.2.4項「セキュリティ・モデル」

2.2.1 ネーミング・モデル

LDAPネーミング・モデルによって、ディレクトリ情報を参照および編成できます。ディレクトリ内の各エントリは、識別名(DN)で一意に識別されます。識別名は、ディレクトリ階層におけるそのエントリの位置を正確に伝えます。この階層は、ディレクトリ情報ツリー(DIT)を使用して表されます。

図2-1に、識別名とディレクトリ情報ツリーの関係を示します。

図2-1 ディレクトリ情報ツリー

図2-1のDITは、Example Corporationに所属する、Anne Smithという同じ名前を持つ2人の従業員のエントリを示しています。この図のディレクトリ情報ツリーは、地理的および組織的な線で構造化されています。左の分岐で表されているAnne Smithは、米国の販売部門に勤務しています。もう一方は、英国のサーバー開発部門に勤務しています。

右の分岐で表されているAnne Smithには、Anne Smithという一般名(cn)があります。彼女は、Exampleという組織(o)の英国(uk)という国(c)のサーバー開発という組織単位(ou)に勤務しています。このAnne Smithエントリの識別名は次のとおりです。

cn=Anne Smith,ou=Server Development,c=uk,o=example

識別名の一般的な書式では、左に最下位のDITコンポーネントを置くことに注意してください。ルートに至るまで、次の上位コンポーネントが続きます。

識別名内の最下位コンポーネントは相対識別名(RDN)と呼ばれます。前述の識別名では、相対識別名はcn=Anne Smithです。Anne Smithの相対識別名のすぐ上のエントリに対応する相対識別名は、ou=Server Developmentです。また、ou=Server Developmentのすぐ上のエントリに対応する相対識別名はc=ukです。識別名は、このように各相対識別名をカンマで区切って順に並べたものです。

ディレクトリ情報ツリー全体の中で特定エントリの位置を識別する場合、クライアントは、その相対識別名のみではなく、エントリの完全な識別名を使用することによってそのエントリを一意に識別します。図2-1に示すグローバル組織の中で2人のAnne Smithを混同しないためには、それぞれの完全な識別名を使用します。同じ組織単位内に同じ名前の従業員が2人いる場合は、他のメカニズムを使用できます。たとえば、一意の識別番号でこれらの従業員を識別します。

2.2.2 情報モデル

LDAP情報モデルによって、ディレクトリ内の情報の形式や文字が決まります。このモデルでは、定義特性としてエントリという概念を使用します。ディレクトリのエントリとは、オブジェクトに関する情報の集合です。たとえば、電話帳には個人に関するエントリが含まれています。図書館カードの目録には、本に関するエントリが含まれています。オンライン・ディレクトリには、従業員、会議室、E-Commerceパートナ、またはプリンタなどの共有ネットワーク・リソースに関するエントリが含まれています。

一般的な電話帳の場合、個人に関するエントリには住所や電話番号などが含まれています。オンライン・ディレクトリでは、このような情報はそれぞれ属性と呼ばれます。一般的な従業員エントリには、役職名、電子メール・アドレス、電話番号などの属性が含まれています。

図2-2では、英国(uk)のAnne Smithに関するエントリにいくつかの属性があります。それぞれがAnne Smithについての固有の情報を提供します。ツリーの右側の円の中には、emailaddrs、printername、jpegPhotoおよびapp preferencesがリストされています。図2-2のその他の黒丸も属性を持つエントリですが、それらの属性は示していません。

図2-2 Anne Smithに関するエントリの属性

各属性は、属性の型と1つ以上の属性値で構成されます。属性の型は、その属性に含まれている情報の種類(jobTitleなど)です。属性値は実際の情報です。たとえば、jobTitle属性に対する値にはmanagerがあります。

2.2.3 機能モデル

LDAP機能モデルによって、ディレクトリ・エントリに行える処理が決まります。表2-1に、3種類の機能をリストし、説明します。

表2-1 LDAPの機能

機能

説明

検索および読取り

読取り操作では、名前が判明しているエントリの属性を取得します。リスト操作では、指定したエントリの子を列挙します。検索操作では、検索フィルタと呼ばれる選択条件に基づいて、ツリー内に定義されている領域からエントリを選択します。一致した各エントリについて、リクエストされた属性のセットが(値の有無にかかわらず)戻されます。検索対象エントリの範囲は、単一のエントリ、エントリの子またはサブツリー全体にまで広げることができます。別名のエントリは、サーバーの境界を超えている場合でも、検索時に自動的に続行されます。中止操作を定義すると、進行中の操作を取り消すことができます。

変更

このカテゴリでは、ディレクトリを変更する4つの操作を定義します。

- 変更: 既存のエントリを変更します。値の追加と削除が可能です。

- 追加: ディレクトリにエントリを挿入します。

- 削除: ディレクトリからエントリを削除します。

- 相対識別名の変更: エントリの名前を変更します。

認証

このカテゴリでは、バインド操作を定義します。バインドによって、クライアントはセッションを開始し、そのアイデンティティをディレクトリに示すことができます。Oracle Internet Directoryは、単純なクリアテキストのパスワードから公開鍵まで、様々な認証方式をサポートしています。バインド解除操作によって、ディレクトリ・セッションを終了します。

2.2.4 セキュリティ・モデル

LDAPセキュリティ・モデルによって、ディレクトリの情報を保護できます。このモデルはいくつかの部分からなります。

- 認証
ユーザー、ホストおよびクライアントのアイデンティティが正しく検証されていることを保証する方法

- アクセス制御と認可
ユーザーが権限を持つ情報のみを読取りまたは更新することを保証する方法

- データ整合性: 送信中にデータが変更されないことを保証する方法

- データ・プライバシ
送信中にデータが開示されないことを保証する方法

- パスワード・ポリシー
パスワードの使用方法を制御する規則を設定する方法

2.2.4.1 認証

認証は、ディレクトリ・サーバーが、そのディレクトリに接続するユーザーのアイデンティティを確認するプロセスです。ディレクトリ認証は、LDAPバインド操作でLDAPセッションを確立するときに行われます。すべてのセッションには関連付けられているユーザー・アイデンティティがあり、認可IDとも呼ばれます。

Oracle Internet Directoryには、匿名、簡易およびSSLの3つの認証オプションが用意されています。

2.2.4.1.1 匿名認証

ディレクトリをすべての人が使用できる場合、ユーザーは匿名でログインできます。匿名認証では、ユーザーはユーザー名とパスワードのフィールドを空白のままにしてログインします。そうすると、匿名ユーザーに対して指定されたすべての権限を使用できます。

2.2.4.1.2 簡易認証

簡易認証では、クライアントは暗号化されていない識別名とパスワードを使用し、サーバーに対して自己認証を行います。サーバーは、クライアントの識別名およびパスワードが、ディレクトリに格納されている識別名およびパスワードと一致していることを検証します。

2.2.4.1.3 Secure Sockets Layer(SSL)を使用した認証

Secure Sockets Layer(SSL)は、ネットワーク接続を保護するための業界標準プロトコルです。証明書の交換によりユーザーを認証します。これらの証明書は、信頼できる認証局によって検証されます。証明書は、エンティティのアイデンティティ情報が正しいことを保証します。エンティティには、エンド・ユーザー、データベース、管理者、クライアントまたはサーバーが可能です。認証局(CA)は、すべての関係機関によって高いレベルの信頼度を与えられた公開鍵の証明書を作成する機関です。

SSLは、表2-2に示す3つの認証モードで使用できます。

表2-2 SSL認証モード

SSLモード

説明

認証なし

クライアントとサーバーのいずれも、他方に対して自己認証を行いません。証明書の送信または交換は行われません。この場合は、SSL暗号化および復号化のみが使用されます。

一方向認証

ディレクトリ・サーバーのみ、クライアントに対して自己認証を行います。ディレクトリ・サーバーは、そのサーバーが認証されていることを証明する証明書をクライアントに送信します。

双方向認証

クライアントとサーバーは、相互に自己認証を行い、証明書を交換します。

Oracle Internet Directory環境では、クライアントとディレクトリ・サーバー間のSSL認証は次の3つの基本手順に従って行われます。

1. ユーザーは、SSLポートでSSLを使用して、ディレクトリ・サーバーへのLDAP接続を開始します。デフォルトのSSLポートは3131です。

2. SSLは、クライアントとディレクトリ・サーバー間のハンドシェイクを実行します。

3. ハンドシェイクが成功すると、ディレクトリ・サーバーは、そのディレクトリにアクセスするために必要な認可をユーザーが所有していることを検証します。

関連項目:

SSLの詳細は、『Oracle Advanced Security管理者ガイド』を参照してください。

2.2.4.2 アクセス制御と認可

認可プロセスにより、ユーザーが権限を持つ情報のみを読取りまたは更新することが保証されます。ディレクトリ・サーバーは、特定のディレクトリ操作の実行に必要な権限が(セッションに関連付けられた認可IDによって識別された)ユーザーに与えられていることを確認します。必要な権限がないと、操作は実行できません。

適切な認可が行われていることを保証するためにディレクトリ・サーバーが使用するメカニズムは、アクセス制御と呼ばれます。また、アクセス制御項目(ACI)は、アクセス制御に関連する管理ポリシーを記録したディレクトリ・メタデータです。

ACIは、ユーザーが変更できる操作属性として、Oracle Internet Directoryに格納されています。通常、このACI属性値のリスト全体が1つのディレクトリ・オブジェクトに関連付けられています。このリストはアクセス制御リスト(ACL)と呼ばれます。このリストにある属性値によって、そのディレクトリ・オブジェクトに対するアクセス・ポリシーが管理されます。

ACIは、ディレクトリ内にテキスト文字列として格納されています。この文字列は、明確に定義された書式に従う必要があります。ACI属性の各有効値は、個別のアクセス制御ポリシーを表します。これらの個々のポリシーのコンポーネントは、ACIディレクティブまたはACIと呼ばれ、その書式はACIディレクティブ書式と呼ばれます。

アクセス制御ポリシーは規範的です。つまり、そのセキュリティ・ディレクティブは、ディレクトリ情報ツリー(DIT)内のすべての下位エントリに適用されるように設定できます。アクセス制御ポリシーが適用される開始点は、アクセス制御ポリシー・ポイント(ACP)と呼ばれます。

2.2.4.3 データ整合性

Oracle Internet Directoryは、SSLを使用して、送信中にデータの変更、削除または再実行が行われないことを保証します。この機能では、暗号化チェックサムを使用して、セキュアなメッセージ・ダイジェストを生成します。チェックサムは、MD5アルゴリズムまたはSecure Hash Algorithm(SHA)を使用して作成されます。メッセージ・ダイジェストは各ネットワーク・パケットに組み込まれます。

2.2.4.4 データ・プライバシ

Oracle Internet Directoryでは、SSLによる公開鍵暗号化を使用して、送信中にデータが開示されないことを保証します。公開鍵暗号では、メッセージの送信側が受信側の公開鍵を使用してメッセージを暗号化します。メッセージが送信されると、受信側は、受信側の秘密鍵を使用してメッセージを復号化します。ディレクトリは2つのレベルの暗号化をサポートしています。

- DES40
国際的に使用可能なDES40はDESの改良型で、秘密鍵を事前に処理して40ビットの有効な鍵を提供します。DES40は、米国およびカナダ以外でDESベースの暗号化アルゴリズムの使用を希望する顧客を対象に設計されています。

- RC4_40
Oracleは、Oracle製品が使用できる事実上すべての地域に対して、鍵のサイズが40ビットのRC4データ暗号化アルゴリズムを輸出するライセンスを取得しています。この結果、国際企業は、高速暗号化を使用して事業全体を保護することが可能になります。

2.2.4.5 パスワード・ポリシー

パスワード・ポリシーとは、パスワードの使用方法を制御する規則のセットです。ユーザーがディレクトリにバインドしようとすると、ディレクトリ・サーバーはパスワード・ポリシーを使用して、指定されたパスワードがポリシーに設定されている様々な要件を満たしていることを確認します。

パスワード・ポリシーを設定するときに、次のようなタイプの規則を設定します。

- 指定のパスワードの最大有効期間

- パスワードの最少文字数

- ユーザーが自分のパスワードを変更できるかどうか

2.3 標準的なLDAP APIの概要

標準的なLDAP APIを使用すると、「LDAPモデル」で説明した基本的なLDAP操作を実行できます。このAPIには、C版、PL/SQL版およびJava版があります。最初の2つはディレクトリSDKに含まれています。もう1つはJNDIパッケージに含まれています。3つともTCP/IP接続を使用します。これらは、LDAPバージョン3に基づいており、Oracle Internet DirectoryへのSSL接続をサポートしています。

この項では、次の項目について説明します。

- 第2.3.1項「APIの使用モデル」

- 第2.3.2項「C APIスタート・ガイド」

- 第2.3.4項「Java APIスタート・ガイド」

- 第2.3.3項「DBMS_LDAPパッケージ・スタート・ガイド」

2.3.1 APIの使用モデル

一般的に、アプリケーションでは、次の4つの手順に従ってAPIのファンクションを使用します。

1. ライブラリを初期化し、LDAPセッション・ハンドルを取得します。

2. 必要に応じて、LDAPサーバーに対する認証を行います。

3. いくつかのLDAP操作を実行し、その結果とエラー(ある場合)を取得します。

4. セッションをクローズします。

図2-3に、これらの手順を示します。

図2-3 DBMS_LDAPの一般的な使用手順

2.3.2 C APIスタート・ガイド

C APIを使用してアプリケーションを作成する場合、$ORACLE_HOME/ldap/publicにあるヘッダー・ファイルldap.hをインクルードする必要があります。また、$ORACLE_HOME/lib/libclntsh.so.10.1にあるライブラリに動的にリンクすることも必要です。

関連項目:

SSLモードおよび非SSLモードの使用方法の詳細は、第8.3項「C APIの使用例」を参照してください。

2.3.3 DBMS_LDAPパッケージ・スタート・ガイド

DBMS_LDAPパッケージを使用すると、PL/SQLアプリケーションで、エンタープライズ・ワイドのLDAPサーバー内にあるデータにアクセスできます。ファンクション・コールの名前と構文は、C APIの場合と同様です。このファンクションは、C APIに関するInternet Engineering Task Force(IETF)の最新の推奨事項に準拠しています。ただし、PL/SQL APIに含まれるのは、C APIで使用できるファンクションの一部のみです。特に、PL/SQL APIで使用できるのは、LDAPサーバーへの同期コールのみです。

PL/SQL LDAP APIの使用を開始するには、次のコマンド・シーケンスを使用してDBMS_LDAPをデータベースにロードします。

1. SQL*Plusを使用して、データベースにログインします。データベースが置かれているOracleホームにあるツールを実行します。SYSDBAとして接続します。

SQL> CONNECT / AS SYSDBA

2. 次のコマンドを使用して、APIをデータベースにロードします。

SQL> @?/rdbms/admin/catladap.sql

2.3.4 Java APIスタート・ガイド

Java開発者は、Java Naming and Directory Interface(JNDI)を使用して、Oracle Internet Directoryの情報にアクセスできます。JNDIは次のリンクで提供されています。

http://www.oracle.com/technetwork/java/jndi/index.html

この章ではJava APIについて説明しませんが、第2.4.3項「JNDIを使用したセッションの初期化」で、JNDIに対するラッパー・メソッドを使用して基本的な接続を確立する方法を示します。

2.4 LDAPセッションの初期化

C APIに基づいたすべてのLDAP操作で、クライアントがLDAPサーバーとのLDAPセッションを確立することが求められます。PL/SQL APIに基づいたLDAP操作を実行するには、最初にデータベース・セッションを初期化してからLDAPセッションをオープンする必要があります。ほとんどのJava操作では、Java Naming and Directory Interface(JNDI)接続が必要になります。ここで説明するoracle.ldap.util.jndiパッケージは、この接続の確立に伴う作業を簡素化します。

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

- 第2.4.1項「C APIを使用したセッションの初期化」

- 第2.4.2項「DBMS_LDAPを使用したセッションの初期化」

- 第2.4.3項「JNDIを使用したセッションの初期化」

2.4.1 C APIを使用したセッションの初期化

Cファンクションldap_init()は、LDAPサーバーとのセッションを初期化します。サーバーは、そのサーバーを必要とする操作が実行されるまで実際に接続されないため、初期化した後にオプションを設定できます。

ldap_initの構文は、次のとおりです。

LDAP *ldap_init
(

const char      *hostname,
int             portno

);

表2-3に、このファンクションのパラメータをリストし、説明します。

表2-3 ldap_init()のパラメータ

パラメータ

説明

hostname

ディレクトリ・ホスト名またはドット区切り文字列表記のIPアドレスを空白で区切ったリストが入ります。コロンで区切ることで各ホスト名にポート番号を組み合せることができます。

接続に成功するまで、ホストがリストの順序に従って試されます。

注意: リテラルIPv6[10]アドレスをhostnameパラメータに格納するための適切な表現が必要ですが、現在はまだ決定および実装されていません。

portno

接続先ディレクトリのTCPポート番号が入ります。デフォルトのLDAPポート3060は、定数LDAP_PORTを指定することで取得できます。ホストにポート番号が含まれている場合、このパラメータは無視されます。

ldap_init()およびldap_open()の戻り値は、そのセッションへの後続のコールに渡す必要がある不透明な構造体へのセッション・ハンドル(ポインタ)です。これらのルーチンは、セッションが初期化できない場合にNULLを戻します。オペレーティング・システムのエラー・レポート・メカニズムをチェックすると、コールに失敗した理由を確認できます。

2.4.2 DBMS_LDAPを使用したセッションの初期化

PL/SQL APIでは、ファンクションDBMS_LDAP.init()によりLDAPセッションを開始します。このファンクションの構文は、次のとおりです。

FUNCTION init (hostname IN VARCHAR2, portnum  IN PLS_INTEGER )

RETURN SESSION;

LDAPセッションを確立するには、initファンクションに有効なホスト名とポート番号が必要です。このファンクションは、そのためのデータ構造を割り当て、コール元にDBMS_LDAP.SESSIONタイプのハンドルを戻します。コールで戻されたハンドルは、DBMS_LDAPでセッションに定義された後続のすべてのLDAP操作で使用する必要があります。APIは、このセッション・ハンドルを使用して、オープン接続、未処理のリクエスト、その他の情報に関する状態をメンテナンスします。

アクティブな同時接続数は64に制限されていますが、1つのデータベース・セッションで必要な数のLDAPセッションを取得できます。複数のサーバーから同時にデータを取得する必要がある場合、または複数のLDAPアイデンティティを使用するオープン・セッションが必要な場合、1つのデータペース・セッションは、通常複数のLDAPセッションを持ちます。

注意:

DBMS_LDAP.init()のコールで戻されるハンドルは動的な構造体です。複数のデータベース・セッション間では存続しません。ハンドルの値を永続的なフォームに格納し、後で再利用すると、予測できない結果になる場合があります。

2.4.3 JNDIを使用したセッションの初期化

oracle.ldap.util.jndiパッケージは、JNDI実装に対するラッパー・メソッドを提供することで、基本的な接続をサポートします。JNDIを使用して接続を確立する場合は、次のリンクを参照してください。

http://www.oracle.com/technetwork/java/jndi/index.html

次に、非SSL接続を確立するoracle.ldap.util.jndiの実装を示します。

import oracle.ldap.util.jndi
import javax.naming.*;

public static void main(String args[])
{
try{
InitialDirContext ctx = ConnectionUtil.getDefaultDirCtx(args[0], // host
args[1],  // port
args[2],  // DN
args[3];  // password)
// Do work
}
catch(NamingException ne)
{
// javax.naming.NamingException is thrown when an error occurs
}
}

注意:

- DNとpasswordは、バインド識別名とパスワードを示します。匿名バインドの場合、これらを""に設定します。

- ConnectionUtil.getSSLDirCtx()を使用すると、認証なしのSSL接続を確立できます。

2.5 LDAPセッションの認証

LDAPサーバーに対する操作を実行する個人またはアプリケーションは、最初に認証を受ける必要があります。これらのエンティティのdnパラメータおよびpasswdパラメータがNULLの場合、LDAPサーバーはanonymousと呼ばれる特別なアイデンティティをユーザーに割り当てます。通常、匿名ユーザーは最小限の権限を与えられたディレクトリ・ユーザーです。

バインド操作が完了すると、別のバインド操作が発生するか、LDAPセッションが終了する(unbind_s)まで、ディレクトリ・サーバーに新規のアイデンティティが保持されます。LDAPサーバーは、このアイデンティティを使用して、デプロイ先の企業で規定されたセキュリティ・モデルを実施します。このアイデンティティは、識別されたユーザーまたはアプリケーションがディレクトリ内で検索、更新または比較を行うための十分な権限を持っているかどうかをLDAPサーバーが判断するために役立ちます。

バインド操作用のパスワードは、ネットワーク上をクリアテキストで送信されます。ネットワークがセキュアでない場合は、認証とデータ転送を伴うその他のLDAP操作でSSLを使用することを検討してください。

この項では、次の項目について説明します。

- 第2.5.1項「C APIを使用したLDAPセッションの認証」

- 第2.5.2項「DBMS_LDAPを使用したLDAPセッションの認証」

2.5.1 C APIを使用したLDAPセッションの認証

Cファンクションldap_simple_bind_s()を使用すると、ユーザーとアプリケーションは、識別名とパスワードを使用してディレクトリ・サーバーへの認証を受けることができます。

ファンクションldap_simple_bind_s()の構文は、次のとおりです。

int ldap_simple_bind_s
(
LDAP* ld,
char* dn,
char* passwd
);

表2-4に、このファンクションのパラメータをリストし、説明します。

表2-4 ldap_simple_bind_s()の引数

引数

説明

ld

有効なLDAPセッション・ハンドルです。

dn

アプリケーションが認証で使用するアイデンティティ

passwd

認証アイデンティティに対するパスワード

dnパラメータおよびpasswdパラメータがNULLの場合、LDAPサーバーはanonymousと呼ばれる特別なアイデンティティをユーザーまたはアプリケーションに割り当てます。

2.5.2 DBMS_LDAPを使用したLDAPセッションの認証

PL/SQLファンクションsimple_bind_sを使用すると、ユーザーとアプリケーションは、識別名とパスワードを使用してディレクトリへの認証を受けることができます。simple_bind_sの構文は、次のとおりです。

FUNCTION simple_bind_s ( ld IN SESSION, dn IN VARCHAR2, passwd IN VARCHAR2)

RETURN PLS_INTEGER;

このファンクションには、initで取得したLDAPセッション・ハンドルが最初のパラメータとして必要であることに注意してください。

次のPL/SQLコード・スニペットは、初期化と認証を行う前述のPL/SQLファンクションの実装方法を示しています。

DECLARE

retval    PLS_INTEGER;
my_session       DBMS_LDAP.session;

BEGIN

retval    := -1;
-- Initialize the LDAP session
my_session       := DBMS_LDAP.init('yow.example.com',3060);
--Authenticate to the directory
retval  :=DBMS_LDAP.simple_bind_s(my_session,'cn=orcladmin',
'welcome');

前述の例では、LDAPセッションはLDAPサーバーyow.example.comで初期化されます。このサーバーは、TCP/IPポート番号3060でリクエストをリスニングします。次に、アイデンティティcn=orcladmin(パスワードはwelcome)が認証されます。認証が完了したら、通常のLDAP操作を開始できます。

2.6 ディレクトリの検索

検索は、最も一般的なLDAP操作です。アプリケーションは、複雑な検索条件を使用し、ディレクトリからエントリを選択して取得できます。

この項では、次の項目について説明します。

- 第2.6.1項「検索操作のプログラム・フロー」

- 第2.6.2項「検索有効範囲」

- 第2.6.3項「フィルタ」

- 第2.6.4項「C APIを使用したディレクトリの検索」

- 第2.6.5項「DBMS_LDAPを使用したディレクトリの検索」

注意:

このリリースのDBMS_LDAP APIに準備されているのは、同期検索機能のみです。これは、LDAPサーバーが結果セット全体を戻すまで、検索ファンクションのコール元がブロックされることを意味します。

2.6.1 検索操作のプログラム・フロー

一般的な検索操作を開始して結果を取得するために必要なプログラミングは、次の手順で行います。

1. 検索によって戻される属性を決定し、その属性を配列に入れます。

2. 選択した有効範囲オプションとフィルタを使用して、検索を開始します。

3. 結果セットからエントリを取得します。

4. 手順3で取得したエントリから属性を取得します。

5. 手順4で取得した属性の値を取得し、その値をローカル変数にコピーします。

6. エントリのすべての属性が処理されるまで、手順4を繰り返します。

7. すべてのエントリが処理されるまで、手順3を繰り返します。

図2-4に、フローチャートを使用してこれらの手順を示します。

図2-4 検索関連の操作の流れ

2.6.2 検索有効範囲

検索の有効範囲は、ディレクトリ・サーバーが検索ベースと比較して検証するエントリの数を決定します。表2-5および図2-5に示す3つのオプションのいずれかを選択できます。

表2-5 search_s()またはsearch_st()ファンクションのオプション

オプション

説明

SCOPE_BASE

ディレクトリ・サーバーは、検索ベースに対応しているエントリのみを検索します。

SCOPE_ONELEVEL

ディレクトリ・サーバーは、検索対象を検索ベース・エントリの直接の子エントリに限定します。

SCOPE_SUBTREE

ディレクトリ・サーバーは、検索ベース・エントリとその下のサブツリー全体を対象に検索します。

図2-5 3つの有効範囲オプション

図2-5では、検索ベースはグレーの丸で表されています。検索対象のエントリは、薄い色の四角形で囲まれています。

2.6.3 フィルタ

検索フィルタは、検索対象を特定のタイプのエントリに限定するための式です。search_s()およびsearch_st()ファンクションに必要な検索フィルタは、Internet Engineering Task Force(IETF)のRFC 1960で定義されている文字列フォーマットに準拠しています。表2-6に示すように、6種類の検索フィルタがあります。これらは、attribute operator valueという書式で入力します。

表2-6 検索フィルタ

フィルタ・タイプ

書式

例

一致

等価

(att=value)

(sn=Keaton)

Keatonと完全に等しい姓。

近似

(att~=value)

(sn~=Ketan)

Ketanと近似の姓。

部分文字列

(attr=[leading]*[any]*[trailing]

(sn=*keaton*)

(sn=keaton*)

(sn=*keaton)

(sn=ke*at*on)

文字列keatonを含む姓。

keatonで始まる姓。

keatonで終わる姓。

keで始まり、atを含み、onで終わる姓。

以上

attr>=value

(sn>=Keaton)

辞書編集順でKeaton以降の姓。

以下

(attr<=value)

(sn<=Keaton)

辞書編集順でKeaton以前の姓。

存在

(attr=*)

(sn=*)

sn属性を持つすべてのエントリ。

拡張可能

attr[:dn]:=value

(sn:dn:=Mary Smith)

エントリまたはエントリのDNの姓属性がMary Smithと一致するすべてのエントリ。

注意:

- Oracle Internet Directoryでは、拡張可能なフィルタをサポートしていますが、ldapsearchおよびOracle LDAP APIではサポートしていません。このタイプのフィルタを使用するには、JNDIなどの他のAPIを使用する必要があります。

- Oracle Internet Directoryでは、フィルタで指定された一致規則を使用した拡張可能なマッチングはサポートされません。

ブール演算子や接頭辞表記法を使用してこれらのフィルタを組み合せると、より複雑なフィルタを構成できます。表2-7に例を示します。この例では、&文字はANDを、|文字はORを、!文字はNOTを表します。

表2-7 ブール演算子

フィルタ・タイプ

書式

例

一致

AND

(&(filter1)(filter2)). . .)

(&(sn=keaton)(objectclass=inetOrgPerson))

姓がKeaton、かつオブジェクト・クラスがInetOrgPersonのエントリ。

OR

(|(filter1)(filter2)). . .)

(|(sn~=ketan)(cn=*keaton))

姓がketanに近似しているか、または一般名がkeatonで終わるエントリ。

NOT

(!(filter))

(!(mail=*))

メール属性を持たないエントリ。

表2-7の複合フィルタを組み合せて、さらに複雑なネストしたフィルタを作成できます。

関連項目:

- 『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のLDAPフィルタの定義に関する付録

- http://www.ietf.orgのRFC 2254

LDAPフィルタの詳細は、これらの資料を参照してください。

2.6.4 C APIを使用したディレクトリの検索

Cファンクションldap_search_s()は、ディレクトリの同期検索を実行します。

ldap_search_s()の構文は、次のとおりです。

int ldap_search_s
(
LDAP*         ld,
char*         base,
int           scope,
char*         filter
int           attrsonly,
LDAPMessage** res
);

ldap_search_sは、いくつかのサポート・ファンクションと連携して、検索対象を絞り込みます。次の手順は、これらのCファンクションが検索操作のプログラム・フローにどのように対応するかを示しています。第8章「C APIリファレンス」で、これらのファンクションの詳細を示します。

1. 検索によって戻される属性を決定し、その属性を文字列の配列に入れます。配列はNULLで終了する必要があります。

2. ldap_search_s()を使用して、検索を開始します。有効範囲オプションとフィルタで検索対象を絞り込みます。

3. ldap_first_entry()ファンクションまたはldap_next_entry()ファンクションを使用して、結果セットからエントリを取得します。

4. 手順3で取得したエントリから属性を取得します。これには、ldap_first_attribute()ファンクションまたはldap_next_attribute()ファンクションを使用します。

5. 手順4で取得した属性のすべての値を取得し、その値をローカル変数にコピーします。これには、ldap_get_values()ファンクションまたはldap_get_values_len()ファンクションを使用します。

6. エントリのすべての属性が処理されるまで、手順4を繰り返します。

7. すべてのエントリが処理されるまで、手順3を繰り返します。

表2-8 ldap_search_s()の引数

引数

説明

ld

有効なLDAPセッション・ハンドルです。

base

検索のベースの識別名です。

scope

検索対象のDITの幅と深さです。

filter

検索対象のエントリを選択するためのフィルタです。

attrs

検索で戻されるエントリの属性です。

attrso

1に設定すると、属性のみが戻されます。

res

この引数は検索結果を戻します。

2.6.5 DBMS_LDAPを使用したディレクトリの検索

PL/SQL APIを使用する場合、ファンクションDBMS_LDAP.search_s()を使用してディレクトリ検索を実行します。

DBMS_LDAP.search_s()の構文は、次のとおりです。

FUNCTION search_s

(
ld       IN  SESSION,
base     IN  VARCHAR2,
scope    IN  PLS_INTEGER,
filter   IN  VARCHAR2,
attrs    IN  STRING_COLLECTION,
attronly IN  PLS_INTEGER,
res      OUT MESSAGE
)

RETURN PLS_INTEGER;

このファンクションは、表2-9に示す引数を取ります。

表2-9 DBMS_LDAP.search_s()およびDBMS_LDAP.search_st()の引数

引数

説明

ld

有効なセッション・ハンドルです。

base

検索を開始するLDAPサーバー内のベース・エントリの識別名です。

scope

検索対象のDITの幅と深さです。

filter

検索対象のエントリを選択するためのフィルタです。

attrs

検索で戻されるエントリの属性です。

attronly

1に設定すると、属性のみが戻されます。

res

追加処理を行うための結果セットを戻すOUTパラメータです。

search_sは、いくつかのサポート・ファンクションと連携して、検索対象を絞り込みます。次の手順は、すべてのPL/SQLファンクションが検索操作のプログラム・フローにどのように対応するかを示しています。

1. 戻される属性を決定し、その属性をDBMS_LDAP.STRING_COLLECTIONデータ型に設定します。

2. DBMS_LDAP.search_s()またはDBMS_LDAP.search_st()を使用して、検索を実行します。有効範囲オプションとフィルタで検索対象を絞り込みます。

3. DBMS_LDAP.first_entry()またはDBMS_LDAP.next_entry()を使用して、結果セットからエントリを取得します。

4. 手順3で取得したエントリから属性を取得します。これには、DBMS_LDAP.first_attribute()またはDBMS_LDAP.next_attribute()を使用します。

5. 手順4で取得した属性のすべての値を取得し、その値をローカル変数にコピーします。これには、DBMS_LDAP.get_values()またはDBMS_LDAP.get_values_len()を使用します。

6. エントリのすべての属性が処理されるまで、手順4を繰り返します。

7. すべてのエントリが処理されるまで、手順3を繰り返します。

2.7 セッションの終了

この項では、次の項目について説明します。

- 第2.7.1項「C APIを使用したセッションの終了」

- 第2.7.2項「DBMS_LDAPを使用したセッションの終了」

2.7.1 C APIを使用したセッションの終了

LDAPセッション・ハンドルを取得し、ディレクトリ関連の作業をすべて完了した後は、LDAPセッションを破棄する必要があります。C APIでは、そのためにldap_unbind_s()ファンクションを使用します。

ldap_unbind_s()の構文は、次のとおりです。

int ldap_unbind_s
(
LDAP*    ld
);

ldap_unbind_s()のコールが正常終了すると、ディレクトリへのTCP/IP接続がクローズします。また、LDAPセッションで使用されたシステム・リソースの割当てが解除されます。最後に、整数LDAP_SUCCESSがコール元に戻されます。ldap_unbind_s()を起動した後は、その他のLDAP操作は実行できません。ldap_init()を使用して新しいセッションを開始する必要があります。

2.7.2 DBMS_LDAPを使用したセッションの終了

PL/SQL APIが使用されている場合、DBMS_LDAP.unbind_s()ファンクションによりLDAPセッションを破棄します。unbind_sの構文は、次のとおりです。

FUNCTION unbind_s (ld IN SESSION )  RETURN PLS_INTEGER;

unbind_sにより、ディレクトリへのTCP/IP接続がクローズします。また、LDAPセッションで使用されたシステム・リソースの割当てが解除されます。最後に、整数DBMS_LDAP.SUCCESSがコール元に戻されます。unbind_sを起動した後は、その他のLDAP操作は実行できません。initファンクションを使用して新しいセッションを開始する必要があります。

3 LDAPプロトコルに対する拡張機能

この章では、Oracle Internet Directory 11gリリース1(11.1.1)で使用可能なLDAPプロトコルの拡張機能について説明します。

この章では、次の項目について説明します。

- 第3.1項「SASL認証」

- 第3.2項「コントロールの使用」

- 第3.3項「エンド・ユーザーの代理となるプロキシ」

- 第3.4項「動的パスワード・ベリファイアの作成」

- 第3.5項「階層検索の実行」

- 第3.6項「ソート済のLDAP検索結果」

- 第3.7項「ページング済のLDAP検索結果」

- 第3.8項「パスワード・ポリシー」

3.1 SASL認証

Oracle Internet Directoryでは、SASLベース認証の2つのメカニズムをサポートします。この項では、それらのメカニズムについて説明します。次の項目について説明します。

- Digest-MD5メカニズムを使用したSASL認証

- 外部メカニズムを使用したSASL認証

3.1.1 Digest-MD5を使用したSASL認証

SASL Digest-MD5認証は、LDAPバージョン3サーバー(RFC 2829)で必要な認証メカニズムです。LDAPバージョン2では、Digest-MD5はサポートされません。

Digest-MD5認証メカニズムを使用するには、Java APIまたはC APIのいずれかを使用して認証を設定できます。C APIでサポートされているのはauthモードのみです。

関連項目:

- Java固有の情報は、第5.12項「Digest-MD5を使用したSASL認証の実行」および第5.13項「例: SASL Digest-MD5のauth-intモードおよびauth-confモードの使用」を参照してください。

- C固有の情報は、第8.2.5項「ディレクトリに対する認証」および第8.2.6項「Oracleの拡張機能を使用したSASL認証」を参照してください。

SASL Digest-MD5メカニズムには3つのモードがあり、それぞれが異なるセキュリティ・レベルまたはQuality of Protection(QoP)を表しています。これには、次のようなものがあります。

- auth: 認証のみ。初期バインドにのみ認証が必要です。その後、情報はクリアテキストで渡されます。

- auth-int: 認証および整合性。初期バインドには認証が必要です。その後、チェックサムを使用してデータの整合性が保証されます。

- auth-conf: 認証および機密保護。初期バインドには認証が必要です。その後、暗号化を使用してデータが保護されます。次に示す5つの暗号方式を使用できます。

- DES

- 3DES

- RC4

- RC4-56

- RC4-40

これらはすべて対称型暗号化アルゴリズムです。

10g(10.1.4.0.1)より前のOracle Internet Directoryでは、Digest-MD5メカニズムのauthモードのみがサポートされました。10g(10.1.4.0.1)からは、Oracle Internet Directoryで、jdk1.4 APIのJava Naming and Directory Interface(JNDI)、またはOpenLDAP Java APIで3つのモードがすべてサポートされています。Oracle LDAP SDKでサポートされているのはauthモードのみです。

Oracle Internet DirectoryのSASL Digest-MD5認証では、特別な設定をしなくても、レルムではなくユーザーまたはパスワードに基づいた静的なSASL Digest-MD5ベリファイアの生成がサポートされています。レルムに基づいてSASL Digest-MD5を使用する場合は、新しいユーザーをプロビジョニングする前に関連するパスワード・ポリシーでorclpasswordencryptionenable属性の値を1に変更して、どちらからもパスワードを生成できるようにしておく必要があります。値を変更するLDIFファイルは次のようになります。

dn: cn=default,cn=pwdPolicies,cn=Common,cn=Products,cn=OracleContext
changetype: modify
replace: orclpwdencryptionenable
orclpwdencryptionenable: 1

Digest-MD5メカニズムについては、Internet Engineering Task ForceのRFC 2831を参照してください。このメカニズムは、HTTP Digest認証(RFC 2617)に基づいています。

関連項目:

- Internet Engineering Task ForceのWebサイト(http://www.ietf.org)。

- OpenLDAPのクラス・ライブラリ(http://www.openldap.org)。

3.1.1.1 Digest-MD5を使用したSASL認証に含まれる手順

SASL Digest-MD5は、次のようにユーザーを認証します。

1. ディレクトリ・サーバーは、サポートする各種認証オプションと特別なトークンを含むデータをLDAPクライアントに送信します。

2. クライアントは、選択した認証オプションを示す暗号化されたレスポンスを送信して応答します。レスポンスは、クライアントがそのパスワードを知ることがないように暗号化されます。

3. ディレクトリ・サーバーは、クライアントのレスポンスを復号化し、検証します。

3.1.2 外部メカニズムを使用したSASL認証

次の文は、Internet Engineering Task ForceのRFC 2222のセクション7.4を翻訳したものです。

外部認証に関連付けられたメカニズム名はEXTERNALです。クライアントは、認可アイデンティティの入った初期レスポンスを送信します。サーバーは、SASLの外部にある情報を使用して、クライアントが認可アイデンティティとして認証を行う権限を持っているかを判断します。クライアントにその権限がある場合、サーバーは認証情報の交換が正常に終了したことを示します。クそれ以外の場合、サーバーは失敗したことを示します。

IPsecやSSL/TLSなどのシステムによりこの外部情報が提供されます。

クライアントが認可アイデンティティとして空の文字列を送信した(クライアントの認証資格証明から作成された認可アイデンティティをリクエストする)場合、認可アイデンティティは外部認証を提供するシステムの認証資格証明から作成されます。

Oracle Internet Directoryは、SSL相互接続を介してSASL外部メカニズムを提供します。認可アイデンティティ(識別名)は、SSLネットワーク協定時のクライアント証明書から作成されます。

3.2 コントロールの使用

RFC 2251で定義されているように、LDAP v3プロトコルではコントロールによる拡張機能が許可されています。Oracle Internet Directoryでは複数のコントロールをサポートしています。一部は標準で、RFCで説明されています。階層検索用のCONNECT_BYコントロールなど、それ以外のコントロールはOracle固有です。コントロールは、JavaまたはCで使用できます。

コントロールは、サーバーに送信したり、LDAPメッセージとともにクライアントに戻すことができます。このようなコントロールは、サーバー・コントロールと呼ばれます。LDAP APIは、クライアント・コントロールを使用してクライアント側の拡張メカニズムもサポートします。このコントロールは、LDAP APIの動作にのみ影響し、サーバーに送信されることはありません。

CでのLDAPコントロールの使用の詳細は、第8.2.7項「コントロールの使用」を参照してください。

JavaにおけるLDAPコントロールの使用の詳細は、http://www.oracle.com/technetwork/java/jndi/index.htmlのJNDIパッケージjavax.naming.ldapに関するドキュメントを参照してください。

表3-1「Oracle Internet Directoryでサポートされているリクエスト・コントロール」と第3.2項「Oracle Internet Directoryでサポートされているレスポンス・コントロール」に、Oracle Internet Directory 11g リリース1(11.1.1)でサポートされているコントロールを示します。

表3-1 Oracle Internet Directoryでサポートされているリクエスト・コントロール

オブジェクト識別子

名前

説明

2.16.840.1.113894.1.8.39

計算属性値の一意性

複数の属性値のエントリベースの組合せで、計算属性値の一意性を許可します。通常、属性一意性は単一属性にのみ構成されます。属性値の組合せで一意性を必要とするアプリケーションでは、このコントロールを送信すると、Oracle Internet Directoryサーバーにより、ldapadd、ldapmodify -add、ldapmodify -replaceなどの操作における計算属性値の一意性がディレクトリ全体で確保されます。

計算値を含むエントリがすでに存在する場合は、Oracle Internet Directoryサーバーによって、LDAPエラー・コード「LDAP_ALREADY_EXISTS = 0x44」が返されます。

たとえば、マルチテナント環境では、ユーザーのUID属性は特定のテナントで一意である必要がありますが、ディレクトリ全体では必ずしも一意である必要はありません。アプリケーションでは、計算属性TenantID_UIDを持つLDAPエントリが作成されます。ここで、TenantIDはテナントの識別子、UIDは属性になります。LDAPエントリが作成されたアプリケーションでは、このコントロールが送信されます。計算属性値を含むエントリがすでに存在する場合は、Oracle Internet Directoryサーバーによって、LDAP_ALREADY_EXISTSエラー・コードが返されます。

2.16.840.1.113730.3.4.9

OID_SEARCH_VLV_REQ_CONTROL

指定のLDAP検索で、大規模な検索結果セットの連続したサブセットを返すことをクライアントがサーバーに求めることを許可します。このコントロールを使用すると、検索結果を一度に1ページずつ表示できるため、クライアントでのより迅速な検索結果の取得が可能になると同時に、一度に多数の検索結果の格納が必要になる事態を防げます。

サーバーによって、OID_SEARCH_VLV_RES_CONTROL 2.16.840.1.113730.3.4.10が返されます。

OID_SEARCH_VLV_REQ_CONTROLは、SORTコントロール(ldapsearchの-T引数)との組合せでのみ使用できます。SORTコントロールを含めないと、リクエストによりLDAPエラー・コード53「VLVリクエスト制御を含む検索操作でSORTリクエスト制御が欠落しています。」が返されます。

SORTコントロールでは、サーバーで有効な任意のソート指定を含められます。SORTコントロールをOID_SEARCH_VLV_REQ_CONTROLと一緒に使用すると、サーバーはソートした検索結果の完全セットを返すかわりに、ターゲット・エントリを検索結果の参照ポイントとして使用して、コントロールで指定されているエントリの連続したサブセットを返します。

詳細は、「LDAP Extensions for Scrolling View Browsing of Search Results」(http://tools.ietf.org/html/draft-ietf-ldapext-ldapv3-vlv-09)を参照してください。

1.2.840.113556.1.4.319

OID_SEARCH_PAGING_CONTROL

「ページング済のLDAP検索結果」を参照してください。

1.2.840.113556.1.4.473

OID_SEARCH_SORTING_REQUEST_CONTROL

「ソート済のLDAP検索結果」を参照してください。

2.16.840.1.113730.3.4.2

GSL_MANAGE_DSA_CONTROL

Oracle Internet Directoryの参照、動的グループおよび別名オブジェクトの管理に使用されます。詳細は、http://www.ietf.orgのRFC 3296「Named Subordinate References in Lightweight Directory Access Protocol (LDAP) Directories」を参照してください。

2.16.840.1.113894.1.8.1

OID_RESET_PROXYCONTROL_IDENTITY

確立されたLDAP接続でアイデンティティのプロキシ・スイッチを実行するために使用されます。たとえば、アプリケーションAがディレクトリ・サーバーに接続していて、アプリケーションBにスイッチする場合を考えます。アプリケーションBの資格証明を提供することで、リバインドは簡単に実行できます。しかし、資格証明が使用できないときでも、アプリケーションによるアイデンティティの切り替えを可能にするプロキシのメカニズムを使用できる場合があります。このコントロールを使用すると、Oracle Internet DirectoryでアプリケーションAがアプリケーションBとしてプロキシする権限を持っている場合に、アプリケーションAがアプリケーションBにスイッチすることができます。

2.16.840.1.113894.1.8.2

OID_APPLYUSEPASSWORD_POLICY

アプリケーションにユーザーのベリファイアを送信する前に、Oracle Internet Directoryによるアカウント・ロックアウトの確認が必要なアプリケーションによって送信されます。Oracle Internet Directoryによりベリファイア検索リクエスト内にこのコントロールが検出され、ユーザー・アカウントがロックされている場合、Oracle Internet Directoryはアプリケーションにベリファイアを送信しません。適切なパスワード・ポリシー・エラーが送信されます。

2.16.840.1.113894.1.8.3

CONNECT_BY

第3.5項「階層検索の実行」を参照してください。

2.16.840.1.113894.1.8.4

OID_CLIENT_IP_ADDRESS

Oracle Internet DirectoryによってIPロックアウトが実行される場合に、クライアントがエンド・ユーザーIPアドレスを送信するために使用されます。

2.16.840.1.113894.1.8.5

GSL_REQDATTR_CONTROL

動的グループとともに使用されます。ディレクトリ・サーバーに、メンバーシップ・リストではなくメンバーの特定の属性を読み取るよう指示します。

2.16.840.1.113894.1.8.6

PasswordStatusRequestControl

このコントロールがLDAPバインド/比較操作リクエストの一部としてパッケージ化されている場合、このコントロールによってサーバーでパスワード・ポリシーのレスポンス・コントロールが生成されます。実際のレスポンス・コントロールは状況に応じて異なります。状況とは、差し迫ったパスワードの有効期限、残りの猶予期間ログインの数、パスワードの期限切れ、アカウントのロックなどです。

2.16.840.1.113894.1.8.14

OID_DYNAMIC_VERIFIER_REQUEST_CONTROL

サーバーによる動的パスワード・ベリファイアの作成が必要な場合にクライアントが送信するリクエスト・コントロール。サーバーは、リクエスト・コントロールのパラメータを使用してベリファイアを作成します。

2.16.840.1.113894.1.8.16

AccountStatusRequestControl

認証プロセスに関連付けられたLDAP検索操作とともにパッケージ化されている場合、Oracle Internet Directoryは、パスワード・ポリシーのレスポンス・コントロールを返し、アカウントのロックアウトやパスワードの有効期限などのアカウント状態に関連する情報をクライアント・アプリケーションに知らせます。

2.16.840.1.113894.1.8.23

GSL_CERTIFICATE_CONTROL"

証明書検索コントロール。ユーザー証明書の検索方法を指定するためにクライアントが送信するリクエスト・コントロール。『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』の付録「ユーザー証明書のディレクトリの検索」を参照してください。

2.16.840.1.113894.1.8.29

EffectivePolicyControl

このコントロールは、LDAPベース検索の一部としてパッケージ化されます(ベースDNは、テストされているユーザー・エントリのDNです)。この時点で、ディレクトリにエントリが存在している必要はありません。検索を実行しているエンティティがパスワード・ポリシー・エントリを表示するアクセス権を持つ場合、このコントロールを渡すと、適用されるパスワード・ポリシーが記述されたLDAPエントリが返されます。オプションのtestPasswordパラメータとして望ましいパスワードを指定すると、ディレクトリ・サーバーはレスポンス・コントロール2.16.840.1.113894.1.8.32を返します。

2.16.840.1.113894.1.8.36

DelSubtreeControl

このコントロールが削除操作とともに送信された場合、指定されたDN以下のサブツリーすべてが削除されます。この操作を実行できるのは必要な権限を持つユーザーです。

1.3.6.1.1.21.2

Transaction Specification Control

このコントロールの値であるトランザクション識別子により操作とトランザクションの関連を示すLDAPコントロールです。このcriticalityはTRUEです。

表3-2 Oracle Internet Directoryでサポートされているレスポンス・コントロール

オブジェクト識別子

名前

説明

2.16.840.1.113730.3.4.10

OID_SEARCH_VLV_RES_CONTROL

サーバーは、OID_SEARCH_VLV_REQ_CONTROL 2.16.840.1.113730.3.4.9に応答してこのコントロールを返します。

2.16.840.1.113894.1.8.7

OID_PASSWORD_EXPWARNING_CONTROL

パスワード・ポリシー・コントロール。pwdExpireWarning属性が有効化されていて、クライアントからリクエスト・コントロールが送信された場合にサーバーが送信するレスポンス・コントロール。レスポンス・コントロール値には、パスワードの有効期限を表す秒単位の時間が含まれます。

2.16.840.1.113894.1.8.8

OID_PASSWORD_GRACELOGIN_CONTROL

パスワード・ポリシー・コントロール。猶予期間ログインが構成されていて、クライアントからリクエスト・コントロールが送信された場合にサーバーが送信するレスポンス・コントロール。レスポンス・コントロール値には、猶予期間ログインの残数が含まれます。

2.16.840.1.113894.1.8.9

OID_PASSWORD_MUSTCHANGE_CONTROL

パスワード・ポリシー・コントロール。強制パスワードのリセットが有効化されていて、クライアントからリクエスト・コントロールが送信された場合にサーバーが送信するレスポンス・コントロール。クライアントは、ユーザーがこのコントロールを受信する際にパスワードの変更を強制する必要があります。

2.16.840.1.113894.1.8.15

OID_DYNAMIC_VERIFIER_RESPONSE_CONTROL

エラーが発生した場合にサーバーがクライアントに送信するレスポンス・コントロール。レスポンス・コントロールにはエラー・コードが含まれています。

2.16.840.1.113894.1.8.32

PasswordValidationControl

必要なパスワードがオプションのtestPasswordパラメータとして指定されると、サーバーはコントロール2.16.840.1.113894.1.8.29に応答してこのコントロールを返します。クライアント・アプリケーションはvalidationResultを解析して、サーバーがパスワードを受け入れられるかどうか(成功)、またはパスワードが拒否された理由を判断できます。userpasswordに対するLDAP変更操作が失敗したときに生成されるタイプと同じエラー・メッセージが値として返されます。

使用しているOracle Internet Directoryインストールで使用可能なコントロールを確認するには、次のように入力します。

ldapsearch -p port -b "" -s base "objectclass=*"

supportedcontrol=で始まるエントリを探します。

3.3 エンド・ユーザーの代理となるプロキシ

多くの場合、アプリケーションはエンド・ユーザーの代理を務めることが必要になる操作を実行する必要があります。たとえば、エンド・ユーザーのリソース・アクセス記述子を取得する場合などです。(リソース・アクセス記述子については、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』の概要の章を参照してください。)

プロキシ・スイッチは、実行時にJNDIコンテキストで行われます。LDAP v3の機能であるプロキシは、InitialDirContextのサブクラスInitialLdapContextを使用しないと実行できません。Oracleの拡張機能oracle.ldap.util.jndi.ConnectionUtilを使用して接続を確立する場合(後述の例)、InitialLdapContextが常に戻されます。JNDIを使用して接続を確立する場合は、InitialLdapContextが戻されるようにしてください。

注意:

エンド・ユーザーへのプロキシ・スイッチを実行するには、ユーザーの識別名が必要です。

サブスクライバからフェッチしたUserオブジェクトがすでに存在する場合、次のコード断片で示すように、ユーザーの識別名を使用できます。

//User user = subscriber.getUser(...);
user.getDn();

Userオブジェクトが存在しない場合は、次のコード断片で示すように、ユーザ名、UID、SAMアカウント名またはKerberosプリンシパルから作成できます。

User user = new User(dirCtx, idType, userIdValue, subscriber, true);
// idType can be Util.IDTYPE_SIMPLE / Util.IDTYPE_GUID / Util.IDTYPE_WINDOWS / Util.IDTYPE_KERB_PRINCIPALuser.getDn();

次のコードは、プロキシ・スイッチがどのように行われるかを示しています。

import oracle.ldap.util.jndi.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
import javax.naming.*;

public static void main(String args[])
{
try{
InitialLdapContext appCtx=ConnectionUtil.getDefaultDirCtx(args[0], // host
args[1], // port
args[2], // DN
args[3]; // pass)
// Do work as application
// . . .
String userDN=null;
// assuming userDN has the end user DN value
// Now switch to end user
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
ctx.addToEnvironment("java.naming.security.credentials", "");
Control ctls[] = {
new ProxyControl()
};
((LdapContext)ctx).reconnect(ctls);
// Do work on behalf of end user
// . . .
}
catch(NamingException ne)
{
// javax.naming.NamingException is thrown when an error occurs
}
}

前述のコードのProxyControlクラスは、javax.naming.ldap.Controlを実装します。LDAPコントロールの詳細は、『Oracle Fusion Middleware Oracle Identity Managementリファレンス』のLDAPコントロールに関する項を参照してください。次に、ProxyControlクラスの例を示します。

import javax.naming.*;
import javax.naming.ldap.Control;
import java.lang.*;

public class ProxyControl implements Control {

public byte[] getEncodedValue() {
return null;
}

public String getID() {
return "2.16.840.1.113894.1.8.1";
}

public boolean isCritical() {
return false;
}
}

3.4 動的パスワード・ベリファイアの作成

LDAP認証APIを変更して、アプリケーション・パスワードを動的に(ユーザーがアプリケーションにログインするときに)生成できます。この機能は、パスワード・ベリファイアのパラメータを実行時にのみ指定するアプリケーションの必要性を満たすことを目的としています。

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

- 第3.4.1項「動的パスワード・ベリファイアのリクエスト・コントロール」

- 第3.4.2項「DynamicVerifierRequestControlの構文」

- 第3.4.3項「ハッシング・アルゴリズムに必要なパラメータ」

- 第3.4.4項「認証APIの構成」

- 第3.4.5項「動的パスワード・ベリファイアのレスポンス・コントロール」

- 第3.4.6項「動的ベリファイア・フレームワークに対する権限の取得」

3.4.1 動的パスワード・ベリファイアのリクエスト・コントロール

パスワード・ベリファイアを動的に作成するには、LDAP認証APIのldap_searchまたはldap_modifyを変更して、パスワード・ベリファイアのパラメータを含める必要があります。LDAPコントロールDynamicVerifierRequestControlは、このパラメータを転送するためのメカニズムです。これは、パスワード・ベリファイアの静的作成に使用されるパスワード・ベリファイア・プロファイルにかわるものです。ただし、動的ベリファイアの場合にも、静的ベリファイアと同様に、ディレクトリ属性orclrevpwd(同期)およびorclunsyncrevpwd(非同期)が存在し、これらの属性に値が移入されていることが必要になります。

orclrevpwdを生成する場合は、ユーザー・レルムにあるパスワード・ポリシー・エントリのorclpwdencryptionenable属性を1に設定する必要があることに注意してください。この属性を設定しないと、ユーザーが認証を受けようとしたときに例外がスローされます。orclunsyncrevpwdを生成するには、暗号タイプ3DESをエントリcn=defaultSharedPINProfileEntry,cn=common,cn=products,cn=oraclecontextに追加する必要があります。

3.4.2 DynamicVerifierRequestControlの構文

リクエスト・コントロールは次のようになります。

DynamicVerifierRequestControl
controlOid:  2.16.840.1.113894.1.8.14
criticality:  FALSE
controlValue: an OCTET STRING whose value is the BER encoding of the following type:

ControlValue ::= SEQUENCE {

version [0]
crypto  [1] CHOICE OPTIONAL {
SASL/MD5  [0] LDAPString,
SyncML1.0 [1] LDAPString,
SyncML1.1 [2] LDAPString,
CRAM-MD5  [3] LDAPString },
username [1] OPTIONAL LDAPString,
realm    [2] OPTIONAL LDAPString,
nonce    [3] OPTIONAL LDAPString,
}

コントロール構造のパラメータは出現順に渡す必要があることに注意してください。表3-3に、このパラメータを定義します。

表3-3 DynamicVerifierRequestControlのパラメータ

パラメータ

説明

controlOID

コントロール構造を一意に識別する文字列。

crypto

ハッシング・アルゴリズム。コントロール構造に指定された4種類のうちいずれかを選択します。

username

ユーザーの識別名(DN)。この値は常に含める必要があります。

realm

ランダムに選択されたレルム。ユーザーが属するアイデンティティ管理レルムの場合があります。アプリケーション・レルムの場合もあります。SASL/MD5アルゴリズムにのみ必要です。

nonce

ランダムに選択された任意の値。SYNCML1.0とSYNCML1.1に必要です。

3.4.3 ハッシング・アルゴリズムに必要なパラメータ

表3-4に、動的パスワード・ベリファイアの作成に使用される4種類のハッシング・アルゴリズムを示します。この表には、各アルゴリズムの構成要素として使用されるパラメータも示します。ユーザー名とパスワードのパラメータはすべてのアルゴリズムで使用しますが、realmおよびnonceパラメータを使用するかどうかはアルゴリズムによって異なることに注意してください。

表3-4 ハッシング・アルゴリズムに必要なパラメータ

アルゴリズム

必要なパラメータ

SASL/MD5

username、realm、password

SYNCML1.0

username、password、nonce

SYNCML1.1

username、password、nonce

CRAM-MD5

username、password

3.4.4 認証APIの構成

パスワード・ベリファイアを動的に生成する必要のあるアプリケーションの場合、認証APIにDynamicVerifierRequestControlを組み込む必要があります。ldap_searchまたはldap_compareにcontrolOIDとコントロール値をパラメータとして含めることが必要です。これらのAPIは、第3.4.2項「DynamicVerifierRequestControlの構文」に示したコントロール値をBERエンコードし、controlOIDとコントロール値の両方をディレクトリ・サーバーに送信する必要があります。

3.4.4.1 ldap_searchの使用時に渡されるパラメータ

アプリケーションでユーザーを認証するには、ldap_searchを使用してコントロール構造を渡します。ldap_searchを使用する場合、ディレクトリは作成したパスワード・ベリファイアをクライアントに渡します。

ldap_searchには、ユーザーの識別名、controlOIDおよびコントロール値を含める必要があります。ユーザーのパスワードがシングル・サインオン・パスワードの場合、渡される属性はauthpasswordです。パスワードが数値PINやその他の非同期パスワードの場合、渡される属性はorclpasswordverifier;orclcommonpinです。

3.4.4.2 ldap_compareの使用時に渡されるパラメータ

Oracle Internet Directoryでユーザーを認証するには、ldap_compareを使用してコントロール構造を渡します。この場合、ディレクトリはベリファイアを保持し、ユーザー自身を認証します。

ldap_searchと同様に、ldap_compareには、ユーザーの識別名、controlOID、コントロール値およびユーザーのパスワード属性を含める必要があります。ldap_compareの場合、パスワード属性はorclpasswordverifier;orclcommonpin(非同期)です。

3.4.5 動的パスワード・ベリファイアのレスポンス・コントロール

エラーが発生すると、ディレクトリはLDAPコントロールDynamicVerifierResponseControlをクライアントに送信します。このレスポンス・コントロールにはエラー・コードが含まれています。レスポンス・コントロールが送信するエラー・コードの詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のトラブルシューティングに関する章を参照してください。

3.4.6 動的ベリファイア・フレームワークに対する権限の取得

パスワード・ベリファイアをディレクトリで動的に作成するには、アプリケーションのアイデンティティをディレクトリ管理者のVerifierServicesグループに追加する必要があります。このタスクを実行しないと、ディレクトリはLDAP_INSUFFICIENT_ACCESSエラーを戻します。

3.5 階層検索の実行

LDAP検索ファンクションに渡すことのできるサーバー・コントロールの1つはCONNECT_BYです。これは、Oracle固有のコントロールで、階層全体を検索できます。たとえば、CONNECT_BYコントロールを使用せずにgroup1のすべてのユーザーを検索すると、検索ファンクションはgroup1の直接のメンバーであるユーザーのみを返します。CONNECT_BYコントロールを渡すと、検索ファンクションは階層全体を検索します。group2がgroup1のメンバーの場合には、検索でgroup2のユーザーも返されます。group3がgroup2のメンバーの場合には、検索でgroup3のユーザーも返されます。

3.5.1 CONNECT_BYコントロールの新機能

10g(10.1.4.0.1)では、CONNECT_BYコントロールは次の2点において拡張されています。

- 階層をどちらの方向にも検索できるようになりました。つまり、エントリが含まれているすべてのコンテナとエントリ内に含まれているすべてのコンテナを検索できます。

- 検索する階層のレベル数を指定できるようになりました。

3.5.2 CONNECT_BYコントロールの値フィールド

以前のリリースでは、CONNECT_BYコントロールには値は必要ありませんでした。新機能により、次に示す値のいずれか、または両方をCONNECT_BYに渡すことができるようになりました。

- 階層構成属性: 検索対象の属性を表す文字列。この値は、エントリが含まれるすべてのコンテナを検索する場合にのみ必要です。エントリ内に含まれるコンテナを検索する場合、この情報は検索フィルタによって提供されるため、この値を指定する必要はありません。

- レベル数: 検索するレベル数を表す整数。値を0にすると、すべてのレベルが検索されます。デフォルト値は0のため、すべてのレベルを検索する場合にはこの値を渡す必要はありません。

例1: ユーザーが属するすべてのグループの検索

(member=cn=jsmith)などのフィルタを使用した場合、階層構成属性メンバーは検索フィルタに含まれているため指定する必要はありません。デフォルトは0であるため、レベル数の値を渡す必要はありません。

例2: ユーザーが直接属するグループのみの検索

例1と同じフィルタを使用し、整数のコントロール値1を渡します。結果は、CONNECT_BYコントロールを使用しなかった場合と同じになります。

例3: グループのすべてのメンバーの検索

この場合、検索フィルタには(objectclass=*)が指定されていますが、group1のすべてのメンバーを検索する場合、階層全体を検索するための属性はmemberです。この検索では、文字列"member"を階層構成属性として渡す必要があります。デフォルトは0であるため、レベル数の値を渡す必要はありません。

例4: ユーザーのすべてのマネージャの検索

ユーザーjsmithのすべてのマネージャを検索する点を除き、例3に似ているため、階層全体を検索するための属性はmanagerです。この検索では、文字列"manager"を渡します。デフォルトは0であるため、レベル数の値を渡す必要はありません。

関連項目:

- 第8.2.9.1項「ldap_search_ext、ldap_search_ext_s、ldap_searchおよびldap_search_s」

- 第8.2.7項「コントロールの使用」

3.6 ソート済のLDAP検索結果

Oracle Internet Directory 10g(10.1.4.0.1)では、IETF RFC 2891で説明されているように、LDAP検索からソート済の結果を取得できるようになりました。タイプ1.2.840.113556.1.4.473のコントロールを検索ファンクションに渡すことでソート済の結果をリクエストします。サーバーにより戻されるレスポンス・コントロールは、タイプ1.2.840.113556.1.4.474です。エラー処理およびその他の詳細は、RFC 2891を参照してください。

関連項目:

http://www.ietf.orgのIETF RFC 2891「LDAP Control Extension for Server Side Sorting of Search Results」。

ソートおよびページングを一緒に使用できます。

RFC 2891のOracle Internet Directory実装には、次の制限事項があります。

- コントロール値でサポートされているのは、1つのattributeTypeのみです。

- 各属性のスキーマに定義されているデフォルトの順序付けルールが使用されます。

- 言語ソートはサポートされていません。

- デフォルトのソート順序は昇順です。

- ソート・キーが複数の値を含む属性で、エントリにもその属性に対して複数の値があり、ソート順序に影響するその他のコントロールが存在しない場合、サーバーでは、その属性の順序付けルールに応じて最後の値が使用されます。

- ソート属性は検索可能である必要があります。つまり、Oracle Internet Directoryでカタログ化されている属性である必要があります。

3.7 ページング済のLDAP検索結果

Oracle Internet Directory 10g(10.1.4.0.1)では、IETF RFC 2696で説明されているように、LDAP検索からページング済の結果を取得できるようになりました。タイプ1.2.840.113556.1.4.319のコントロールを検索ファンクションに渡すことでソート済の結果をリクエストします。詳細は、RFC 2696を参照してください。

関連項目:

http://www.ietf.orgのIETF RFC 2696「LDAP Control Extension for Simple Paged Results Manipulation」。

ソートおよびページングを一緒に使用できます。

RFC 2696のOracle Internet Directory実装には、次の制限事項があります。

- ACIにより検索結果から複数のエントリが部分的にブロックされた場合、ページ内のエントリ数はページ・サイズより少なくなる可能性があります。

- ページングのレスポンス・コントロールには、合計のエントリ件数の見積りは含まれません。戻り値は常に0です。

3.8 パスワード・ポリシー

Oracle Internet Directoryは、パスワードを制御する一連の豊富なポリシーをネイティブにサポートします。『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のパスワード・ポリシーの管理に関する項を参照してください。実行時にディレクトリのパスワード・ポリシーと対話するようにアプリケーションを設計し、結果として生じるイベントを正常に処理する必要があります。Oracle Internet Directoryには、クライアントがサーバーのパスワード・ポリシーと対話できる複数のメカニズムが用意されています。

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

- 第3.8.1項「ユーザーのプロビジョニング」

- 第3.8.2項「ユーザー認証」

- 第3.8.3項「ユーザー・アカウントのメンテナンス」

3.8.1 ユーザーのプロビジョニング

使用するアプリケーションでディレクトリ内の独自のユーザーをプロビジョニングする場合、新しいユーザー・エントリをディレクトリにコミットする前に、パスワードがサーバーで受け入れられるかどうかをテストする必要があります。次のカスタム・コントロールを使用して、パスワードをテストできます。

EffectivePolicyControl
::= SEQUENCE {
controlType     2.16.840.1.113894.1.8.29,
criticality     BOOLEAN DEFAULT FALSE,
controlValue    testPassword
}
testPassword ::= OCTET STRING (optional)

このコントロールをLDAPベース検索の一部としてパッケージ化します。このベースDNは、テストされているユーザー・エントリのDNです。この時点で、ディレクトリにエントリが存在している必要はありません。サーバーは検索を実行しているエンティティがパスワード・ポリシー・エントリを表示するアクセス権を持つ場合に、適用されるパスワード・ポリシーを記述するLDAPエントリを戻します。希望のパスワードをオプションのtestPasswordパラメータとして指定すると、ディレクトリ・サーバーが次のレスポンス・コントロールを戻します。

PasswordValidationControl
::= SEQUENCE {
controlType     2.16.840.1.113894.1.8.32,
criticality     BOOLEAN DEFAULT FALSE,
controlValue    validationResult
}
validationResult ::= OCTET STRING

クライアント・アプリケーションはvalidationResultを解析して、サーバーがパスワードを受け入れられるかどうか(成功)、またはパスワードが拒否された理由を判断できます。エラー・メッセージは、userpasswordに対するLDAP変更操作が失敗したときに生成されるものと同じです。

3.8.2 ユーザー認証

ユーザー認証の使用例は、大きくは次の2つの主なカテゴリに分類されます。

1. LDAPバインド/比較操作ベースの認証

2. LDAP検索操作ベースの認証

前者は、標準のuserpassword属性に対して実行される認証です。認証プロセス全体はディレクトリ・サーバー内で行われ、アカウントの様々な状態を必要に応じて更新するために適切な内部イベントが生成されます。

後者は、パスワード・ベリファイアなどのその他の認証トークンに対して実行される認証で、ユーザー・エントリの一部として管理されます。トークンは、アプリケーションによって取得されます。認証プロセスはアプリケーション内で、ディレクトリ・サーバーの範囲外で行われます。そのため、LDAP検索ベース認証では、ディレクトリは、認証の結果を暗黙的に把握しません。

次の2つの項では、この2種類の認証シナリオを扱う場合のアプリケーション統合のベスト・プラクティスについて説明します。

3.8.2.1 LDAPバインド/比較操作ベースの認証

このタイプの認証が従来使用されるのは、単純なプロトコルの場合です。アプリケーションは、サーバーに対してLDAPのバインドまたは比較操作のいずれかを実行し、成功したかどうかを確認します。それ以外の場合はすべて認証が失敗したものとして扱います。

認証が失敗すると、アプリケーションはその理由を究明し、状況を修正するアクションを実行するか、原因をエンド・ユーザーに公開してエンド・ユーザーが状況を修正する措置を取ることができるようにします。これにより、ユーザーの経験が増し、管理オーバーヘッドが軽減されます。LDAPバインド/比較操作時にこのような原因の情報を取得するには、次のLDAPコントロールを使用します。

PasswordStatusRequestControl
::= SEQUENCE {
controlType     2.16.840.1.113894.1.8.6,
criticality     BOOLEAN DEFAULT FALSE,
}

このコントロールがLDAPバインド/比較操作リクエストの一部としてパッケージ化される場合、このコントロールはサーバーで処理され、レスポンス・コントロールが生成されます。実際のレスポンス・コントロールは状況に応じて異なります。表3-2「Oracle Internet Directoryでサポートされているレスポンス・コントロール」のパスワードのレスポンス・コントロールを参照してください。状況とは、差し迫ったパスワードの有効期限、残りの猶予期間ログインの数、パスワードの期限切れ、アカウントのロックなどです。

3.8.2.2 LDAP検索操作ベースの認証

アプリケーションがディレクトリから認証トークンを取得した後に独自で認証を行った場合、状態関連ポリシーはすべて無効となります。これらのポリシーが無効の場合、アカウント・ロックなどのシナリオを実施できず、期限切れアカウントのユーザーがアプリケーションに対して認証される可能性があります。

Oracle Internet Directoryには、このようなアプリケーションが、ディレクトリ・サーバーにすでに存在する状態に関連するポリシー・フレームワークを利用できるようにする2つのメカニズムがあります。これらについて次の項で説明します。

- 第3.8.2.2.1項「認証時に状態ポリシーを確認および実施する機能」

- 第3.8.2.2.2項「認証の成功/失敗をディレクトリに知らせる機能」

3.8.2.2.1 認証時に状態ポリシーを確認および実施する機能

この機能は、次のカスタム・コントロールによって有効になります。

AccountStatusRequestControl
::= SEQUENCE {
controlType     2.16.840.1.113894.1.8.16,
criticality     BOOLEAN DEFAULT FALSE,
}

このコントロールが認証プロセスに関連付けられたLDAP検索操作とともにパッケージ化されている場合、Oracle Internet Directoryはこのコントロールを処理してレスポンス・コントロールを戻し、アカウントのロックアウトやパスワードの有効期限切れなどのアカウント状態に関連する情報をクライアント・アプリケーションに知らせます。表3-2「Oracle Internet Directoryでサポートされているレスポンス・コントロール」のパスワード・レスポンス・コントロールを参照してください。アプリケーションは結果の解析および実施が可能になります。

ポリシーがどのようにしてクライアント・アプリケーションで実施できるかという問題はこれで解決されますが、その他の基本的なアプリケーションの要件は次のようになります。

3.8.2.2.2 認証の成功/失敗をディレクトリに知らせる機能

Oracle Internet Directoryでは、仮想属性orclAccountStatusEventによってこの機能が提供されます。

この属性は、すべてのユーザー・エントリで仮想属性として使用できます。つまり、ディスクのフットプリントがありません。ただし、これに対して変更操作を適用できます。ディレクトリには、デフォルトでこの属性に対するアクセス制限があるため、ディレクトリ管理者に、関連するユーザー群について、属性に対するアプリケーションのアイデンティティ書込み権限を付与するように依頼する必要があります。

認証の成功または失敗をディレクトリに伝えるには、UserAccountEventを保持するようにこの属性を変更します。次のLDIFでこれを示します。

dn: UserDN
changetype: modify
replace: orclAccountStatusEvent
orclAccountStatusEvent: UserAccountEvent

Oracle Internet Directoryでは、UserAccountEventの次の値が認識されています。

UserAccountEvent = 1 (Authentication Success)
UserAccountEvent = 2 (Authentication Failure)

Oracle Internet Directoryがこれらのイベントを受信すると、LDAPバインドまたは比較操作に対する認証が成功または失敗したときに起動される論理を起動するため、必要なアカウント状態を更新します。

この方法では、Oracle Internet Directoryで使用可能な、既存のアカウント状態に関連するインフラストラクチャを使用してアプリケーションを保護できます。

3.8.3 ユーザー・アカウントのメンテナンス

ユーザー・アカウントのメンテナンスと、パスワード・ポリシーとのやりとりは、定期的なパスワード変更の前後で主に行われます。アプリケーションで前述のEffectivePolicyControlを使用して有効なポリシーを取得し、そのポリシーを解析して、エンド・ユーザーをパスワード構成要件を示すメッセージを生成することをお薦めします。さらに、このコントロールにカプセル化されたテスト機能を使用して、エンド・ユーザーに変更の失敗の原因を示します。アプリケーション内でこのような状況に対処することで、管理オーバーヘッドが軽減されます。

次に、次回のログイン時にユーザーがパスワードを変更する必要がある使用例が多数あります。Oracle Internet Directoryは、pwdmustchangeパスワード・ポリシー要素が有効化されていて、userpasswordが非自己変更される場合にこの要件をネイティブにトリガーします。ただし、この要件の明示的なトリガーが必要なイベントでは、Oracle Internet Directoryは、前述のorclAccountStatusEvent属性による要件もサポートしています。関連するイベントは次のとおりです。

UserAccountEvent = 3 (Require Password Reset on next Logon)
UserAccountEvent = 4 (Clear Password Reset Requirement)

アプリケーションに管理インタフェースがある場合はこの機能が望ましく、この機能は管理者に対して公開できます。

4 標準的なAPIに対するOracleの拡張機能を使用したアプリケーションの開発

この章では、JavaおよびPL/SQL LDAP APIに対するOracleの拡張機能について説明します。第5章ではJavaの拡張機能について説明します。第6章ではPL/SQLの拡張機能について説明します。C APIに対する拡張機能は、Oracleではサポートされません。

この章では、次の項目について説明します。

- 第4.1項「標準的なAPIに対するOracleの拡張機能の使用」

- 第4.2項「ディレクトリへのアプリケーション・アイデンティティの作成」

- 第4.3項「ユーザーの管理」

- 第4.4項「グループの管理」

- 第4.5項「レルムの管理」

- 第4.6項「ディレクトリ・サーバーの検出」

4.1 標準的なAPIに対するOracleの拡張機能の使用

オラクル社が既存のAPIに追加したAPIは、次の機能を実現します。

- ユーザー管理
アプリケーションで各種ユーザー・プロパティを設定または取得できます。

- グループ管理
アプリケーションでグループ・プロパティの問合せができます。

- レルム管理
アプリケーションでアイデンティティ管理レルムに関するプロパティを設定または取得できます。

- サーバー検出管理
アプリケーションでドメイン・ネーム・システム(DNS)のディレクトリ・サーバーの位置を特定できます。

この後の各項では、これらの機能を1つずつ詳細に解説します。一般的なタスク(接続の確立およびクローズ、APIの拡張機能で検索できないディレクトリ・エントリの検索など)については、基礎となるAPIをアプリケーションで使用する必要があります。

図4-1に、APIの拡張機能を使用した場合のプログラム・フローを示します。

図4-1 APIの拡張機能のプログラム・フロー

「図4-1 APIの拡張機能のプログラム・フロー」の説明

図4-1に示すように、アプリケーションはまずOracle Internet Directoryへの接続を確立します。その後、標準的なAPIファンクションとAPIの拡張機能を区別なく使用できます。

4.2 ディレクトリへのアプリケーション・アイデンティティの作成

アプリケーションがLDAP APIとその拡張機能を使用するためには、LDAP接続を確立する必要があります。接続が確立されたら、操作を実行する権限を得る必要があります。しかし、アプリケーションのアイデンティティがディレクトリにない場合は、どちらのタスクも実行できません。

4.2.1 アプリケーションのアイデンティティの作成

ディレクトリにアプリケーションのアイデンティティを作成するのは比較的簡単です。このようなエントリに必要なのは、orclApplicationEntityとtopの2つのオブジェクト・クラスのみです。Oracle Directory ManagerまたはLDIFファイルを使用してエントリを作成できます。LDIF表記法では、エントリは次のようになります。

dn: orclapplicationcommonname=application_name
changetype: add
objectclass:top
objectclass: orclApplicationEntity
userpassword: password

userpasswordに指定する値は、アプリケーションがディレクトリへのバインドに使用する値です。

4.2.2 アプリケーションのアイデンティティへの権限の割当て

アプリケーションに割り当てることのできる権限の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のOracleテクノロジ・デプロイメントのための権限の委任に関する章を参照してください。正しい権限セットが特定できたら、アプリケーション・エンティティの識別名を適切なディレクトリ・グループに追加します。前述のドキュメントでは、Oracle Directory Services Managerまたはldapmodifyコマンドを使用してこのタスクを実行する方法が説明されています。

4.3 ユーザーの管理

この項では、LDAP APIのユーザー管理機能について説明します。

ディレクトリ対応アプリケーションは、次の操作を実行する必要があります。

- ユーザー・エントリのプロパティの取得
このプロパティは、姓や自宅の住所などと同じ方法で、ユーザー・エントリ自体の属性として格納されています。

- 拡張ユーザー・プリファレンスの取得
このプリファレンスはユーザーに適用されますが、ユーザー・エントリを含むDITとは異なるDITに格納されています。拡張ユーザー・プリファレンスは、すべてのアプリケーションに共通のユーザー・プロパティ、または1つのアプリケーションに固有のユーザー・プロパティです。前者のタイプのプロパティは、Oracleコンテキストの共通の位置に格納されています。後者のタイプのプロパティは、アプリケーション固有のDITに格納されています。

- ユーザーのグループ・メンバーシップの問合せ

- 単純な名前と資格証明が与えられたユーザーの認証
通常、アプリケーションは完全に修飾された識別名、GUIDまたは単純なユーザー名を使用してユーザーを識別します。ホスト環境では、ユーザー名とレルム名の両方を識別に使用することがあります。

4.4 グループの管理

Oracle Internet Directoryでは、グループは識別名の集合としてモデル化されます。ディレクトリ対応のアプリケーションは、グループのプロパティを取得し、特定のユーザーがそのグループのメンバーであることを検証するために、Oracle Internet Directoryにアクセスする必要があります。

通常、グループは次のいずれかを使用して識別されます。

- 完全に修飾されたLDAP識別名

- Global Unique Identifier

- 単純なグループ名とサブスクライバ名

4.5 レルムの管理

アイデンティティ管理レルムは、多数のOracle製品によって提供されるサービスをサブスクライブするエンティティまたは組織です。ディレクトリ対応のアプリケーションは、レルム・プロパティ(ユーザー検索ベースやパスワード・ポリシーなど)を取得するために、Oracle Internet Directoryにアクセスする必要があります。

通常、レルムは次のいずれかを使用して識別されます。

- 完全に修飾されたLDAP識別名

- Global Unique Identifier

- 単純な企業名

4.6 ディレクトリ・サーバーの検出

ディレクトリ・サーバー検出(DSD)を使用すると、ディレクトリ・クライアントによってOracleディレクトリ・サーバーを自動検出できます。これにより、デプロイメント内で、ディレクトリのホスト名およびポート番号情報を中央のDNSサーバーで管理できます。すべてのディレクトリ・クライアントが実行時にDNS問合せを行い、ディレクトリ・サーバーに接続します。ディレクトリ・サーバーの位置情報は、DNSサービス位置レコード(SRV)を使用して格納されます。

SRVには次のものが含まれます。

- LDAPサービスを提供するサーバーのDNS名

- 対応するポートのポート番号

- クライアントが複数のサーバーから適切なサーバーを選択できるようにする任意のパラメータ

また、DSDによって、クライアントがldap.oraファイル自体からディレクトリのホスト名情報を検出できます。

この項では、次の項目について説明します。

- 第4.6.1項「Oracle Internet Directoryの検出インタフェースの利点」

- 第4.6.2項「検出インタフェースの使用モデル」

- 第4.6.3項「DNSからのサーバー名およびポート番号の判断」

- 第4.6.4項「DNSサーバー検出の環境変数」

- 第4.6.5項「DNSサーバー検出のプログラミング・インタフェース」

関連項目:

- 「Discovering LDAP Services with DNS」Michael P.Armijo著(次のURLを参照)

http://www.ietf.org.

- 「A DNS RR for specifying the location of services (DNS SRV)」、Internet RFC 2782(同じURLを参照)

4.6.1 Oracle Internet Directoryの検出インタフェースの利点

通常、LDAPホスト名およびポート情報は、$ORACLE_HOME/network/adminのクライアント上に格納されているldap.oraという名前のファイルで静的に提供されます。多数のクライアントを持つ大規模なデプロイメントの場合、この情報の管理は非常に煩雑になります。たとえば、ディレクトリ・サーバーのホスト名またはポート番号が変更されるたびに、各クライアントのldap.oraファイルを変更する必要があります。

ディレクトリ・サーバー検出を使用すると、ldap.oraファイルのホスト名およびポート番号を管理する必要がなくなります。ホスト名情報は中央のDNSサーバーに格納されているため、更新するのは1回のみです。すべてのクライアントで、接続時にDNSから新しいホスト名情報を動的に検出できます。

DSDでは、取得する際に使用するメカニズムや規格にかかわらず、ディレクトリ・サーバー情報の取得に単一のインタフェースが提供されます。現在、Oracleディレクトリ・サーバーの情報は、DNSまたはldap.oraのいずれかから単一のインタフェースを使用して取得できます。

4.6.2 検出インタフェースの使用モデル

ホスト名情報を検出するには、まず検出ハンドルを作成します。検出ハンドルは、ホスト名情報の検出元を指定します。Java APIの場合、検出ハンドルを作成するにはoracle.ldap.util.discovery.DiscoveryHelperクラスのインスタンスを作成します。

DiscoveryHelper disco = new DiscoveryHelper(DiscoveryHelper.DNS_DISCOVER);

引数DiscoveryHelper.DNS_DISCOVERは、ソースを指定します。この場合、ソースはDNSです。

各ソースには、ホスト名情報を検出するために指定するいくつかの入力項目があります。DNSの場合、入力項目は次のとおりです。

- ドメイン名

- 検出メソッド

- SSLモード

これらのオプションの詳細は、「DNSからのサーバー名およびポート番号の判断」を参照してください。

// Set the property for the DNS_DN
disco.setProperty(DiscoveryHelper.DNS_DN,"dc=us,dc=fiction,dc=com");
// Set the property for the DNS_DISCOVER_METHOD
disco.setProperty(DiscoveryHelper.DNS_DISCOVER_METHOD
,DiscoveryHelper.USE_INPUT_DN_METHOD);
// Set the property for the SSLMODE
disco.setProperty(DiscoveryHelper.SSLMODE,"0");

これで、情報を検出できます。

// Call the discover method
disco.discover(reshdl);

検出された情報は、結果ハンドル(reshdl)で戻されます。結果は、結果ハンドルから抽出されます。

ArrayList result =
(ArrayList)reshdl.get(DiscoveryHelper.DIR_SERVERS);
if (result != null)
{
if (result.size() == 0) return;
System.out.println("The hostnames are :-");
for (int i = 0; i< result.size();i++)
{
String host = (String)result.get(i);
System.out.println((i+1)+".'"+host+"'");
}
}

4.6.3 DNSからのサーバー名およびポート番号の判断

DNSの検索からホスト名およびポート番号を判断するには、ドメインを取得した後、そのドメインに基づくSRVリソース・レコードを検索します。SRVリソース・レコードが複数存在する場合は、重み付けおよび優先順位に基づいてソートされます。SRVリソース・レコードには、接続に必要なホスト名およびポート番号が含まれます。この情報は、リソース・レコードから取得され、ユーザーに戻されます。

検索に必要なドメイン名の判断には、次の3つの方法があります。

- ネーミング・コンテキストの識別名(DN)のマッピング

- ローカル・マシンのドメイン・コンポーネントの使用

- DNSでのデフォルトSRVレコードの検索

4.6.3.1 ネーミング・コンテキストの識別名のマッピング

1つ目は、ネーミング・コンテキストの識別名(DN)を、次のアルゴリズムを使用してドメイン名にマップする方法です。

最初は、出力されるドメイン名は空です。識別名は、右から順に処理されます。相対識別名(RDN)は、次の条件を満たす場合に変換できます。

- 単一の属性型および属性値で構成される。

- 属性型がdcである。

- 属性値がNULL以外である。

RDNを変換できる場合、属性値がドメイン名コンポーネント(ラベル)として使用されます。

最初の値が、右側の最も重要なドメイン名コンポーネントになります。変換された後続のRDN値が左側に追加されます。RDNを変換できない場合、処理は停止します。処理の停止時に出力されたドメイン名が空であった場合、DNはドメイン名に変換されません。

DNがcn=John Doe,ou=accounting,dc=example,dc=netの場合、クライアントによって、dcコンポーネントがDNS名example.netに変換されます。

4.6.3.2 ローカル・マシンのドメイン・コンポーネントによる検索

DNをドメイン名にマップできない場合もあります。たとえば、DNがo=Oracle IDC,Bangaloreの場合、ドメイン名にはマップできません。この場合、2つ目の方法として、クライアントが実行されているローカル・マシンのドメイン・コンポーネントを使用します。たとえば、クライアント・マシンのドメイン名がmc1.example.comの場合、検索に使用するドメイン名はexample.comです。

4.6.3.3 DNSでのデフォルトSRVレコードの検索

3つ目は、DNSでデフォルトSRVレコードを検索する方法です。このレコードは、デプロイメント内のデフォルト・サーバーを指しています。このデフォルト・レコードのドメイン・コンポーネントは、_defaultです。

ドメイン名が判断されると、DNSへの問合せの送信に使用されます。DNSに対して、Oracle Internet Directory固有の形式で指定されているSRVレコードが問い合されます。たとえば、取得されたドメイン名がexample.netの場合、SSL LDAP以外のサーバーに対して、所有者名が_ldap._tcp._oid.example.netのSRVリソース・レコードが問い合されます。

DNSからSRVリソース・レコードが戻されない場合もあります。このような場合、DNSでの検索は、標準形式で指定されたSRVリソース・レコードに対して実行されます。たとえば、所有者名は_ldap._tcp.example.netとなります。

問合せの結果は、SRVレコードのセットです。これらのレコードはソートされ、レコードからホスト情報が抽出されます。抽出された情報はユーザーに戻されます。

注意:

前述の方法は、DNSの問合せ検索が成功して停止するまで、連続して試行することができます。これらの方法は、この項で説明した順序で試行されます。DNSに対して、Oracle Internet Directory固有の形式のSRVレコードのみが問い合されます。前述のいずれの方法も失敗する場合、DNSに対して標準形式のSRVレコードのみの問合せを指定して、すべての方法が再度試行されます。

4.6.4 DNSサーバー検出の環境変数

次の環境変数は、DNSサーバー検出のデフォルト動作を変更します。

表4-1 DNS検出の環境変数

環境変数

説明

ORA_LDAP_DNS

SRVレコードを含むDNSサーバーのIPアドレス。この変数を定義しない場合、ホスト・マシンからDNSサーバー・アドレスが取得されます。

ORA_LDAP_DNSPORT

DNSサーバーが問合せをリスニングするポート番号。この変数を定義しない場合、DNSサーバーが標準のポート番号(53)でリスニングしていると判断されます。

ORA_LDAP_DOMAIN

ホスト・マシンのドメイン。この変数を定義しない場合、ホスト・マシン自身からドメインが取得されます。

4.6.5 DNSサーバー検出のプログラミング・インタフェース

ディレクトリ・サーバー情報の検出には、取得する際に使用するメカニズムや規格にかかわらず、単一のプログラミング・インタフェースが提供されます。情報は、様々なソースから検出される場合があります。それぞれのソース独自のメカニズムを使用して情報を検出できます。たとえば、LDAPホストおよびポート番号情報は、ソースとして機能するDNSから検出される場合があります。この場合は、DNSからのホスト名の検出にDSDが使用されます。

関連項目:

リファレンス情報およびクラスの説明については、プロダクトCDに格納されているJavadocを参照してください。

5 JNDIに対するJava API拡張機能の使用

この章では、標準のディレクトリAPIにJavaの拡張機能を使用して、第3章で紹介した多くの操作を実行する方法について説明します。この章では使用例を示します。標準APIに対するOracleの拡張機能の詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Internet Directory』を参照してください。

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

- 第5.1項「Java拡張機能のインストール」

- 第5.2項「oracle.ldap.utilパッケージを使用したLDAPオブジェクトのモデル化」

- 第5.3項「PropertySetCollection、PropertySetおよびPropertyクラス」

- 第5.4項「ユーザーの管理」

- 第5.5項「ユーザーの認証」

- 第5.6項「ユーザーの作成」

- 第5.7項「ユーザー・オブジェクトの取得」

- 第5.8項「レルムからのオブジェクトの取得」

- 第5.9項「例: Oracle Single Sign-Onログイン名の検索」

- 第5.10項「ディレクトリ・サーバーの検出」

- 第5.11項「例: ディレクトリ・サーバーの検出」

- 第5.12項「Digest-MD5を使用したSASL認証の実行」

- 第5.13項「例: SASL Digest-MD5のauth-intモードおよびauth-confモードの使用」

- 第5.14項「LDAPトランザクションの使用」

- 第5.15項「例: LDAPトランザクションの使用」

5.1 Java拡張機能のインストール

Java拡張機能は、LDAPクライアントのインストール時に標準のJava APIとともにインストールされます。APIとその拡張機能は、$ORACLE_HOME/jlib/ldapjclnt10.jarにあります。

5.2 oracle.ldap.utilパッケージを使用したLDAPオブジェクトのモデル化

Javaでは、LDAPエンティティ(ユーザー、グループ、レルム、アプリケーション)は、ハンドルではなくJavaオブジェクトとしてモデル化されます。このモデル化は、oracle.java.utilパッケージで行われます。他のすべてのユーティリティ機能は、個々のオブジェクトとして(GUIDなど)、あるいはユーティリティ・クラスの静的メンバー関数としてモデル化されます。

たとえば、ユーザーを認証するには、アプリケーションは次の手順に従います。

1. 指定されたユーザー識別名で、oracle.ldap.util.Userオブジェクトを作成します。

2. 必要なプロパティのすべてを備えたDirContext JNDIオブジェクトを作成するか、あるいはDirContextオブジェクトのプールからJNDIオブジェクトを取得します。

3. User.authenticateUserメソッドを呼び出して、DirContextオブジェクトおよびユーザー資格証明への参照を渡します。

4. 既存のDirContextオブジェクトのプールから取得したDirContextオブジェクトは、そのプールに戻します。

CやPL/SQLのプログラマとは異なり、Javaプログラマはオブジェクトを明示的に解放する必要がありません。このタスクは、Javaのガベージ・コレクション・メカニズムが実行します。

5.3 PropertySetCollection、PropertySetおよびPropertyクラス

Userクラス、SubscriberクラスおよびGroupクラスのほとんどのメソッドは、PropertySetCollectionオブジェクトを戻します。このオブジェクトは、1つ以上のLDAPエントリの集合を表しています。各エントリはPropertySetオブジェクトで表され、識別名で識別されます。PropertySetには、Propertyとして表される属性が含まれる場合があります。Propertyとは、そのPropertyが表す特定の属性に関する1つ以上の値の集合です。次に、これらのクラスの使用例を示します。

PropertySetCollection psc = Util.getGroupMembership( ctx,
myuser,
null,
true );
// for loop to go through each PropertySet
for (int i = 0; i < psc.size(); i++ ) {

PropertySet ps = psc.getPropertySet(i);

// Print the DN of each PropertySet
System.out.println("dn:  " + ps .getDN());

// Get the values for the "objectclass" Property
Property objectclass = ps.getProperty( "objectclass" );

// for loop to go through each value of Property "objectclass"
for (int j = 0; j< objectclass.size(); j++) {

// Print each "objectclass" value
System.out.println("objectclass:  " + objectclass.getValue(j));
}
}

エンティティmyuserは、Userオブジェクトです。pscオブジェクトには、myuserが属するネストされたグループがすべて含まれます。このコードは結果エントリをループし、各エントリのオブジェクト・クラス値をすべて出力します。

5.4 ユーザーの管理

ユーザー関連機能はすべてoracle.ldap.util.UserというJavaクラスで抽象化されます。このプロセスは、次のようになります。

1. 識別名、GUIDまたは単純な名前に基づいて、oracle.ldap.util.Userオブジェクトを構成します。

2. 必要な場合は、User.authenticateUser(DirContext, int, Object)を呼び出して、ユーザーを認証します。

3. User.getProperties(DirContext)を呼び出して、ユーザー・エントリの属性を取得します。

4. User.getExtendedProperties(DirContext, int, String[])を起動してユーザーの拡張プロパティを取得します。intはsharedまたはapplication-specificのどちらかです。String[]は必要なプロパティのタイプを表すオブジェクトです。String[]がnullの場合、指定されたカテゴリのすべてのプロパティが取得されます。

5. PropertySetCollection.getProperties(int)を呼び出して、手順4で戻されたプロパティの解析に必要なメタデータを取得します。

6. 拡張プロパティを解析し、アプリケーション固有のロジックを続行します。この解析は、アプリケーション固有のロジックによっても行われます。

5.5 ユーザーの認証

ユーザー認証は、ユーザーがログイン時に指定した資格証明とそのユーザーのディレクトリ内の資格証明を比較する一般的なLDAP操作です。Oracle Internet Directoryでは、次のものがサポートされています。

- 認証時に使用可能な任意の属性。

- 認証メソッドによって戻される任意のパスワード・ポリシー例外。ただし、パスワード・ポリシーはuserpassword属性のみに適用されることに注意してください。

次に、APIを使用してユーザーを認証するためのコード例を示します。

// User user1 - is a valid User Object
try
{
user1.authenticateUser(ctx,
User.CREDTYPE_PASSWD, "welcome");

// or
// user1.authenticateUser(ctx, <any
attribute>, <attribute value>);
}
catch (UtilException ue)
{
// Handle the password policy error
accordingly
if (ue instanceof PasswordExpiredException)
// do something
else if (ue instanceof GraceLoginException)
// do something
}

5.6 ユーザーの作成

subscriberクラスによってcreateUser()メソッドが使用され、プログラムによりユーザーが作成されます。ユーザー・エントリに必要なオブジェクト・クラスは、Oracle Delegated Administration Servicesを介して設定可能です。createUser()メソッドは、ユーザーの作成時に、クライアントが要件を理解し必須の属性に対して値を提供することを前提にしています。プログラマによって必須情報が提供されない場合、サーバーはエラーを戻します。

コード例の次のスニペットは、使用方法を示します。

// Subscriber sub is a valid Subscriber object
// DirContext ctx is a valid DirContext

// Create ModPropertySet object to define all the attributes and their values.
ModPropertySet mps = new ModPropertySet();
mps.addProperty(LDIF.ATTRIBUTE_CHANGE_TYPE_ADD,"cn", "Anika");
mps.addProperty(LDIF.ATTRIBUTE_CHANGE_TYPE_ADD,"sn", "Anika");
mps.addProperty(LDIF.ATTRIBUTE_CHANGE_TYPE_ADD,"mail",
"Anika@example.com");

// Create user by specifying the nickname and the ModPropertySet just defined
User newUser = sub.createUser( ctx, mps, true);

// Print the newly created user DN
System.out.println( newUser.getDN(ctx) );

// Perform other operations with this new user

5.7 ユーザー・オブジェクトの取得

subscriberクラスによってgetUser()メソッドが提供され、Userクラスのパブリック・コンストラクタと置き換えられます。このメソッドは、指定された情報に基づいてUserオブジェクトを戻します。

次に、使用方法を示します。

// DirContext ctx is contains a valid directory connection with
sufficient privilege to perform the operations

// Creating RootOracleContext object
RootOracleContext roc = new RootOracleContext(ctx);

// Obtain a Subscriber object representing the default
subscriber
Subscriber sub = roc.getSubscriber(ctx,
Util.IDTYPE_DEFAULT, null, null);

// Obtain a User object representing the user whose
nickname is "Anika"
User user1 = sub.getUser(ctx, Util.IDTYPE_SIMPLE, "Anika",
null);
// Do work with this user

The getUser() method can retrieve users based on DN, GUID
and simple name.  A getUsers() method is also available to
perform a filtered search to return more than one user at a
time.  The returned object is an array of User objects.
For example,

// Obtain an array of User object where the user's nickname
starts with "Ani"
User[] userArr = sub.getUsers(ctx, Util.IDTYPE_SIMPLE,
"Ani", null);
// Do work with the User array

5.8 レルムからのオブジェクトの取得

この項では、Java APIを使用してアイデンティティ管理レルムのオブジェクトを取得する方法について説明します。

RootOracleContextクラスはルートOracleコンテキストを表します。アイデンティティ管理レルムの作成に必要な情報のほとんどは、ルートOracleコンテキストに格納されています。RootOracleContextクラスではgetSubscriber()メソッドが提供されます。このメソッドは、subscriberクラスのパブリック・コンストラクタと置き換えられ、指定された情報に基づいてアイデンティティ管理レルム・オブジェクトを戻します。

次に、使用方法を示します。

// DirContext ctx contains a valid directory
// connection with sufficient privilege to perform the
// operations

// Creating RootOracleContext object
RootOracleContext roc = new RootOracleContext(ctx);

// Obtain a Subscriber object representing the
// Subscriber with simple name "Oracle"
Subscriber sub = roc.getSubscriber(ctx,
Util.IDTYPE_SIMPLE, "Oracle", null);

// Do work with the Subscriber object

5.9 例: Oracle Single Sign-Onログイン名の検索

次の例では、単純な名前、GUIDまたはDNがわかっている場合にユーザーのログイン名を検索する方法を示します。Oracle Single Sign-Onのログイン名は、ニックネームとも呼ばれます。

この例は、2つの部分から構成されています。

1. このレルムへのニックネームの保存に使用されている属性を確認します。

2. ユーザー・オブジェクトを取得し、ニックネーム属性の値を確認します。

import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
import oracle.ldap.util.jndi.*;
import oracle.ldap.util.*;
import java.io.*;

public class NickNameSearch {

public static void main(String[] args)
throws Exception
{
InitialLdapContext ctx = ConnectionUtil.getDefaultDirCtx( args[0],
args[1], args[2],args[3]);

RootOracleContext roc=new RootOracleContext(ctx);
Subscriber sub = null;
sub = roc.getSubscriber(ctx, Util.IDTYPE_DEFAULT, null, null) ;

PropertySetCollection psc = sub.getProperties(ctx,
Subscriber.USER_NAMING_PROPERTIES, null);

String nickNameAttribute = null;
try
{
nickNameAttribute = (String) psc.getPropertySet(0).getProperty(Subscriber.USER_NAMING_ATTR_SIMPLE).getValue(0);
}
catch (Exception e)
{
// unable to retrieve the attribute name
System.exit(0);
}
System.out.println("Nickname attribute: " + nickNameAttribute);

// Retrieve user using simple name, guid or DN
User user = sub.getUser(ctx, Util.IDTYPE_SIMPLE,"orcladmin", null);
System.out.println("user DN: " + user.getDN(ctx));

// Retrieve nickname value using User object
psc = user.getProperties(ctx, new String[]{ nickNameAttribute });

String nickName = null;
try
{
nickName = (String) psc.getPropertySet(0).getProperty(nickNameAttribute).getValue(0);
}
catch (Exception e)
{
// unable to retrieve the attribute value
System.exit(0);
}
System.out.println("Nickname : " + nickName);
}
}

5.10 ディレクトリ・サーバーの検出

次の新しいJavaクラス(パブリック・クラス)が導入されました。

public class oracle.ldap.util.discovery.DiscoveryHelper

このクラスでは、指定されたソースから特定の情報を検出するメソッドが提供されます。

表5-1 ディレクトリ・サーバー検出のメソッド

メソッド

説明

discover

指定されたソースから特定の情報を検出します。

setProperty

検出に必要なプロパティを設定します。

getProperty

プロパティの値にアクセスします。

既存のJavaクラスoracle.ldap.util.jndi.ConnectionUtilに、次の2つの新しいメソッドが追加されます。

- getDefaultDirCtx: オーバーロードされたこのファンクションでは、oracle.ldap.util.discovery.DiscoveryHelper.discover()に対して内部コールを実行して、SSL以外のLDAPサーバーのホスト名およびポート情報が判断されます。

- getSSLDirCtx: オーバーロードされたこのファンクションでは、oracle.ldap.util.discovery.DiscoveryHelper.discover()に対して内部コールを実行して、SSLのLDAPサーバーのホスト名およびポート情報が判断されます。

5.11 例: ディレクトリ・サーバーの検出

次に、ディレクトリ・サーバー検出に使用するJavaプログラムの例を示します。

import java.util.*;
import java.lang.*;
import oracle.ldap.util.discovery.*;
import oracle.ldap.util.jndi.*;

public class dsdtest
{
public static void main(String s[]) throws Exception
{
HashMap reshdl = new HashMap();
String result = new String();
Object resultObj = new Object();
DiscoveryHelper disco = new
DiscoveryHelper(DiscoveryHelper.DNS_DISCOVER);

// Set the property for the DNS_DN
disco.setProperty(DiscoveryHelper.DNS_DN,"dc=us,dc=fiction,dc=com")
;

// Set the property for the DNS_DISCOVER_METHOD
disco.setProperty(DiscoveryHelper.DNS_DISCOVER_METHOD,
DiscoveryHelper.USE_INPUT_DN_METHOD);

// Set the property for the SSLMODE
disco.setProperty(DiscoveryHelper.SSLMODE,"0");

// Call the discover method
int res=disco.discover(reshdl);
if (res!=0)
System.out.println("Error Code returned by the discover method is :"+res) ;

// Print the results
printReshdl(reshdl);
}

public static void printReshdl(HashMap reshdl)
{
ArrayList result = (ArrayList)reshdl.get(DiscoveryHelper.DIR_SERVERS);

if (result != null)
{
if (result.size() == 0) return;
System.out.println("The hostnames are :-");
for (int i = 0; i< result.size();i++)
{
String host = (String)result.get(i);
System.out.println((i+1)+".
'"+host+"'");
}
}
}
}

5.12 Digest-MD5を使用したSASL認証の実行

JNDIを使用してSASL接続を確立する場合、javax.naming.Contextの次のプロパティを設定する必要があります。

- Context.SECURITY_AUTHENTICATIONに「DIGEST-MD5」を設定します。

- Context.SECURITY_PRINCIPAL

後者にはプリンシパル名を設定します。この名前は、サーバー固有の形式です。次のいずれかのようになります。

- 認証されているエンティティの完全に修飾された識別名が続く識別名dn:

- ユーザー識別子が続く文字列u:
Oracleディレクトリ・サーバーは、完全に修飾された識別名(cn=user,ou=my department,o=my companyなど)のみを受け入れます。

注意:

SASL識別名は、SASLバインドをコールするAPIに渡される前に正規化される必要があります。SASLベリファイアを生成するために、Oracle Internet Directoryでは正規化された識別名のみがサポートされます。

5.13 例: SASL Digest-MD5のauth-intモードおよびauth-confモードの使用

次のコードでは、SASL Digest-MD5を使用したJava LDAP/JNDIの例を示します。

/* $Header: LdapSasl.java 27-oct-2005.11:26:59 qdinh Exp $ */

/* Copyright (c) 2003, 2005, Oracle. All rights reserved.  */

/*
DESCRIPTION
<short description of component this file declares/defines>

PRIVATE CLASSES
<list of private classes defined - with one-line descriptions>

NOTES
<other useful comments, qualifications, and so on.>

MODIFIED    (MM/DD/YY)
qdinh       04/23/03 - Creation
*/

/**
*  @version $Header: LdapSasl.java 27-oct-2005.11:26:59 qdinh Exp $
*  @author  qdinh   *  @since   release specific (what release of product did this appear in)
*/

package oracle.ldap.util.jndi;

import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
import oracle.ldap.util.jndi.*;
import oracle.ldap.util.*;
import java.lang.*;
import java.util.*;
public class LdapSasl
{
public static void main( String[] args)
throws Exception
{

int numofargs;

numofargs = args.length;

Hashtable hashtable = new Hashtable();

// Look through System Properties for Context Factory if it is available
// then set the CONTEXT factory only if it has not been set
// in the environment -
// set default to com.sun.jndi.ldap.LdapCtxFactory

hashtable.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
// possible valid arguments
// args[0] - hostname
// args[1] - port number
// args[2] - Entry DN
// args[3] - Entry Password
// args[4] - QoP [ auth | auth-int | auth-conf ]
// args[5] - SASL Realm
// args[6] - Cipher Choice
//    If QoP == "auth-conf" then args[6] cipher choice can be
//     - des
//     - 3des
//     - rc4
//     - rc4-56
//     - rc4-40

hashtable.put(Context.PROVIDER_URL, "ldap://"+args[0]+":"+args[1]);
hashtable.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5");
System.out.println("hash put security dn: " + args[2]);
hashtable.put(Context.SECURITY_PRINCIPAL, args[2] );
hashtable.put(Context.SECURITY_CREDENTIALS, args[3] );

// For Quality of Protection modes
// 1. Authentication and Data Integrity Mode - "auth-int"
// 2. Authentication and Data Confidentiality Mode  "auth-conf"

//
// hashtable.put("javax.security.sasl.qop",args[4]);
hashtable.put("javax.naming.security.sasl.realm", args[5]);

// Setup Quality of Protection
//
// System.out.println("hash sasl.qop: " + args[4]);

hashtable.put("javax.security.sasl.qop",args[4]);

if (numofargs > 4)
{
if (args[4].equalsIgnoreCase("AUTH-CONF"))
{

//  Setup a cipher choice only if QoP == "auth-conf"
String strength = "high";
String cipher = new String(args[6]);
if (cipher.compareToIgnoreCase("rc4-40") == 0)
strength = "low";
else if (cipher.compareToIgnoreCase("rc4-56") == 0 ||
cipher.compareToIgnoreCase("des")== 0 )
strength = "medium";
else if (cipher.compareToIgnoreCase("3des") == 0 ||
cipher.compareToIgnoreCase("rc4") == 0)
strength = "high";

// setup cipher choice
System.out.println("hash sasl.strength:"+strength);
hashtable.put("javax.security.sasl.strength",strength);
}

// set maxbuffer length if necessary
if (numofargs > 7 && !"".equals(args[6]))
hashtable.put("javax.security.sasl.maxbuf", args[5].toString());
}

// Enable Debug --
// hashtable.put("com.sun.jndi.ldap.trace.ber", System.err);

LdapContext ctx = new InitialLdapContext(hashtable,null);

// At this stage - SASL Digest -MD5 has been successfully

System.out.println("sasl bind successful");

// Ldap Search Scope Options
//
// - Search base - OBJECT_SCOPE
// - One Level   - ONELEVEL_SCOPE
// - Sub Tree    - SUBTREE_SCOPE
//
// Doing an LDAP Search
PropertySetCollection psc = Util.ldapSearch(ctx,"o=oracle,dc=com","objectclass=*",SearchControls.OBJECT_SCOPE,
new String[] {"*"});
// Print out the serach result
Util.printResults(psc);

System.exit(0);

}                                                              }

5.14 LDAPトランザクションの使用

11gリリース1(11.1.1.6)の時点で、Oracle Internet Directory SDKはRFC 5805に定義されているトランザクションをサポートしています。

関連項目:

『RFC 5805 on Lightweight Directory Access Protocol (LDAP) Transactions』(http://www.ietf.org)

トランザクションはプロビジョニングなどいくつかのアプリケーションをサポートする必要があります。トランザクションがコミットされた場合、トランザクション更新内のすべての操作が成功するか、すべて失敗するかのいずれかです。Oracle Internet Directoryは、拡張操作およびコントロールのオブジェクト識別子を、ルートDSEでsupportedExtensionおよびsupportedControlとして公開します。

Oracle Internet Directory LDAPトランザクションは次のエンティティを使用します。

- トランザクション開始リクエスト(オブジェクト識別子 1.3.6.1.1.21.1): トランザクション開始に関連した操作のグループ化を容易にするLDAP拡張操作です。これはrequestNameが1.3.6.1.1.21.1でrequestValueが存在しないCHOICE extendedReqのLDAPMessageです。

- トランザクション開始レスポンス: トランザクション開始リクエストへのレスポンス内でOracle Internet Directoryサーバーから送信されます。これはCHOICE extendedResのLDAPMessageです。このresponseNameは存在しません。成功した場合、resultCode(0)、responseValueは存在しトランザクション識別子を保持しています。リクエスト形式が不正などの理由で失敗した場合、responseValueは存在しません。

- トランザクション仕様コントロール(オブジェクト識別子 1.3.6.1.1.21.2): このコントロールの値であるトランザクション識別子により、操作とトランザクションの関連を示すLDAPControlです。このcriticalityはTRUEです。

- トランザクション終了リクエスト(オブジェクト識別子 1.3.6.1.1.21.3): トランザクションの終了を示すために使用される、もう1つのLDAP拡張操作です。このトランザクションの処理(トランザクションのコミットまたは中断)を示します。このLDAPMessageはrequestNameが1.3.6.1.1.21.3でrequestValueが存在するCHOICE extendedReqを保持し、BERでエンコードされたトランザクション・リクエストを格納します。
コミットの値がTRUEの場合、識別子で識別されたトランザクションをコミットするリクエストです。コミットの値がFALSEの場合、識別されたトランザクションを中断するリクエストです。

- トランザクション終了レスポンス: Oracle Internet Directoryサーバーのトランザクション終了リクエストへのLDAPMessageレスポンスです。このレスポンス名は存在しません。responseValueが存在する場合、これにはBERでエンコードされたトランザクション・レスポンスが格納されます。

- トランザクション中断通知(オブジェクト識別子 1.3.6.1.1.21.4): トランザクション識別子を含む、responseNameが1.3.6.1.1.21.4でresponseValueが存在する要求に基づかない通知メッセージです。

LDAPトランザクション内でのOracle Internet Directoryサーバーとクライアント間のリクエストおよびレスポンスの順序を次に示します。

1. クライアントが、Oracle Internet Directoryサーバーにトランザクション開始リクエストを発行します。

2. Oracle Internet Directoryサーバーが、トランザクション開始レスポンスにトランザクション識別子を設定し、成功のresultCode(0)でこのリクエストに応答します。不正な形式のリクエストなどの理由で失敗した場合、サーバーはエラーの種類を示す成功以外のresultCodeを含むトランザクション開始レスポンスで応答します。
成功した場合に生成されてクライアントに送信されるこのトランザクション識別子は、後続のプロトコル・メッセージでこのトランザクションを識別するために使用されます。

3. クライアントはサーバーから成功の結果コードを受け取ると、トランザクション識別子を持ったトランザクション仕様コントロールを各更新操作に添付して、単一トランザクションの一部として処理される操作であることを示します。有効な場合のレスポンスでは、Oracle Internet Directoryは成功を送信します。無効の場合、エラーの種類の詳細とともにresultCodeを含む、リクエストへの適切なレスポンスをクライアントに送信します。

4. クライアントは、トランザクション識別子を持ったトランザクション仕様コントロールが添付された、すべてのトランザクション更新操作をOracle Internet Directoryサーバーに送信すると、トランザクション識別子を格納したトランザクション終了リクエストをOracle Internet Directoryサーバーに送信し、トランザクションの処理を要求します。コミットの値がTRUEの場合はトランザクションをコミットするリクエストを表し、値がFALSEの場合はトランザクションを中断するリクエストを表します。

5. トランザクション中断のリクエストを受信すると、Oracle Internet Directoryサーバーは識別されたトランザクションを構成するすべての操作を破棄してトランザクションを中断し、成功のresultCode(0)を含むトランザクション終了レスポンスを返すことで処理の完了を表します。トランザクションをコミットするリクエストを受信すると、Oracle Internet DirectoryサーバーはDBに対して、トランザクション内のすべての操作に対して行った更新をコミットします。成功した場合、サーバーは、成功のresultCode(0)を含むトランザクション終了レスポンスを戻します。失敗した場合は、失敗の種類を表す成功以外のresultCodeを含むトランザクション終了レスポンスを戻します。
トランザクション外でリクエストされたトランザクションや更新をサーバーがシリアライズする必要はありません。つまり、サーバーは1つ以上のクライアントからの異なるエントリ・セット上で動作する複数のコミット・リクエストを同時に処理することがあります。

6. 前述のクライアントとサーバーとのやりとりの際、サーバーがトランザクションの仕様を継続できなくなった場合、サーバーはトランザクション中断通知を発行します。この通知を受信すると、クライアントはトランザクション識別子の使用をすべて中止する必要があり、トランザクションはnullおよびvoidとなります。トランザクションの一部として処理が予定されていたすべての操作は暗黙的に破棄されます。クライアントが引き続きこの識別子を使用しても、Oracle Internet Directoryサーバーからは失敗のresultCodeを含むレスポンスが戻されます。

7. 前述のクライアントとサーバーとのやりとりの際、クライアントがOracle Internet Directoryサーバーへの接続を閉じた場合、サーバーは必要な接続関連のクリーンアップを実行します。

5.15 例: LDAPトランザクションの使用

この項では、LDAP拡張操作を使用したJNDIベースのLDAPトランザクションJavaクライアント・モジュールの開発に必要な手順の簡単なアウトラインを説明します。手順では、トランザクション開始リクエスト、トランザクション開始レスポンス、トランザクション終了リクエストおよびトランザクション終了レスポンスの4つのインタフェースの実装を行います。これら4つのインタフェースを実装するクラスは、トランザクション・セマンティクス内でLDAP更新操作を実行するコードで使用される必要があります。次のサンプルのコード・スニペットは、実装される4つのインタフェースと、トランザクション・セマンティクスでのLDAP更新操作のサンプルにおけるこれらの使用方法を示します。

5.15.1 トランザクション開始リクエスト・インタフェースの実装(LdapStartTxnReq.java)

import java.lang.*;
import java.util.*;
import java.io.*;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;

public class LdapStartTxnReq implements ExtendedRequest
{

public static final String TXN_REQ_OID = "1.3.6.1.1.21.1";

// constructor
public LdapStartTxnReq()
{
}

// Method for getting the request ID
public String getID() {
return TXN_REQ_OID;
}

public byte[] getEncodedValue() {
return null;  // No value is needed for Start Txn request
}

public ExtendedResponse createExtendedResponse(String id, byte[] berValue,
int offset, int length)
throws NamingException

{
return new LdapStartTxnRes(id, berValue, offset, length);    }
}

5.15.2 トランザクション開始レスポンス・インタフェースの実装(LdapStartTxnRes.java)

import java.lang.*;
import java.util.*;
import java.io.*;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;

public class LdapStartTxnRes implements ExtendedResponse
{
public String txnID;

// Called by LdapStartTxnReq.createExtendedResponse()
protected LdapStartTxnRes(String id, byte[] berValue, int offset, int length)
throws NamingException
{
byte[] buff2 = new byte[length];

System.arraycopy(berValue, offset, buff2, 0, length);

try
{
this.txnID = new String(berValue, "UTF8");
}
catch (Exception e)
{
System.out.println(e);
}
}

public String getTxnID()
{
return txnID;
}

// No op for our case
public byte[] getEncodedValue()
{
return null;
}

public String getID()
{
return null; // as have no response ID.
}
}

5.15.3 トランザクション終了リクエスト・インタフェースの実装(LdapEndTxnReq.java)

import java.lang.*;
import java.util.*;
import java.io.*;
import javax.naming.*;
import javax.naming.ldap.*;
import oracle.ldap.util.ber.*;

public class LdapEndTxnReq implements ExtendedRequest
{
public  static final String TXN_END_REQ_OID = "1.3.6.1.1.21.3";
private int sequenceTag = 0x30;
private boolean commitValue;
private String  controlValue;

// constructor
public LdapEndTxnReq(boolean commitVal, String controlVal)
{
this.commitValue = commitVal;
this.controlValue = controlVal;
}

// Method to get End Txn Request ID
public String getID() {
return TXN_END_REQ_OID;
}

public byte[] getEncodedValue()
{
boolean encodeUTF8 = true;
byte[] bytes = null;

try
{
BEREncoder berElement = new BEREncoder();

berElement.beginSeq(sequenceTag);

berElement.encodeBoolean(this.commitValue);

berElement.encodeString(this.controlValue, encodeUTF8);

berElement.endSeq();
bytes = berElement.getTrimmedBuf();

return bytes;
}
catch (EncodeException e)
{
return null;
}
}

public ExtendedResponse createExtendedResponse(String id, byte[] berValue,
int offset, int length)
throws NamingException
{
return null;
}
}

5.15.4 トランザクション終了レスポンス・インタフェースの実装(LdapEndTxnRes.java)

import java.lang.*;
import java.util.*;
import java.io.*;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;

public class LdapEndTxnRes implements ExtendedResponse
{
// constructor
LdapEndTxnRes(String id, byte[] berValue, int offset, int length)
throws NamingException
{
;
}

public String getTxnID()
{
return null;
}

public byte[] getEncodedValue()
{
return null;
}

public String getID()
{
return null;
}
}

5.15.5 トランザクション・セマンティクス内のLDAP更新操作でのJavaおよび疑似コード・インタフェース・サンプル(LdapTxnOperation.java)

import java.lang.*;
import java.util.*;
import java.io.*;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
.
.
.

public class LdapTxnOperation implements  …………….
{
public static void main( String[] args )
{
try
{
LdapContext  ctx;

Perform ldapbind against OID server on the LDAP context ctx;

If  bind is successful
{
/* Issue LDAP Start Transaction Request to OID server and
receive its response */
LdapStartTxnRes startResp = (LdapStartTxnRes)ctx.extendedOperation(new                                                                                                                           LdapStartTxnReq());
/* Extract the transaction ID sent by OID server */
String txnID = startResp.getTxnID();

Issue LDAP update operations (add, delete, modify) to OID server each containing
the Transaction Control with ID 1.3.6.1.1.21.2 and value of the transaction ID;

/* Vendor's technical doc link is provided in Reference section below */

/* After done sending all update operations, issue LDAP End Transaction Request
to OID server with your intention to either commit or abort the transaction and
receive its response. */

If  want to commit the transaction
{ /* commit request */
LdapEndTxnRes endResp = (LdapEndTxnRes)ctx.extendedOperation(new LdapEndTxnReq(true, txnID));
}
Else
{ /* abort request */
LdapEndTxnRes endResp = (LdapEndTxnRes)ctx.extendedOperation(new  LdapEndTxnReq(false, txnID));
}
}
catch( Exception e)
{
e.printStackTrace();
return;
}
return ;
}
}

6 PL/SQLでのAPI拡張機能の使用

この章では、標準のディレクトリAPIにPL/SQLの拡張機能を使用して、ユーザーを管理および認証する方法について説明します。Oracleの拡張機能には、ユーザーを作成するPL/SQL APIは含まれないことに注意してください。標準APIに対するOracleの拡張機能の詳細は、第11章を参照してください。

この章では、次の項目について説明します。

- 第6.1項「PL/SQL拡張機能のインストール」

- 第6.2項「ハンドルを使用したディレクトリ・データへのアクセス」

- 第6.3項「ユーザーの管理」

- 第6.4項「ユーザーの認証」

- 第6.5項「PL/SQL LDAP APIの依存性と制限事項」

6.1 PL/SQL拡張機能のインストール

PL/SQL拡張機能は、Oracleデータベースのインストール時にDBMS_LDAPパッケージとともにインストールされます。スクリプト$ORACLE_HOME/rdbms/admin/catldap.sqlを実行する必要があります。

6.2 ハンドルを使用したディレクトリ・データへのアクセス

この章で説明する拡張機能のほとんどは、補助的なファンクションです。これらは、ユーザー、グループ、レルム、アプリケーションなど、特定のLDAPエンティティに関するデータにアクセスします。多くの場合、これらのファンクションは、いずれかのエンティティに対する参照を標準的なAPIファンクションに渡す必要があります。そのために、APIの拡張機能はハンドルと呼ばれる不透明なデータ構造を使用します。次の手順は、拡張機能がユーザー・ハンドルを作成する方法を示しています。

1. LDAP接続を確立するか、接続のプールから接続を取得します。

2. ユーザーの入力からユーザー・ハンドルを作成します。この入力は、識別名、GUIDまたは単純なシングル・サインオン・ユーザーIDです。

3. LDAP接続ハンドル、ユーザー・ハンドルまたは資格証明を使用して、ユーザーを認証します。

4. ユーザー・ハンドルを解放します。

5. LDAP接続をクローズするか、接続プールに接続を戻します。

6.3 ユーザーの管理

次の手順は、DBMS_LDAP_UTLパッケージを使用して、ディレクトリからユーザー・プロパティを取得するハンドルを作成および使用する方法を示しています。

1. DBMS_LDAP_UTL.create_user_handle(user_hd, user_type, user_id)を呼び出して、ユーザーの入力からユーザー・ハンドルを作成します。この入力は、識別名、GUIDまたは単純なシングル・サインオン・ユーザーIDです。

2. DBMS_LDAP_UTL.set_user_handle_properties(user_hd, property_type, property)を呼び出して、レルムをユーザー・ハンドルと関連付けます。

3. DBMS_LDAP_UTL.get_user_properties(ld, user_handle, attrs, ptype, ret_pset_coll)を呼び出して、ユーザー・エントリの属性を結果ハンドルに入れます。

4. DBMS_LDAP_UTL.get_property_names(pset, property_names)とDBMS_LDAP_UTL.get_property_values(pset, property_name, property_values)を呼び出して、手順3で取得した結果ハンドルからユーザー属性を抽出します。

6.4 ユーザーの認証

ディレクトリに対してユーザーを認証するには、DBMS_LDAP_UTL.authenticate_user(session, user_handle, auth_type, cred, binary_cred)を使用します。このファンクションは、ユーザーが指定したパスワードとユーザーのディレクトリ・エントリのパスワード属性を比較します。

6.5 PL/SQL LDAP APIの依存性と制限事項

このリリースのPL/SQL LDAP APIには、次の制限事項があります。

- APIから取得したLDAPセッション・ハンドルは、データベース・セッションの継続時間内のみ有効です。LDAPセッション・ハンドルを表に書き込んだり、他のデータベース・セッションで再利用することはできません。

- このリリースでは、同期型のLDAP APIファンクションのみサポートされています。
PL/SQL LDAP APIで作業するには、データベースに接続する必要があります。クライアント側のPL/SQLエンジン(Oracle Application Server Formsなど)ではデータベースへの接続が有効でないかぎり、このAPIを使用できません。

7 プロビジョニング統合アプリケーションの開発

10g(10.1.4.0.1)から、プロビジョニング統合アプリケーションの開発に新しいAPIが追加されました。11gリリース1(11.1.1)では変更はありません。『Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド』を参照してください。

第II部

Oracle Internet Directoryプログラミング・リファレンス

第II部では、標準APIと標準APIに対するOracleの拡張機能について説明します。第II部は、次の章で構成されています。

- 第8章「C APIリファレンス」

- 第9章「DBMS_LDAP PL/SQLリファレンス」

- 第10章「Java APIリファレンス」

- 第11章「DBMS_LDAP_UTL PL/SQLリファレンス」

- 第12章「Oracle Directory Integration and Provisioning Java APIリファレンス」

- 第13章「Oracle Directory Integration Platform PL/SQL APIリファレンス」

8 C APIリファレンス

この章では、Oracle Internet DirectoryのC APIについて説明し、その使用例を示します。

この章では、次の項目について説明します。

- 第8.1項「Oracle Internet Directory C APIの概要」

- 第8.2項「C APIのファンクション」

- 第8.3項「C APIの使用例」

- 第8.4項「C APIに必要なヘッダー・ファイルおよびライブラリ」

- 第8.5項「C APIの依存性と制限事項」

8.1 Oracle Internet Directory C APIの概要

Oracle Internet Directory SDK C APIは、LDAPバージョン3 C API、およびSSLをサポートするOracleの拡張機能をベースにしています。

Oracle Internet Directory API 11gリリース1(11.1.1)は、次のモードで使用できます。

- SSL: SSLを使用してすべての通信を保護します。

- 非SSL: クライアント/サーバー間の通信を保護しません。

APIは、TCP/IPを使用してディレクトリ・サーバーに接続します。接続するとき、デフォルトでは暗号化されていないチャネルを使用します。SSLモードを使用するには、Oracle SSLコール・インタフェースを使用する必要があります。APIを使用する際に、SSLコールの有無によってどちらのモードを使用するかを決定します。SSLモードと非SSLモードは簡単に切り替えることができます。

関連項目:

2つのモードの使用方法については、第8.3項 「C APIの使用例」を参照してください。

この項では、次の項目について説明します。

- 第8.1.1項「Oracle Internet Directory SDK C API SSL拡張機能」

- 第8.2.1項「ファンクションの概要」

8.1.1 Oracle Internet Directory SDK C API SSL拡張機能

LDAP APIへのOracle SSL拡張機能は、標準的なSSLプロトコルに基づいています。SSL拡張機能は回線を通るデータの暗号化と復号化および認証を行います。

認証には次の3つのモードがあります。

- 認証なし: クライアントとサーバーのどちらも認証せず、SSLによる暗号化のみを使用します。

- 一方向: クライアントによりサーバーのみが認証されます。

- 双方向: サーバーとクライアントが相互に認証します。

認証のタイプは、SSLインタフェース・コールのパラメータで指定します。

8.1.1.1 SSLインタフェース・コール

次のコールを行うのみで、SSLは使用可能になります。

int ldap_init_SSL(Sockbuf *sb, char *sslwallet, char *sslwalletpasswd, int sslauthmode)

ldap_init_SSLコールは、標準的なSSLプロトコルを使用して、クライアントとサーバーの間で必要なハンドシェイクを実行します。コールが成功すると、これ以降のすべての通信は保護された接続で実行されます。

表8-1 SSLインタフェース・コールの引数

引数

説明

sb

LDAPハンドルの一部として、ldap_openコールによって戻されたソケット・バッファ・ハンドル。

sslwallet

ユーザー・ウォレットの位置。

sslwalletpasswd

ウォレットを使用するために必要なパスワード。

sslauthmode

ユーザーが使用できるSSL認証モード。使用できる値は次のとおりです。

- GSLC_SSL_NO_AUTH: 認証の必要なし

- GSLC_SSL_ONEWAY_AUTH: サーバー認証のみ必要。

- GSLC_SSL_TWOWAY_AUTH: サーバーとクライアントの両方の認証が必要。
戻り値が0(ゼロ)のときは、処理は成功です。戻り値が0(ゼロ)以外のときは、エラーです。エラー・コードは、ldap_err2stringファンクションを使用してエラー・メッセージに変換できます。

関連項目:

第8.3項「C APIの使用例」

8.1.1.2 ウォレットのサポート

使用される認証モードによっては、サーバーおよびクライアントの両方でSSL機能を使用するためのウォレットが必要になる場合があります。APIの11gリリース1(11.1.1)は、Oracle Walletのみサポートしています。Oracle Wallet Managerを使用してウォレットを作成できます。

8.2 C APIのファンクション

この項では、C APIのファンクションおよびプロシージャを1つずつ取り上げます。その用途および構文について説明します。使用方法のヒントも示します。

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

- 第8.2.1項「ファンクションの概要」

- 第8.2.2項「LDAPセッションの初期化」

- 第8.2.3項「LDAPセッション・ハンドル・オプション」

- 第8.2.4項「参照を追跡するためのバインド資格証明の取得」

- 第8.2.5項「ディレクトリに対する認証」

- 第8.2.6項「Oracleの拡張機能を使用したSASL認証」

- 第8.2.7項「コントロールの使用」

- 第8.2.8項「セッションのクローズ」

- 第8.2.9項「LDAP操作の実行」

- 第8.2.10項「操作の中止」

- 第8.2.11項「結果の取得とLDAPメッセージの確認」

- 第8.2.12項「エラーの処理と結果の解析」

- 第8.2.13項「結果リストの参照」

- 第8.2.14項「検索結果の解析」

8.2.1 ファンクションの概要

表8-2に、C APIのファンクションおよびプロシージャをすべて示し、その用途を簡単に説明します。

表8-2 C APIのファンクションおよびプロシージャ

ファンクションまたはプロシージャ

説明

ber_free

BerElement構造体のために割り当てられたメモリーの解放

ldap_abandon_ext
ldap_abandon

非同期操作の取消し

ldap_add_ext
ldap_add_ext_s
ldap_add
ldap_add_s

ディレクトリに新規エントリを追加

ldap_compare_ext
ldap_compare_ext_s
ldap_compare
ldap_compare_s

ディレクトリ内のエントリの比較

ldap_count_entries

一連の検索結果のエントリ件数をカウント

ldap_count_values

属性の文字列値をカウント

ldap_count_values_len

属性のバイナリ値をカウント

ora_ldap_create_clientctx

クライアントのコンテキストの作成およびハンドルを戻す。

ora_ldap_create_cred_hdl

資格証明ハンドルの作成

ldap_delete_ext
ldap_delete_ext_s
ldap_delete
ldap_delete_s

ディレクトリからのエントリの削除

ora_ldap_destroy_clientctx

クライアントのコンテキストの破棄

ora_ldap_free_cred_hdl

資格証明ハンドルの破棄

ldap_dn2ufn

ユーザーにわかりやすい名前に変換

ldap_err2string

特定のエラー・コードのエラー・メッセージを取得

ldap_explode_dn

識別名を構成要素に分割

ldap_explode_rdn

ldap_first_attribute

エントリ内の最初の属性の名前を取得

ldap_first_entry

一連の検索結果から最初のエントリを取得

ora_ldap_get_cred_props

資格証明ハンドルに関連付けられたプロパティの取得

ldap_get_dn

エントリの識別名の取得

ldap_get_option

セッション全体の様々なパラメータの現在の値にアクセス

ldap_get_values

属性の文字列値を取得

ldap_get_values_len

属性のバイナリ値を取得

ldap_init
ldap_open

LDAPサーバーへの接続のオープン

ora_ldap_init_SASL

SASL認証の実行

ldap_memfree

LDAP APIファンクション・コールによって割り当てられたメモリーの解放

ldap_modify_ext
ldap_modify_ext_s
ldap_modify
ldap_modify_s

ディレクトリ内のエントリの変更

ldap_msgfree

検索結果あるいは他のLDAP操作結果のために割り当てられたメモリーの解放

ldap_first_attribute
ldap_next_attribute

エントリ内の次の属性の名前を取得

ldap_next_entry

一連の検索結果から次のエントリを取得

ldap_perror

(非推奨)

エラー・メッセージの中から指定したメッセージを出力

ldap_rename
ldap_rename_s

ディレクトリ内のエントリの相対識別名を変更

ldap_result2error

(非推奨)

結果メッセージからエラー・コードを取得

ldap_result
ldap_msgfree
ldap_msgtype
ldap_msgid

非同期操作の結果のチェック

ldap_sasl_bind
ldap_sasl_bind_s

LDAPサーバーへの一般認証

ldap_search_ext
ldap_search_ext_s
ldap_search
ldap_search_s

ディレクトリの検索

ldap_search_st

タイムアウト値でのディレクトリの検索

ldap_get_option
ldap_set_option

パラメータの値を設定

ldap_set_rebind_proc

参照を追跡する際、新しいサーバーへのバインド資格証明の取得に使用されるコールバック・ファンクションの設定。

ora_ldap_set_clientctx

クライアントのコンテキスト・ハンドルへのプロパティの追加

ora_ldap_set_cred_props

資格証明ハンドルへのプロパティの追加

ldap_simple_bind
ldap_simple_bind_s
ldap_sasl_bind
ldap_sasl_bind_s

LDAPサーバーへの簡易認証

ldap_unbind_ext
ldap_unbind
ldap_unbind_s

LDAPセッションの終了

ldap_value_free

属性の文字列値のために割り当てられたメモリーの解放

ldap_value_free
ldap_value_free_len

属性のバイナリ値のために割り当てられたメモリーの解放

この項では、RFC 1823に規定されているLDAP C APIで使用可能なすべてのコールを示します。

関連項目:

各コールの詳細は、次のURLを参照してください。

http://www.ietf.org

8.2.2 LDAPセッションの初期化

この項のコールは、LDAPサーバーとのセッションを初期化します。

8.2.2.1 ldap_initおよびldap_open

ldap_init()はLDAPサーバーとのセッションを初期化しますが、接続のオープンは行いません。サーバーへの接続が必要となる操作が実行されるまで、実際にはサーバーに接続されません。そのため、初期化後に様々なオプションを設定できます。ldap_open()はセッションを初期化し、接続をオープンします。この2つは同じ目的を達成し、構文も同じですが、前者の使用をお薦めします。

構文

LDAP *ldap_init
(
const char     *hostname,
int            portno
)
;

パラメータ

表8-3 LDAPセッションを初期化するためのパラメータ

パラメータ

説明

hostname

接続先のLDAPサーバーを実行しているホストのIPアドレスを示す、空白で区切られたホスト名またはドット表記の文字列のリストが入ります。リスト内の各ホスト名には、ポート番号を含めることもできます。ホスト名とポート番号はコロンで区切る必要があります。接続に成功するまで、ホストがリストの順序に従って試されます。

IPv6アドレスは、大カッコ([])で囲む必要があります。次に、有効なhostnameの値の例を示します。

host1.example.com

192.168.1.10

[2002:ae5:4000:1::8c57:352]

host1.example.com:3060

192.168.1.10:3060

[2002:ae5:4000:1::8c57:352]:3060

portno

接続先のTCPポート番号が入ります。デフォルトのLDAPポート3060は、定数LDAP_PORTを指定することで取得できます。hostnameにポート番号が含まれている場合、portnoは無視されます。

使用方法

ldap_init()およびldap_open()の戻り値はセッション・ハンドルです。これは、そのセッションに関連する後続のコールに渡す必要がある不透明な構造体へのポインタです。これらのルーチンは、セッションが初期化できない場合にNULLを戻します。セッションが初期化できない場合、オペレーティング・システムのエラー・レポート・メカニズムをチェックし、コールに失敗した理由を確認してください。

LDAP v2サーバーに接続する場合は、後述するLDAPバインド・コールの1つをセッションで完了してから、他の操作を実行する必要があることに注意してください。LDAP v3では、他の操作を実行する前にバインド操作を完了する必要はありません。

コール元プログラムでは、次の項で説明するルーチンを呼び出して、セッションの様々な属性を設定できます。

8.2.3 LDAPセッション・ハンドル・オプション

ldap_init()で戻されたLDAPセッション・ハンドルは、LDAPセッションを表す不透明なデータ型へのポインタです。RFC 1823では、このデータ型はコール元に公開されていた構造体で、構造体のフィールドを設定すると、検索時のサイズや時間の制限などセッションの様々な側面を制御できました。

現在は、コール元でこの構造体に対する重要な変更を行わないように、この項で説明する1組のアクセッサ・ファンクションによってセッションの様々な側面を制御できます。

8.2.3.1 ldap_get_optionおよびldap_set_option

セッション全体に及ぶ様々なパラメータの現在の値にアクセスするにはldap_get_option()を使用します。それらのパラメータに値を設定するにはldap_set_option()を使用します。オプションの中には読取り専用で値が設定できないものもあります。ldap_set_option()をコールし、読取り専用のオプションに値を設定しようとした場合はエラーとなります。

自動参照追跡が有効な場合(デフォルト)、参照の追跡時に確立された接続は、参照を戻す原因となった最初のリクエストを送信したセッションに関するオプションを継承することに注意してください。

構文

int ldap_get_option
(

LDAP            *ld,
int             option,
void            *outvalue

)
;

int ldap_set_option
(

LDAP            *ld,
int             option,
const void      *invalue

)
;

#define LDAP_OPT_ON     ((void *)1)
#define LDAP_OPT_OFF    ((void *)0)

パラメータ

表8-4に、LDAPセッション・ハンドル・オプションのパラメータをリストし、説明します。

表8-4 LDAPセッション・ハンドル・オプションのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。これがNULLの場合は、一連のグローバル・デフォルト値にアクセスします。ldap_init()またはldap_open()を使用して作成された新規のLDAPセッション・ハンドルは、これらのグローバル・デフォルト値の特性を継承します。

option

アクセスまたは設定するオプションの名前です。このパラメータは、表8-5に示す定数のいずれかであることが必要です。定数の後に、その定数の16進値をカッコで囲んで記述します。

outvalue

オプションの値を配置する位置のアドレスです。このパラメータの実際の型は、optionパラメータの設定値によって異なります。outvalueパラメータがchar **型およびLDAPControl **型の場合は、LDAPセッションldに対応付けられているデータのコピーが戻されます。コール元では、戻されたデータの型に従ってldap_memfree()またはldap_controls_free()をコールし、メモリーを解放する必要があります。

invalue

optionパラメータに指定する値へのポインタです。このパラメータの実際の型は、optionパラメータの設定値によって異なります。invalueパラメータに関連付けられたデータはAPI実装によってコピーされるため、APIのコール元はデータを解放するか、ldap_set_option()のコールが正常終了した後にそのデータのコピーを変更できます。invalueパラメータに渡された値が無効な場合、または実装で受け入れることができない場合、ldap_set_option()は-1を戻してエラーの発生を示す必要があります。

定数

表8-5に、LDAPセッション・ハンドル・オプションの定数をリストし、説明します。

表8-5 定数

定数

invalueパラメータの型

outvalueパラメータの型

説明

LDAP_OPT_API_INFO(0x00)

非適用。オプションは読取り専用です。

LDAPAPIInfo*

実行時にLDAP API実装に関する基本的な情報を取得します。アプリケーションでは、コンパイル時および実行時の両方で使用する特定のAPI実装に関する情報を判断できることが必要です。このオプションは読取り専用で、設定はできません。

ORA_LDAP_OPT_RFRL_CACHE

void* (LDAP_OPT_ON
void* (LDAP_OPT_OFF)

int *

このオプションは参照キャッシュが有効か無効かを示します。このオプションがLDAP_OPT_ONに設定されている場合、キャッシュは有効です。それ以外の場合、キャッシュは無効です。

ORA_LDAP_OPT_RFRL_CACHE_SZ

int *

int *

このオプションは、参照キャッシュのサイズを指定します。サイズは、キャッシュを大きくできるバイト数の最大サイズです。デフォルトで1MBが設定されます。

LDAP_OPT_DEREF(0x02)

int *

int *

検索時の別名の処理方法を判断します。LDAP_DEREF_NEVER (0x00)、LDAP_DEREF SEARCHING (0x01)、LDAP_DEREF_FINDING (0x02)またはLDAP_DEREF_ALWAYS (0x03)のいずれかの値を持ちます。LDAP_DEREF_SEARCHING値の場合、別名は検索時に参照解除されますが、検索のベース・オブジェクトの検索時は参照解除されません。LDAP_DEREF_FINDING値の場合、別名はベース・オブジェクトの検索時に参照解除されますが、検索時は参照解除されません。このオプションのデフォルト値はLDAP_DEREF_NEVERです。

LDAP_OPT_SIZELIMIT(0x03)

int *

int *

検索で戻されるエントリの最大数です。LDAP_NO_LIMIT (0)値は上限がないことを意味します。このオプションのデフォルト値はLDAP_NO_LIMITです。

LDAP_OPT_TIMELIMIT(0x04)

int *

int *

検索を実行する最大秒数です。LDAP_NO_LIMIT (0)値は上限がないことを意味します。この値は検索リクエスト時のみサーバーに渡され、C LDAP API実装がローカルで検索結果を待機する時間には影響を与えません。ldap_search_ext_s()またはldap_result()(このマニュアルで後述)に渡されたtimeoutパラメータを使用すると、ローカル側とサーバー側の制限時間を指定できます。このオプションのデフォルト値はLDAP_NO_LIMITです。

LDAP_OPT_REFERRALS(0x08)

void *(LDAP_OPT_ON)
void *(LDAP_OPT_OFF)

int *

LDAPライブラリが、LDAPサーバーで戻された参照に自動的に従うかどうかを判断します。定数のLDAP_OPT_ONまたはLDAP_OPT_OFFに設定できます。このオプションは、ldap_set_option()に渡されるNULL以外のポインタ値によって有効になります。ldap_get_option()を使用して現在の設定値を読み込むとき、0(ゼロ)値はオフ、0(ゼロ)以外の値はオンを意味します。このオプションはデフォルトでオンになっています。

LDAP_OPT_RESTART(0X09)

void * (LDAP_OPT_ON)
void * (LDAP_OPT_OFF)

int *

LDAPの入出力操作が未完了のまま停止したとき、自動的に再起動するかどうかを判断します。LDAP_OPT_ONまたはLDAP_OPT_OFFに設定できます。このオプションは、ldap_set_option()に渡されるNULL以外のポインタ値によって有効になります。ldap_get_option()を使用して現在の設定値を読み込むとき、0(ゼロ)値はオフ、0(ゼロ)以外の値はオンを意味します。このオプションは、タイマーの停止などによって、入出力操作が未完了のまま中断する可能性がある場合に便利です。このオプションはデフォルトでオフになっています。

LDAP_OPT_PROTOCOL_VERSION(0x11)

int *

int *

このオプションは、プライマリLDAPサーバーとの通信時に使用するLDAPプロトコルのバージョンを示します。LDAP_VERSION2 (2)またはLDAP_VERSION3 (3)に設定します。バージョンが設定されていない場合のデフォルトは、LDAP_VERSION2 (2)です。

LDAP_OPT_SERVER_CONTROLS(0x12)

LDAPControl**

LDAPControl***

各リクエストとともに送信されるLDAPサーバー・コントロールのデフォルト・リストです。

関連項目: 第8.2.7項「コントロールの使用」

LDAP_OPT_CLIENT_CONTROLS(0x13)

LDAPControl**

LDAPControl***

LDAPセッションに影響を与えるクライアント・コントロールのデフォルト・リストです。

関連項目: 第8.2.7項「コントロールの使用」

LDAP_OPT_API_FEATURE_INFO(0x15)

非適用。オプションは読取り専用です。

LDAPAPIFeatureInfo *

実行時にLDAP API拡張機能に関するバージョン情報を取得します。アプリケーションでは、コンパイル時および実行時の両方で使用する特定のAPI実装に関する情報を判断できることが必要です。このオプションは読取り専用です。設定はできません。

LDAP_OPT_HOST_NAME(0x30)

char *

char **

プライマリLDAPサーバーのホスト名(またはホストのリスト)です。構文については、ldap_init()に対するhostnameパラメータの定義を参照してください。

LDAP_OPT_ERROR_NUMBER(0x31)

int *

int *

このセッションで発生した最新のLDAPエラーのコードです。

LDAP_OPT_ERROR_STRING(0x32)

char *

-

このセッションで発生した最新のLDAPエラーで戻されたメッセージです。

LDAP_OPT_MATCHED_DN(0x33)

char *

char **

このセッションで発生した最新のLDAPエラーで戻された、一致する識別名です。

ORA_LDAP_OPT_CONNECT_TIMEOUT (0xD2)

int *

int *

このオプションは、LDAP接続のタイムアウト値を秒数で設定します。接続タイムアウトは、ldap_openをコールする前に設定する必要があります。有効な値は、0から300秒です。値が0(ゼロ)に設定されている場合、タイムアウトはデフォルトのTCPタイムアウトです。このオプションが設定されていない場合、ホストにアクセスできないとldap_open()コールは15秒でタイムアウトになります。

使用方法

ldap_get_option()およびldap_set_option()は、正常終了した場合は0(ゼロ)を、エラーが発生した場合は-1を戻します。いずれかのファンクションで-1が戻された場合は、オプション値LDAP_OPT_ERROR_NUMBERを設定してldap_get_option()をコールすると、特定のエラー・コードを取得できます。オプション値LDAP_OPT_ERROR_NUMBERを設定したldap_get_option()コールに失敗すると、特定のエラー・コードを取得する方法は他にないことに注意してください。

ldap_get_option()コールが正常終了した場合、API実装では、今後のLDAP APIコールの動作に影響を与えるような、LDAPセッション・ハンドルの状態または基礎となる実装の状態の変更は行わないでください。ldap_get_option()コールに失敗した場合、許容されるセッション・ハンドルの変更はLDAPエラー・コードの設定のみです(LDAP_OPT_ERROR_NUMBERオプションによって戻されます)。

ldap_set_option()コールに失敗した場合は、今後のLDAP APIコールの動作に影響を与えるような、LDAPセッション・ハンドルの状態または基礎となる実装の状態の変更は行わないでください。

この仕様を拡張して新規オプションを指定している規格準拠ドキュメントでは、0x1000から0x3FFFの間のオプション・マクロの値を使用する必要があります。プライベートな拡張や経験に基づく拡張では、0x4000から0x7FFFの間のオプション・マクロの値を使用する必要があります。このドキュメントで定義されていない0x1000未満および0x7FFFを超える値は、すべて予約されており使用することはできません。拡張機能の実装を支援するには、次のマクロをC LDAP API実装で定義する必要があります。

#define LDAP_OPT_PRIVATE_EXTENSION_BASE 0x4000  /* to 0x7FFF inclusive */

8.2.4 参照を追跡するためのバインド資格証明の取得

この項のファンクションは、参照の追跡時、新しいサーバーのバインド資格証明の取得に使用されます。

8.2.4.1 ldap_set_rebind_proc

ldap_set_rebind_proc()ファンクションは、LDAP参照の追跡時に新しいサーバーに接続するためのバインド資格証明をライブラリで取得するために使用するコールバック・ファンクションの設定に使用されます。ライブラリでは、ldap_set_option()を使用してLDAP_OPT_REFERRALSが設定されている場合にのみコールバック・ファンクションを使用します。ldap_set_rebind_proc()がコールされていない場合、LDAP参照の追跡時、ライブラリでは新しいサーバーへの接続に匿名バインドを使用します。

関連項目:

第8.2.3項「LDAPセッション・ハンドル・オプション」

構文

void ldap_set_rebind_proc
(
LDAP          *ld,
int(*rebindproc) (LDAP   *ld,
char  **dnp,
char  **passwdp,
int    *authmethodp,
int     freeit)
)

reprocbind()ファンクションは、新しいサーバーのバインド資格証明を取得するためにコールされるファンクションです。

表8-6 コールバック・ファンクションのパラメータおよびコールバック・ファンクションを設定するためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

rebindproc

LDAP参照の追跡時に新しいサーバーへ接続するためのバインド資格証明の取得に使用されるコールバック・ファンクション

ld

新しいサーバーへのセッション・ハンドル

dnp

新しいサーバーに対するバインド識別名のポインタ

passwdp

新しいサーバーに対するバインド・パスワードのポインタ

authmethodp

新しいサーバーに対する認証方法のポインタ

freeit

0 - 新しいサーバーに対するバインド識別名ポインタ、バインド・パスワード・ポインタおよびバインド認証方法ポインタを戻します。

1 - 以前のコールで割り当てられたメモリーを解放します。

freeitパラメータの値が0の場合、rebindprocは必ずバインド識別名ポインタ、バインド・パスワード・ポインタおよびバインド認証方法ポインタを戻します。freeitパラメータの値が1の場合、rebindprocは前回のコールで割り当てられたすべてのメモリーを解放します。LDAPライブラリはこのファンクションを2回コールします。1回目で資格証明をバインドし、2回目でメモリーを解放します。

関連項目:

第8.3.4項「参照の追跡時に資格証明を得るためのコールバック・ファンクションの設定と使用」

8.2.5 ディレクトリに対する認証

この項のファンクションを使用して、LDAPディレクトリ・サーバーに対するLDAPクライアントの認証を行います。

8.2.5.1 ldap_sasl_bind、ldap_sasl_bind_s、ldap_simple_bindおよび ldap_simple_bind_s

ldap_sasl_bind()ファンクションおよびldap_sasl_bind_s()ファンクションは、Simple Authentication Security Layerを使用したLDAPでの通常および拡張認証に使用できます。いずれのルーチンも、メソッドを識別するオブジェクト識別子(OID)のドット区切りの文字列表記として使用するメソッドとして、また資格証明を保持するstruct bervalとして、バインドする識別名を使用します。簡易認証のリクエストには特別な定数値LDAP_SASL_SIMPLE (NULL)を渡すか、簡略化ルーチンldap_simple_bind()またはldap_simple_bind_s()が使用できます。

構文

int ldap_sasl_bind
(

LDAP                    *ld,
const char              *dn,
const char              *mechanism,
const struct berval     *cred,
LDAPControl             **serverctrls,
LDAPControl             **clientctrls,
int                     *msgidp
);

int ldap_sasl_bind_s(

LDAP                    *ld,
const char              *dn,
const char              *mechanism,
const struct berval     *cred,
LDAPControl             **serverctrls,
LDAPControl             **clientctrls,
struct berval           **servercredp

);

int ldap_simple_bind(

LDAP                    *ld,
const char              *dn,
const char              *passwd

);

int ldap_simple_bind_s(

LDAP                    *ld,
const char              *dn,
const char              *passwd

);

次のルーチンの使用は非推奨です。詳細は、RFC 1823を参照してください。

- int ldap_bind( LDAP *ld, const char *dn, const char *cred, int method );

- int ldap_bind_s( LDAP *ld, const char *dn, const char *cred, int method );

- int ldap_kerberos_bind( LDAP *ld, const char *dn );

- int ldap_kerberos_bind_s( LDAP *ld, const char *dn );

パラメータ

表8-7に、ディレクトリに対する認証のパラメータをリストし、説明します。

表8-7 ディレクトリに対する認証のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

dn

バインドするエントリの名前です。

mechanism

LDAP_SASL_SIMPLE (NULL)を指定して簡易認証を取得するか、SASLメソッドを識別するテキスト文字列を指定します。

cred

認証に使用する資格証明です。このパラメータを使用すると、任意の資格証明を渡すことができます。資格証明の書式と内容は、mechanismパラメータの設定内容によって異なります。

passwd

ldap_simple_bind()の場合に、エントリのuserPassword属性と比較するパスワードです。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_sasl_bind()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

servercredp

相互認証が指定されている場合は、この結果パラメータにサーバーから戻された資格証明が入力されます。割り当てられたberval構造体が戻されるため、
ber_bvfree()をコールして解放する必要があります。このフィールドを無視する場合は、NULLを渡す必要があります。

使用方法

非推奨のルーチンに関するその他のパラメータは説明していません。詳細は、RFC 1823を参照してください。

ldap_sasl_bind()ファンクションは、非同期のバインド操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_sasl_bind()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、バインドの結果を取得できます。

ldap_simple_bind()ファンクションは、単純な非同期のバインド操作を開始し、開始した操作のメッセージIDを戻します。続けてldap_result()をコールすると、バインドの結果を取得できます。エラーが発生した場合、ldap_simple_bind()は-1を戻し、LDAP構造体に適切なセッション・エラー・パラメータを設定します。

同期型のldap_sasl_bind_s()ファンクションおよびldap_simple_bind_s()ファンクションはいずれも、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。

LDAP v2サーバーに接続している場合は、バインド・コールが正常に完了するまで、接続に対する他の操作ができないことに注意してください。

続けてバインド・コールを使用すると、同じ接続に対して再認証を行うことができます。また、ldap_sasl_bind()またはldap_sasl_bind_s()を連続してコールすると、複数ステップのSASL処理を実行できます。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

8.2.6 Oracleの拡張機能を使用したSASL認証

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

- 第8.2.6.1項「ora_ldap_init_SASL」

- 第8.2.6.2項「ora_ldap_create_cred_hdl、ora_ldap_set_cred_props、ora_ldap_get_cred_propsおよびora_ldap_free_cred_hdl」

8.2.6.1 ora_ldap_init_SASL

ora_ldap_init_SASL()ファンクションを使用すると、SASL認証を実行できます。このファンクションは、入力引数の1つに指定したメカニズムに基づいて認証を実行します。

このファンクションは、様々な標準SASLメカニズムのクライアントとディレクトリ・サーバー間のSASLハンドシェイクをカプセル化するため、ディレクトリ・サーバーへのSASLベース接続の確立でのコーディングの負荷が軽減されます。

構文

int ora_ldap_init_SASL
(
OraLdapClientCtx * clientCtx,
LDAP                    *ld,
char                    * dn,
char                    * mechanism,
OraLdapHandle            cred,
LDAPControl                     **serverctrls,
LDAPControl                     **clientctrls
);

パラメータ

表8-8 ora_ldap_init_sasl()に渡されるパラメータ

パラメータ

説明

clientCtx

C APIのクライアント・コンテキストです。これは、ora_ldap_init_clientctx()およびora_ldap_free_clientctx()ファンクションを使用して管理できます。

ld

LDAPセッション・ハンドルです。

dn

認証されるユーザーDNです。

mechanism

SASLメカニズムです。

cred

SASL認証に必要な資格証明です。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

credパラメータは、ユーザー用のSASL証明書ハンドルです。このハンドルは、ora_ldap_create_cred_hdl()、ora_ldap_set_cred_props()およびora_ldap_free_cred_hdl()ファンクションを使用して管理できます。

サポートされるSASLメカニズムは次のとおりです。

- DIGEST-MD5
Oracle Internet Directory SASL APIは、DIGEST-MD5の認証のみのモードをサポートします。データ・プライバシおよびデータ整合性に対応したその他2つの認証モードは、まだサポートされていません。

Oracle Internet Directoryに対して認証する際は、ユーザーの識別名はサーバーに送信される前に正規化される必要があります。これは、DNをSASL APIに渡す前にora_ldap_normalize_dn()ファンクションを使用してSASL APIの外部で行うか、またはora_ldap_set_cred_handle()を使用して、SASL資格証明ハンドルにORA_LDAP_CRED_SASL_NORM_AUTHDNオプションを設定してSASL APIで行うことができます。

- EXTERNAL
Oracle Internet DirectoryでのSASL APIおよびSASLの実装には、外部認証メカニズムの1つとしてSSL認証を使用します。

このメカニズムを使用するには、ora_ldap_init_SSL()ファンクションを使用して、ディレクトリ・サーバーに対してSSL接続(相互認証モード)を確立する必要があります。これにより、ora_ldap_init_SASL()ファンクションは、mechanism引数にEXTERNALを指定して起動できます。ディレクトリ・サーバーは、SSL接続のユーザー資格証明に基づいてユーザーを認証します。

8.2.6.2 ora_ldap_create_cred_hdl、ora_ldap_set_cred_props、ora_ldap_get_cred_propsおよびora_ldap_free_cred_hdl

次のファンクションを使用して、SASL資格証明ハンドルを作成および管理します。ora_ldap_create_cred_hdlファンクションは、SASL認証に使用するメカニズムのタイプをベースにした、特定のタイプのSASL資格証明ハンドルの作成に使用します。ora_ldap_set_cred_props()ファンクションは、SASL認証に必要なハンドルに関連する資格証明の追加に使用できます。ora_ldap_get_cred_props()ファンクションは、資格証明ハンドルに格納されたプロパティの取得に、ora_ldap_free_cred_hdl ()ファンクションは、使用後のハンドルの破棄に使用できます。

構文

OraLdapHandle ora_ldap_create_cred_hdl
(
OraLdapClientCtx * clientCtx,
int                 credType
);

OraLdapHandle ora_ldap_set_cred_props
(
OraLdapClientCtx *   clientCtx,
OraLdapHandle        cred,
int                  String[],
void             *   inProperty
);
OraLdapHandle ora_ldap_get_cred_props
(
OraLdapClientCtx *   clientCtx,
OraLdapHandle   cred,
int                     String[],
void                   *   outProperty
);

OraLdapHandle ora_ldap_free_cred_hdl
(
OraLdapClientCtx *   clientCtx,
OraLdapHandle   cred
);

パラメータ

表8-9 SASL資格証明の管理パラメータ

パラメータ

説明

clientCtx

C APIのクライアント・コンテキストです。これは、ora_ldap_init_clientctx()およびora_ldap_free_clientctx()ファンクションを使用して管理できます。

credType

SASLメカニズム固有の資格証明ハンドルのタイプです。

cred

SASL認証のための固有のSASLメカニズムに必要なSASL資格証明を含む資格証明ハンドルです。

String[]

資格証明ハンドルに追加する必要がある資格証明のタイプです。

inProperty

資格証明ハンドルに格納されるSASL資格証明の1つです。

outProperty

資格証明ハンドルに格納されたSASL資格証明の1つです。

8.2.7 コントロールの使用

コントロールを使用すると、LDAP v3操作を拡張できます。コントロールは、サーバーに送信したり、LDAPメッセージとともにクライアントに戻すことができます。このようなコントロールは、サーバー・コントロールと呼ばれます。

LDAP APIは、クライアント・コントロールを使用してクライアント側の拡張メカニズムもサポートします。このコントロールは、LDAP APIの動作にのみ影響し、サーバーに送信されることはありません。両方のタイプのコントロールを表現するため、次の共通のデータ構造が使用されます。

typedef struct ldapcontrol
{

char            *ldctl_oid;
struct berval   ldctl_value;
char            ldctl_iscritical;

} LDAPControl;

表8-10に、ldapcontrol構造体のフィールドを示します。

表8-10 ldapcontrol構造体のフィールド

フィールド

説明

ldctl_oid

文字列で表現されたコントロール・タイプです。

ldctl_value

コントロールに対応付けられたデータ(ある場合)です。長さ0(ゼロ)の値を指定するには、ldctl_value.bv_lenを0(ゼロ)に設定し、ldctl_value.bv_valを長さ0(ゼロ)の文字列に設定します。コントロールに対応付けられたデータがないことを示すには、ldctl_value.bv_valをNULLに設定します。

ldctl_iscritical

コントロールが重要かどうかを示します。このフィールドが0(ゼロ)以外の場合は、サーバーまたはクライアント(あるいはその両方)でコントロールが認識されると、その操作のみが実行されます。LDAPのバインド解除操作および中止操作では、サーバーからのレスポンスはありません。これら2つの操作でサーバー・コントロールを使用するときは、クライアントでコントロールを重要(critical)とマークしないでください。

関連項目:

コントロールの詳細は、第3章「LDAPプロトコルに対する拡張機能」を参照してください。

LDAP APIの一部のコールでは、ldapcontrol構造体、またはldapcontrol構造体のNULL終了配列を割り当てます。次のルーチンを使用すると、単一コントロールまたはコントロールの配列を解放できます。

void ldap_control_free( LDAPControl *ctrl );
void ldap_controls_free( LDAPControl **ctrls );

ctrlパラメータまたはctrlsパラメータがNULLの場合は、このファンクションをコールしても何も実行されません。

セッション全体に影響を与えるコントロールのセットは、ldap_set_option()ファンクション(第8.2.3.1項「ldap_get_optionおよびldap_set_option」を参照)を使用して設定できます。コントロールのリストをldap_search_ext()などの一部のLDAP APIコールに直接渡すこともできます。この場合、ldap_set_option()を使用して設定したセッションのコントロール・セットは無視されます。コントロール・リストはldapcontrol構造体へのポインタのNULL終了配列で表されます。

サーバー・コントロールは、LDAP v3プロトコル拡張ドキュメントで定義されています。たとえば、コントロールは、サーバー側での検索結果のソートをサポートするために計画されています。

この章では、1つのクライアント・コントロールが定義されています(後の項で説明)。

クライアント・コントロールの参照プロセス 第8.2.3項「LDAPセッション・ハンドル・オプション」で説明したように、アプリケーションでは、LDAP_OPT_REFERRALSオプションを設定したldap_set_option()ファンクションを使用して、セッション全体で自動参照追跡を有効にしたり無効にすることができます。これは、リクエストごとに自動参照追跡を制御する場合にも役立ちます。この機能を提供するため、1.2.840.113556.1.4.616のオブジェクト識別子(OID)を持つクライアント・コントロールがあります。

/* OID for referrals client control */
#define LDAP_CONTROL_REFERRALS              "1.2.840.113556.1.4.616"

/* Flags for referrals client control value */
#define LDAP_CHASE_SUBORDINATE_REFERRALS    0x00000020U
#define LDAP_CHASE_EXTERNAL_REFERRALS       0x00000040U

参照先クライアント・コントロールを作成するには、LDAPControl構造体のldctl_oidフィールドをLDAP_CONTROL_REFERRALS ("1.2.840.113556.1.4.616")に設定し、ldctl_valueフィールドを一連のフラグが格納された4オクテット値に設定する必要があります。ldctl_value.bv_lenフィールドは常に4に設定する必要があります。ldctl_value.bv_valフィールドは、4オクテットの整数フラグ値を指し示す必要があります。このフラグ値を0(ゼロ)に設定すると、自動参照追跡とLDAP v3リファレンスの両方を無効にできます。これ以外に、このフラグ値を、値LDAP_CHASE_SUBORDINATE_REFERRALS (0x00000020U)に設定して、LDAP v3の検索継続リファレンスのみがAPI実装によって自動的に追跡されることを示すか、値LDAP_CHASE_EXTERNAL_REFERRALS (0x00000040U)に設定して、LDAP v3参照のみが自動的に追跡されることを示すか、2つのフラグ値の論理和(0x00000060U)に設定して、参照先と参照元の両方が自動的に追跡されることを示すことができます。

関連項目:

オブジェクト識別子の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のディレクトリ・スキーマの管理の項を参照してください。

8.2.8 セッションのクローズ

この項のファンクションを使用して、ディレクトリからバインドを解除し、オープンしている接続をクローズして、セッション・ハンドルを解放します。

8.2.8.1 ldap_unbind、ldap_unbind_extおよびldap_unbind_s

ldap_unbind_ext()、ldap_unbind()およびldap_unbind_s()は、サーバーにバインド解除リクエストを送信し、LDAPセッション・ハンドルに関連するオープンな接続をすべてクローズし、セッション・ハンドルに関連するリソースをすべて解放した後に値が戻されるという点で、すべて同期的に動作します。ただし、LDAPバインド解除操作にはサーバー・レスポンスがないことに注意してください。3つのバインド解除ファンクションはすべて、LDAP_SUCCESSを戻します(LDAPサーバーにリクエストが送信できない場合は別のLDAPエラー・コードを戻します)。バインド解除ファンクションを1つコールすると、セッション・ハンドルldは無効となり、ldを使用した別のLDAP APIのコールはできなくなります。

ldap_unbind()ファンクションとldap_unbind_s()ファンクションは同じように動作します。ldap_unbind_ext()ファンクションを使用すると、サーバー・コントロールとクライアント・コントロールを明示的に含めることができますが、バインド解除リクエストに対するサーバーからのレスポンスがないため、バインド解除リクエストで送信されたサーバー・コントロールに対するレスポンスを受信する方法はないことに注意してください。

構文

int ldap_unbind_ext( LDAP *ld, LDAPControl **serverctrls,
LDAPControl **clientctrls );
int ldap_unbind( LDAP *ld );
int ldap_unbind_s( LDAP *ld );

パラメータ

表8-11 セッションをクローズするためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

8.2.9 LDAP操作の実行

この項のファンクションを使用してLDAPディレクトリを検索し、一致した各エントリについてリクエストされた属性セットを戻します。

8.2.9.1 ldap_search_ext、ldap_search_ext_s、ldap_searchおよびldap_search_s

ldap_search_ext()ファンクションは、非同期の検索操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_search_ext()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、検索の結果を取得できます。検索結果は、後述する結果解析ルーチンを使用して解析できます。

ldap_search_ext()ファンクションと同様に、ldap_search()ファンクションは非同期の検索操作を開始し、開始した操作のメッセージIDを戻します。ldap_search_ext()の場合は、続けてldap_result()をコールすると、バインドの結果を取得できます。エラーが発生した場合、ldap_search()は-1を戻し、LDAP構造体に適切なセッション・エラー・パラメータを設定します。

同期型のldap_search_ext_s()、ldap_search_s()およびldap_search_st()の各ファンクションはいずれも、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。検索によって戻されるエントリがある場合、resパラメータの中に収められます。このパラメータはコール元に対しては不透明です。エントリ、属性、値などは、この項で説明する解析ルーチンをコールすることで抽出できます。resに格納された結果が不要になった場合は、後述するldap_msgfree()をコールして解放する必要があります。

ldap_search_ext()ファンクションとldap_search_ext_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートし、各検索操作に対して様々なサイズと制限時間を簡単に指定できます。ldap_search_st()ファンクションは、検索のローカル・タイムアウトを指定するパラメータがあること以外は、ldap_search_s()ファンクションと同じです。ローカル検索タイムアウトは、検索完了までAPI実装が待機する時間を制限するために使用します。ローカル検索タイムアウトを経過すると、API実装は中止操作を送信して検索操作を停止します。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

int ldap_search_ext
(

LDAP            *ld,
const char      *base,
int             scope,
const char      *filter,
char            **attrs,
int             attrsonly,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls,
struct timeval  *timeout,
int             sizelimit,
int             *msgidp

);

int ldap_search_ext_s
(

LDAP            *ld,
const char      *base,
int             scope,
const char      *filter,
char            **attrs,
int             attrsonly,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls,
struct timeval  *timeout,
int             sizelimit,
LDAPMessage     **res

);

int ldap_search
(

LDAP            *ld,
const char      *base,
int             scope,
const char      *filter,
char            **attrs,
int             attrsonly

);

int ldap_search_s
(

LDAP            *ld,
const char      *base,
int             scope,
const char      *filter,
char            **attrs,
int             attrsonly,
LDAPMessage     **res

);

int ldap_search_st
);

LDAP            *ld,
const char      *base,
int             scope,
const char      *filter,
char            **attrs,
int             attrsonly,
struct timeval  *timeout,
LDAPMessage     **res

);

パラメータ

表8-12に、検索操作のパラメータをリストし、説明します。

表8-12 検索操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

base

検索の開始点となるエントリの識別名です。

scope

LDAP_SCOPE_BASE (0x00)、LDAP_SCOPE_ONELEVEL (0x01)またはLDAP_SCOPE_SUBTREE (0x02)のいずれかで、検索範囲を指定します。

filter

検索フィルタを表す文字列です。この値をNULLにすると、すべてのエントリに一致するフィルタ"(objectclass=*)"を使用するように指定できます。APIのコール元でLDAP v2を使用している場合、正常に使用できるのはフィルタ機能のサブセットのみであることに注意してください。

attrs

一致した各エントリのどの属性を戻すかを指定する文字列のNULL終了配列です。このパラメータをNULLにすると、取得可能なユーザー属性がすべて取り出されます。文字列LDAP_NO_ATTRS ("1.1")を配列内の唯一の文字列として使用すると、サーバーから属性の型を戻さないように指定できます。attrs配列の中で、文字列LDAP_ALL_USER_ATTRS ("*")をなんらかの操作属性名とともに使用すると、すべてのユーザー属性に加えて、リストした操作属性を戻すように指定できます。

attrsonly

属性の型と値の両方を戻す場合には0(ゼロ)、属性の型のみを要求する場合には0(ゼロ)以外を指定する必要があるブール値です。

timeout

ldap_search_st()ファンクションの場合は、このパラメータによって、ローカルの検索タイムアウト値を指定します(値がNULLの場合、タイムアウトは無限です)。タイムアウト値0(ゼロ)が渡されると(tv_secおよびtv_usecの両方が0(ゼロ))、API実装はLDAP_PARAM_ERRORを戻す必要があります。ldap_search_ext()ファンクションとldap_search_ext_s()ファンクションの場合は、timeoutパラメータによって、ローカルの検索タイムアウト値と検索リクエストでサーバーに送信される操作制限時間を指定します。timeoutパラメータにNULL値を渡すと、ローカルの無限検索タイムアウト値は使用されずに、LDAPセッション・ハンドルに格納されているグローバルなデフォルト・タイムアウト値(ldap_set_option()のLDAP_OPT_TIMELIMITパラメータで設定)がリクエストとともに送信されます。タイムアウト値0(ゼロ)が渡されると(tv_secおよびtv_usecの両方が0(ゼロ))、API実装はLDAP_PARAM_ERRORを戻す必要があります。tv_secの値は0(ゼロ)だが、tv_usecの値は0(ゼロ)以外の場合は、操作制限時間として1をLDAPサーバーに渡す必要があります。tv_secの値が0(ゼロ)以外の場合は、tv_secの値自体をLDAPサーバーに渡す必要があります。

sizelimit

ldap_search_ext()コールとldap_search_ext_s()コールの場合は、検索によって戻されるエントリの数をこのパラメータで制限します。LDAP_NO_LIMIT (0)値は上限がないことを意味します。

res

同期コールを行うとき、コールの終了時に検索結果が入る結果パラメータです。戻される結果がない場合、*resはNULLに設定されます。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_search_ext()コールが成功した場合、この結果パラメータはリクエストのメッセージIDに設定されます。セッション・ハンドルldには検索の実行方法に影響を与える可能性がある3つのオプションがあります。これには、次のようなものがあります。

- LDAP_OPT_SIZELIMIT: 検索で戻されるエントリの最大数です。LDAP_NO_LIMIT (0)値は上限がないことを意味します。ldap_search_ext()ファンクションまたはldap_search_ext_s()ファンクションを使用する場合、セッション・ハンドルの値は無視されることに注意してください。

- LDAP_OPT_TIMELIMIT;: 検索を実行する最大秒数です。LDAP_NO_LIMIT (0)値は上限がないことを意味します。ldap_search_ext()ファンクションまたはldap_search_ext_s()ファンクションを使用する場合、セッション・ハンドルの値は無視されることに注意してください。

- LDAP_OPT_DEREF: LDAP_DEREF_NEVER (0x00)、LDAP_DEREF_SEARCHING (0x01)、LDAP_DEREF_FINDING (0x02)またはLDAP_DEREF_ALWAYS (0x03)のいずれかで、検索時の別名の処理方法を指定します。The LDAP_DEREF_SEARCHING値の場合、別名は検索時に参照解除されますが、検索のベース・オブジェクトの検索時は参照解除されません。LDAP_DEREF_FINDING値の場合、別名はベース・オブジェクトの検索時に参照解除されますが、検索時は参照解除されません。

8.2.9.2 エントリの読取り

LDAPでは、読取り操作を直接サポートしていません。かわりに、この操作は、ベースを読み込むエントリの識別名に設定し、有効範囲をLDAP_SCOPE_BASEに設定し、さらにフィルタを"(objectclass=*)"またはNULLに設定した検索によってエミュレーションを行います。attrsパラメータには、戻される属性のリストが格納されます。

8.2.9.3 エントリの子のリスト表示

LDAPでは、リスト操作を直接サポートしていません。かわりに、この操作は、ベースをリスト表示するエントリの識別名に設定し、有効範囲をLDAP_SCOPE_ONELEVELに設定し、さらにフィルタを"(objectclass=*)"またはNULLに設定した検索によってエミュレーションを行います。パラメータattrsには、子エントリごとに戻される属性のリストが格納されます。

8.2.9.4 ldap_compare_ext、ldap_compare_ext_s、ldap_compareおよびldap_compare_s

これらのルーチンを使用して、属性値のアサーションをLDAPエントリと照合して比較します。

ldap_compare_ext()ファンクションは、非同期の比較操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_compare_ext()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、比較の結果を取得できます。

ldap_compare_ext()ファンクションと同様に、ldap_compare()ファンクションは非同期の比較操作を開始し、開始した操作のメッセージIDを戻します。ldap_compare_ext()の場合は、続けてldap_result()をコールすると、バインドの結果を取得できます。エラーが発生した場合、ldap_compare()は-1を戻し、LDAP構造体に適切なセッション・エラー・パラメータを設定します。

同期型のldap_compare_ext_s()ファンクションおよびldap_compare_s()ファンクションはいずれも、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。

ldap_compare_ext()ファンクションとldap_compare_ext_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートします。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

int ldap_compare_ext
(

LDAP                    *ld,
const char              *dn,
const char              *attr,
const struct berval     *bvalue,
LDAPControl             **serverctrls,
LDAPControl             **clientctrls,
int                     *msgidp

);

int ldap_compare_ext_s
(

LDAP                    *ld,
const char              *dn,
const char              *attr,
const struct berval     *bvalue,
LDAPControl             **serverctrls,
LDAPControl             **clientctrls

);

int ldap_compare
(

LDAP                    *ld,
const char              *dn,
const char              *attr,
const char              *value

);
int ldap_compare_s
(

LDAP                    *ld,
const char              *dn,
const char              *attr,
const char              *value

);

パラメータ

表8-13に、比較操作のパラメータをリストし、説明します。

表8-13 比較操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

dn

比較の対象となるエントリの名前です。

attr

比較の対象となる属性です。

bvalue

指定のエントリで検索された属性と照合して比較される属性値です。このパラメータは拡張ルーチンで使用され、struct bervalへのポインタとなるため、バイナリ値と比較できます。

value

比較の対象となる文字列の属性値で、ldap_compare()ファンクションとldap_compare_s()ファンクションで使用します。バイナリ値と比較する必要がある場合は、ldap_compare_ext()またはldap_compare_ext_s()を使用します。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_compare_ext()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

8.2.9.5 ldap_modify_ext、ldap_modify_ext_s、ldap_modifyおよびldap_modify_s

これらのルーチンを使用して、既存のLDAPエントリを変更します。

ldap_modify_ext()ファンクションは、非同期の変更操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_modify_ext()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、変更の結果を取得できます。

ldap_modify_ext()ファンクションと同様に、ldap_modify()ファンクションは非同期の変更操作を開始し、開始した操作のメッセージIDを戻します。ldap_modify_ext()の場合は、続けてldap_result()をコールすると、変更の結果を取得できます。エラーが発生した場合、ldap_modify()は-1を戻し、LDAP構造体に適切なセッション・エラー・パラメータを設定します。

同期型のldap_modify_ext_s()ファンクションおよびldap_modify_s()ファンクションはいずれも、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。

ldap_modify_ext()ファンクションとldap_modify_ext_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートします。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

typedef struct ldapmod
{

int             mod_op;
char            *mod_type;
union mod_vals_u
{

char            **modv_strvals;
struct berval   **modv_bvals;
} mod_vals;

} LDAPMod;

#define mod_values      mod_vals.modv_strvals
#define mod_bvalues     mod_vals.modv_bvals

int ldap_modify_ext
(

LDAP            *ld,
const char      *dn,
LDAPMod         **mods,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls,
int             *msgidp

);

int ldap_modify_ext_s
(

LDAP            *ld,
const char      *dn,
LDAPMod         **mods,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls

);

int ldap_modify
(

LDAP            *ld,
const char      *dn,
LDAPMod         **mods
);

int ldap_modify_s
(

LDAP            *ld,
const char      *dn,
LDAPMod         **mods

);

パラメータ

表8-14に、変更操作のパラメータをリストし、説明します。

表8-14 変更操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

dn

変更するエントリの名前です。

mods

エントリに対する変更のNULL終了配列です。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_modify_ext()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

表8-15に、LDAPMod構造体のフィールドを示します。

表8-15 LDAPMod構造体のフィールド

フィールド

説明

mod_op

実行する変更操作です。LDAP_MOD_ADD (0x00)、LDAP_MOD_DELETE (0x01)またはLDAP_MOD_REPLACE (0x02)のいずれかになります。このフィールドは、mod_vals共用体に格納されている値のタイプも示します。mod_bvalues形式を選択するには、
LDAP_MOD_BVALUES (0x80)との論理和をとります。それ以外の場合は、mod_values形式が使用されます。

mod_type

変更する属性の型です。

mod_vals

追加、削除または置換する値(存在する場合)。mod_valuesまたはmod_bvalues変数はいずれか1つのみ使用できます。これは、mod_opフィールドと定数LDAP_MOD_BVALUESのORを取ることによって選択されます。mod_valuesは、ゼロ終了文字列のNULL終了配列で、mod_bvaluesはイメージなどのバイナリ値を渡すのに使用されるberval構造体のNULL終了配列です。

使用方法

LDAP_MOD_ADD変更の場合は、指定の値がエントリに追加され、必要に応じて属性が作成されます。

LDAP_MOD_DELETE変更の場合は、指定の値がエントリから削除され、値がない場合は属性が削除されます。すべての属性を削除する場合は、mod_valsフィールドをNULLに設定できます。

LDAP_MOD_REPLACE変更の場合、属性は変更後にリストされた値を保持します。値は必要に応じて作成され、mod_valsフィールドがNULLの場合は削除されます。すべての変更はリストされた順序で実行されます。

8.2.9.6 ldap_renameおよびldap_rename_s

これらのルーチンを使用して、エントリ名を変更します。

ldap_rename()ファンクションは、非同期の識別名変更操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_rename()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、名前の変更の結果を取得できます。

同期型のldap_rename_s()ファンクションは、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。

ldap_rename()ファンクションとldap_rename_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートします。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

int ldap_rename
(

LDAP            *ld,
const char      *dn,
const char      *newrdn,
const char      *newparent,
int             deleteoldrdn,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls,
int             *msgidp

);

int ldap_rename_s
(

LDAP            *ld,
const char      *dn,
const char      *newrdn,
const char      *newparent,
int             deleteoldrdn,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls

);

次のルーチンの使用は非推奨です。詳細は、RFC 1823を参照してください。

int ldap_modrdn
(

LDAP            *ld,
const char      *dn,
const char      *newrdn

);

int ldap_modrdn_s
(

LDAP            *ld,
const char      *dn,
const char      *newrdn

);

int ldap_modrdn2
(

LDAP            *ld,
const char      *dn,
const char      *newrdn,
int             deleteoldrdn

);

int ldap_modrdn2_s
(

LDAP            *ld,
const char      *dn,
const char      *newrdn,
int             deleteoldrdn

);

パラメータ

表8-16に、名前の変更操作のパラメータをリストし、説明します。

表8-16 名前の変更操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

dn

識別名を変更するエントリの名前です。

newrdn

エントリに指定する新規の相対識別名です。

newparent

新規の親または上位エントリ。このパラメータがNULLの場合、エントリのRDNのみ変更されます。ルート識別名は長さゼロの文字列""を渡して指定します。LDAPプロトコルのバージョン2を使用した場合、newparentパラメータは常にNULLです。それ以外の場合のサーバー動作は未定義です。

deleteoldrdn

newrdnが古い相対識別名と異なる場合、このパラメータは名前の変更ルーチンでのみ使用されます。このパラメータはブール値で、0(ゼロ)以外の場合は古い相対識別名が削除されたことを示し、0(ゼロ)の場合は、エントリの識別されない値として古い相対識別名が保持されていることを示します。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_rename()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

8.2.9.7 ldap_add_ext、ldap_add_ext_s、ldap_addおよびldap_add_s

これらのファンクションを使用して、LDAPディレクトリにエントリを追加します。

ldap_add_ext()ファンクションは、非同期の追加操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_add_ext()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、追加の結果を取得できます。

ldap_add_ext()ファンクションと同様に、ldap_add()ファンクションは非同期の追加操作を開始し、開始した操作のメッセージIDを戻します。ldap_add_ext()の場合は、続けてldap_result()をコールすると、追加の結果を取得できます。エラーが発生した場合、ldap_add()は-1を戻し、LDAP構造体に適切なセッション・エラー・パラメータを設定します。

同期型のldap_add_ext_s()ファンクションおよびldap_add_s()ファンクションはいずれも、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。

ldap_add_ext()ファンクションとldap_add_ext_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートします。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

int ldap_add_ext
(

LDAP            *ld,
const char      *dn,
LDAPMod         **attrs,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls,
int             *msgidp

);

int ldap_add_ext_s
(

LDAP            *ld,
const char      *dn,
LDAPMod         **attrs,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls

);

int ldap_add
(

LDAP            *ld,
const char      *dn,
LDAPMod         **attrs

);

int ldap_add_s
(

LDAP            *ld,
const char      *dn,
LDAPMod         **attrs

);

パラメータ

表8-17に、追加操作のパラメータをリストし、説明します。

表8-17 追加操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

dn

追加するエントリの名前です。

attrs

ldap_modify()に定義されているLDAPMod構造体を使用して指定されるエントリ属性です。mod_typeおよびmod_valsフィールドには必ず値が必要です。mod_opフィールドは、定数LDAP_MOD_BVALUESとのORが取られ、mod_vals共用体のmod_bvaluesケースの選択に使用されないかぎり、無視されます。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_add_ext()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

使用方法

追加操作を正常に行うためには、追加するエントリの親がすでに存在しているか、親が空(つまり、ルートの識別名と同じ)であることが必要です。

8.2.9.8 ldap_delete_ext、ldap_delete_ext_s、ldap_deleteおよびldap_delete_s

これらのファンクションを使用して、LDAPディレクトリからリーフ・エントリを削除します。

ldap_delete_ext()ファンクションは、非同期の削除操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了の場合、ldap_delete_ext()によってリクエストのメッセージIDが*msgidpに格納されます。続けてldap_result()をコールすると、削除の結果を取得できます。

ldap_delete_ext()ファンクションと同様に、ldap_delete()ファンクションは非同期の削除操作を開始し、開始した操作のメッセージIDを戻します。ldap_delete_ext()の場合は、続けてldap_result()をコールすると、削除の結果を取得できます。エラーが発生した場合、ldap_delete()は-1を戻し、LDAP構造体に適切なセッション・エラー・パラメータを設定します。

同期型のldap_delete_ext_s()ファンクションおよびldap_delete_s()ファンクションはいずれも、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。

ldap_delete_ext()ファンクションとldap_delete_ext_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートします。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

int ldap_delete_ext
(

LDAP            *ld,
const char      *dn,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls,
int             *msgidp

);

int ldap_delete_ext_s
(
LDAP            *ld,

const char      *dn,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls

);

int ldap_delete

(

LDAP            *ld,
const char      *dn

);

int ldap_delete_s
(

LDAP            *ld,
const char      *dn

);

パラメータ

表8-18に、削除操作のパラメータをリストし、説明します。

表8-18 削除操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

dn

削除するエントリの名前です。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_delete_ext()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

使用方法

削除するエントリは、リーフ・エントリ(つまり、子エントリがないエントリ)であることが必要です。1回の操作でサブツリー全体を削除する操作は、LDAPではサポートされていません。

8.2.9.9 ldap_extended_operationおよび ldap_extended_operation_s

これらのルーチンを使用すると、拡張LDAP操作をサーバーに渡し、一般的なプロトコル拡張メカニズムを提供できます。

ldap_extended_operation()ファンクションは、非同期の拡張操作を開始し、リクエストが正常に送信された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。正常終了した場合、ldap_extended_operation()はリクエストのメッセージIDを*msgidpに配置します。ldap_result()を続けてコールすると拡張操作の結果を取得できます。この結果をldap_parse_extended_result()に渡すとオブジェクト識別子(OID)とレスポンスに格納されたデータを取得できます。

同期型のldap_extended_operation_s()ファンクションは、操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを操作の結果として戻します。retoidパラメータとretdataパラメータには、結果に含まれているOIDとデータが入力されます。戻されるOIDまたはデータがない場合、これらのパラメータはNULLに設定されます。

ldap_extended_operation()ファンクションとldap_extended_operation_s()ファンクションは、LDAP v3のサーバー・コントロールとクライアント・コントロールをサポートします。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

構文

int ldap_extended_operation
(

LDAP                    *ld,
const char              *requestoid,
const struct berval     *requestdata,
LDAPControl             **serverctrls,
LDAPControl             **clientctrls,
int                     *msgidp

);

int ldap_extended_operation_s
(

LDAP                    *ld,
const char              *requestoid,
const struct berval     *requestdata,
LDAPControl             **serverctrls,
LDAPControl             **clientctrls,
char                    **retoidp,
struct berval           **retdatap

);

パラメータ

表8-19に、拡張操作のパラメータをリストし、説明します。

表8-19 拡張操作のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

requestoid

リクエストを指定する、ドット表記のOIDテキスト文字列です。

requestdata

操作に必要な任意のデータです(NULLの場合、サーバーにデータは送信されません)。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

msgidp

ldap_extended_operation()コールが正常終了した場合は、この結果パラメータがリクエストのメッセージIDに設定されます。

retoidp

サーバーによって戻されたドット区切りの割当て済OIDテキスト文字列に設定された、文字列へのポインタです。この文字列はldap_memfree()ファンクションを使用して解放する必要があります。OIDが戻されなかった場合、*retoidpにはNULLが設定されます。

retdatap

サーバーによって戻されたデータの割当て済コピーに設定されるberval構造体ポインタへのポインタです。このstruct bervalはber_bvfree()を使用して解放する必要があります。データが戻されなかった場合、*retdatapにはNULLが設定されます。

8.2.10 操作の中止

この項のファンクションを使用して、進行中の操作を中止します。

8.2.10.1 ldap_abandon_extおよびldap_abandon

ldap_abandon_ext()ファンクションは、msgidパラメータのメッセージIDを使用して操作を中止し、中止操作が正常終了した場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。

ldap_abandon()は、クライアント・コントロールまたはサーバー・コントロールを受け入れないこと以外はldap_abandon_ext()と同じで、中止操作が正常終了した場合は0(ゼロ)を、失敗した場合は-1を戻します。

ldap_abandon()コールまたはldap_abandon_ext()コールが正常終了した後、指定のメッセージIDを持つ結果は、引き続きldap_result()をコールしても戻されません。LDAP中止操作に対するサーバーのレスポンスはありません。

構文

int ldap_abandon_ext
(

LDAP            *ld,
int             msgid,
LDAPControl     **serverctrls,
LDAPControl     **clientctrls

);

int ldap_abandon
(

LDAP            *ld,
int             msgid

);

パラメータ

表8-20に、操作の中止のパラメータをリストし、説明します。

表8-20 操作の中止のパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

msgid

中止するリクエストのメッセージIDです。

serverctrls

LDAPサーバー・コントロールのリストです。

clientctrls

クライアント・コントロールのリストです。

関連項目:

エラーとその解析方法の詳細は、第8.2.12項「エラーの処理と結果の解析」を参照してください。

8.2.11 結果の取得とLDAPメッセージの確認

この項のファンクションを使用して、非同期で開始した操作の結果を戻します。これらのファンクションは、メッセージを型およびIDで識別します。

8.2.11.1 ldap_result、ldap_msgtypeおよびldap_msgid

ldap_result()を使用して、非同期に開始した前回の操作の結果を取得します。コールの方法によって、ldap_result()が実際に戻す値が結果メッセージのリストの場合とチェーンの場合があることに注意してください。ldap_result()ファンクションは単一リクエストに対するメッセージのみを返します。検索以外のすべてのLDAP操作で想定されている結果メッセージは1つのみです。つまり、結果チェーンが複数のメッセージを格納できるのは、検索操作のからの結果が戻された場合のみです。

コール元に戻された結果セットは、そのセットを生成したLDAPリクエストとの関連をコール元で表示する方法はありません。したがって、ldap_result()または同期検索ルーチンをコールして戻された結果セットは、後続のLDAP APIコールの影響を受けることはありません(結果セットを解放するldap_msgfree()は除きます)。

ldap_msgfree()は、ldap_result()または同期検索ルーチンをコールして前に取得した結果メッセージ(結果セット全体の場合もあります)を解放します。

ldap_msgtype()はLDAPメッセージのタイプを戻します。ldap_msgid()はLDAPメッセージのメッセージIDを戻します。

構文

int ldap_result
(

LDAP            *ld,
int             msgid,
int             all,
struct timeval  *timeout,
LDAPMessage     **res

);
int ldap_msgfree( LDAPMessage *res );
int ldap_msgtype( LDAPMessage *res );
int ldap_msgid( LDAPMessage *res );

パラメータ

表8-21に、結果の取得とLDAPメッセージの確認のためのパラメータをリストし、説明します。

表8-21 結果の取得とLDAPメッセージの確認のためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

msgid

結果が戻される操作のメッセージID、定数LDAP_RES_UNSOLICITED (0)(要求に基づかない結果を取得する場合)、または定数LDAP_RES_ANY (-1)(任意の結果を取得する場合)です。

all

1回のldap_result()コールで取得するメッセージの数を指定します。このパラメータは、検索結果を取得する場合にのみ使用されます。定数LDAP_MSG_ONE (0x00)を渡して、一度に1つのメッセージを取得します。すべての結果が1つの結果セットとして戻される前に、すべての検索結果を取得するには、LDAP_MSG_ALL (0x01)を渡します。すでに取得したすべてのメッセージを結果セットに戻すには、LDAP_MSG_RECEIVED (0x02)を渡します。

timeout

結果の戻りに対する待機時間を指定するタイムアウトです。NULL値を指定すると、ldap_result()は結果が戻るまでブロックされます。タイムアウト値に0(ゼロ)秒を指定すると、ポーリング動作になります。

res

ldap_result()の場合は、操作の結果が含まれる結果パラメータです。戻される結果がない場合、*resはNULLに設定されます。ldap_msgfree()の場合は、ldap_result()、ldap_search_s()またはldap_search_st()をコールして前に取得し、解放する結果セットです。resをNULLに設定すると何も処理されず、ldap_msgfree()は0(ゼロ)を戻します。

使用方法

正常終了すると、ldap_result()は戻された最初の結果のタイプをresパラメータに戻します。次のいずれかの定数が戻されます。

LDAP_RES_BIND (0x61)

LDAP_RES_SEARCH_ENTRY (0x64)

LDAP_RES_SEARCH_REFERENCE (0x73): LDAP v3の新規定数

LDAP_RES_SEARCH_RESULT (0x65)

LDAP_RES_MODIFY (0x67)

LDAP_RES_ADD (0x69)

LDAP_RES_DELETE (0x6B)

LDAP_RES_MODDN (0x6D)

LDAP_RES_COMPARE (0x6F)

LDAP_RES_EXTENDED (0x78) -- LDAP v3の新規定数

ldap_result()は、タイムアウトを超過した場合は0(ゼロ)を、エラーが発生した場合は-1を戻します。エラーの発生に応じて、LDAPセッション・ハンドルのエラー・パラメータが設定されます。

ldap_msgfree()は、resパラメータが指し示す結果セット内の各メッセージを解放し、最後のメッセージのタイプを戻します。resがNULLの場合は何も処理されず、値0(ゼロ)が戻されます。

ldap_msgtype()は、パラメータとして渡されるLDAPメッセージのタイプを戻します。タイプは、前述のタイプのいずれかか、エラーの場合は-1です。

ldap_msgid()は、パラメータとして渡されたLDAPメッセージに対応付けられているメッセージIDを戻します。エラーの場合は-1を戻します。

8.2.12 エラーの処理と結果の解析

この項のファンクションを使用して、結果から情報を抽出し、他のLDAP APIルーチンによって戻されたエラーを処理します。

8.2.12.1 ldap_parse_result、ldap_parse_sasl_bind_result、ldap_parse_extended_resultおよびldap_err2string

ldap_parse_sasl_bind_result()およびldap_parse_extended_result()は、通常、ldap_parse_result()とともに使用して、SASLバインド操作および拡張操作の結果情報をそれぞれ取得することに注意してください。

ldap_parse_result()、ldap_parse_sasl_bind_result()およびldap_parse_extended_result()の各ファンクションは、解析する結果メッセージの検索時に、メッセージ・タイプのLDAP_RES_SEARCH_ENTRYおよびLDAP_RES_SEARCH_REFERENCEをスキップします。これらのファンクションは、結果が正常に解析された場合は定数LDAP_SUCCESSを、失敗した場合は別のLDAPエラー・コードを戻します。サーバーで実行された操作の結果を示すLDAPエラー・コードは、ldap_parse_result()のerrcodepパラメータに格納されることに注意してください。複数の結果メッセージが含まれた結果セットがこれらのルーチンに渡されている場合、これらのルーチンは、常にその結果セット内の最初の結果から操作を開始します。

ldap_err2string()は、ldap_parse_result()、ldap_parse_sasl_bind_result()、ldap_parse_extended_result()またはAPI操作の同期コールの1つから戻された数値のLDAPエラー・コードを、エラーを説明するゼロ終了文字列メッセージに変換するために使用されます。このファンクションは、静的データへのポインタを戻します。

構文

int ldap_parse_result
(

LDAP            *ld,
LDAPMessage     *res,
int             *errcodep,
char            **matcheddnp,
char            **errmsgp,
char            ***referralsp,
LDAPControl     ***serverctrlsp,
int             freeit

);

int ldap_parse_sasl_bind_result
(

LDAP            *ld,
LDAPMessage     *res,
struct berval   **servercredp,
int             freeit

);

int ldap_parse_extended_result
(

LDAP            *ld,
LDAPMessage     *res,
char            **retoidp,
struct berval   **retdatap,
int             freeit

);
#define LDAP_NOTICE_OF_DISCONNECTION    "1.3.6.1.4.1.1466.20036"
char *ldap_err2string( int err );

次のルーチンは非推奨です。詳細は、RFC 1823を参照してください。

int ldap_result2error
(

LDAP            *ld,
LDAPMessage     *res,
int             freeit

);
void ldap_perror( LDAP *ld, const char *msg );

パラメータ

表8-22に、エラーの処理と結果の解析を行うためのパラメータをリストし、説明します。

表8-22 エラーの処理と結果の解析を行うためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

res

ldap_result()またはAPI操作の同期コールの1つから戻されたLDAP操作の結果です。

errcodep

この結果パラメータには、LDAPMessageメッセージのLDAPエラー・コード・フィールドの値が入力されます。これは、サーバーでの操作の結果を示します。このフィールドを無視する場合は、NULLを渡す必要があります。

matcheddnp

LDAP_NO_SUCH_OBJECTが戻された場合、この結果パラメータには、リクエスト内の名前が認識された程度を示す識別名が入力されます。このフィールドを無視する場合は、NULLを渡す必要があります。一致した識別名の文字列は、このマニュアルで後述するldap_memfree()をコールして解放する必要があります。

errmsgp

この結果パラメータには、LDAPMessageメッセージのエラー・メッセージ・フィールドの内容が入力されます。エラー・メッセージ文字列は、このマニュアルで後述するldap_memfree()をコールして解放する必要があります。このフィールドを無視する場合は、NULLを渡す必要があります。

referralsp

この結果パラメータには、LDAPMessageメッセージの参照フィールドの内容が入力され、リクエストを再試行するための代替LDAPサーバーの有無が示されます。この参照配列は、このマニュアルで後述するldap_value_free()をコールして解放する必要があります。このフィールドを無視する場合は、NULLを渡す必要があります。

serverctrlsp

この結果パラメータには、LDAPMessageメッセージからコピーされたコントロールの割当て済配列が入力されます。このコントロール配列は、前に説明したldap_controls_free()をコールして解放する必要があります。

freeit

resパラメータを解放するかどうかを判断するブール値です。0(ゼロ)以外の値を渡すと、これらのルーチンはリクエストされた情報を抽出した後にresパラメータを解放します。これは便宜的に提供されており、結果の解放はldap_msgfree()を使用して後で行うこともできます。freeitが0(ゼロ)以外の場合、resで表されるメッセージのチェーン全体が解放の対象となります。

servercredp

SASLバインド結果に関するこの結果パラメータには、相互認証が指定されている場合、サーバーから戻された資格証明が入力されます。割り当てられたberval 構造体が戻されるため、ber_bvfree()をコールして解放する必要があります。このフィールドを無視する場合は、NULLを渡す必要があります。

retoidp

拡張操作の結果に関するこの結果パラメータには、拡張操作のレスポンス名のドット区切りのOIDテキスト表現が入力されます。この文字列はldap_memfree()をコールして解放する必要があります。このフィールドを無視する場合は、NULLを渡す必要があります。LDAP_NOTICE_OF_DISCONNECTIONマクロはクライアントに対して便宜的に定義されています。これにより、クライアントは、OIDが要求に基づかない切断通知(RFC 2251[2]のセクション4.4.1に定義)に使用されるOIDと一致しているかどうかをチェックします。

retdatap

拡張操作の結果に関するこの結果パラメータには、拡張操作のレスポンス・データが含まれるstruct bervalへのポインタが入力されます。このパラメータは、ber_bvfree()をコールして解放する必要があります。このフィールドを無視する場合は、NULLを渡す必要があります。

err

ldap_err2string()に関するLDAPエラー・コードで、ldap_parse_result()または他のLDAP APIコールによって戻されます。

使用方法

非推奨のルーチンに固有のパラメータについては、RFC 1823を参照してください。

8.2.13 結果リストの参照

この項のルーチンを使用して、ldap_result()で戻された結果セット内のメッセージ・リストを参照します。

8.2.13.1 ldap_first_messageおよびldap_next_message

検索操作の結果セットには、参照メッセージ、エントリ・メッセージおよび結果メッセージを格納できます。

ldap_count_messages()は、戻されたメッセージの件数をカウントします。前述のldap_msgtype()ファンクションを使用すると、異なるメッセージ・タイプを区別できます。

LDAPMessage *ldap_first_message( LDAP *ld, LDAPMessage *res );
LDAPMessage *ldap_next_message( LDAP *ld, LDAPMessage *msg );
int ldap_count_messages( LDAP *ld, LDAPMessage *res );

パラメータ

表8-23に、結果リストを参照するためのパラメータをリストし、説明します。

表8-23 結果リストを参照するためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

res

同期検索ルーチンのいずれか、またはldap_result()をコールして取得する結果セットです。

msg

ldap_first_message()またはldap_next_message()のコールで前に戻されたメッセージです。

使用方法

ldap_first_message()およびldap_next_message()は、戻される結果セットにこれ以上メッセージが存在しない場合にNULLを戻します。エントリの参照中にエラーが発生した場合もNULLが戻されます。この場合セッション・ハンドルIDのエラー・パラメータがエラーを示すように設定されます。

正常終了した場合、ldap_count_messages()は、結果のチェーンに格納されたメッセージ数を戻します。resパラメータが無効などのエラーが発生した場合は-1が戻されます。ldap_first_message(), ldap_next_message(), ldap_first_entry(), ldap_next_entry(), ldap_first_reference(), ldap_next_reference()によって戻されたメッセージ、エントリまたはリファレンスとともにコールした場合、ldap_count_messages()コールを使用してチェーンに残っているメッセージ数をカウントすることもできます。

8.2.14 検索結果の解析

この項のファンクションを使用して、ldap_search()ファンクションで戻されるエントリやリファレンスを解析します。これらの結果は、この項で説明するルーチンをコールしてアクセスできる不透明な構造体に戻されます。これらのルーチンは、戻されたエントリやリファレンスの参照、エントリの属性の参照、エントリ名の取得、およびエントリ内の指定した属性に対応付けられている値の取得を行うために用意されています。

8.2.14.1 ldap_first_entry、ldap_next_entry、ldap_first_reference、ldap_next_reference、ldap_count_entriesおよび ldap_count_references

ldap_first_entry()およびldap_next_entry()ルーチンは、検索結果チェーンからのエントリのリストの参照および取得に使用されます。ldap_first_reference()およびldap_next_reference()ルーチンを使用して、検索結果チェーンからの継続リファレンスのリストの参照および取得を行います。ldap_count_entries()を使用して戻されたエントリ数をカウントします。ldap_count_references()を使用して戻されたリファレンス数をカウントします。

LDAPMessage *ldap_first_entry( LDAP *ld, LDAPMessage *res );
LDAPMessage *ldap_next_entry( LDAP *ld, LDAPMessage *entry );
LDAPMessage *ldap_first_reference( LDAP *ld, LDAPMessage *res );
LDAPMessage *ldap_next_reference( LDAP *ld, LDAPMessage *ref );
int ldap_count_entries( LDAP *ld, LDAPMessage *res );
int ldap_count_references( LDAP *ld, LDAPMessage *res );

パラメータ

表8-24に、エントリと継続リファレンスを検索結果セットから取得したり、戻されたエントリの件数をカウントするためのパラメータをリストし、説明します。

表8-24 エントリと継続リファレンスを検索結果セットから取得したり、戻されたエントリの件数をカウントするためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

res

検索結果です。同期検索ルーチンのいずれか、またはldap_result()をコールして取得されるものと同一です。

entry

ldap_first_entry()またはldap_next_entry()のコールで前に戻されたエントリです。

ref

ldap_first_reference()またはldap_next_reference()のコールで前に戻されたリファレンスです。

使用方法

ldap_first_entry()、ldap_next_entry()、ldap_first_reference()およびldap_next_reference()はすべて、戻される結果セットにこれ以上エントリまたはリファレンスが存在しない場合にNULLを戻します。エントリまたはリファレンスの参照中にエラーが発生した場合もNULLが戻されます。この場合、セッション・ハンドルldのエラー・パラメータがエラーを示すように設定されます。

ldap_count_entries()は、エントリのチェーンに含まれるエントリの数を戻します。resパラメータが無効などのエラーが発生した場合、-1が戻されます。ldap_first_message(), ldap_next_message(), ldap_first_entry(), ldap_next_entry(), ldap_first_reference(), ldap_next_reference()によって戻されたメッセージ、エントリまたはリファレンスとともにコールした場合、ldap_count_entries()コールを使用してチェーンに残っているエントリの数をカウントすることもできます。

ldap_count_references()は検索結果のチェーンに含まれるリファレンスの数を戻します。resパラメータが無効などのエラーが発生した場合は-1が戻されます。ldap_count_references()コールを使用してチェーンに残っているリファレンス数をカウントすることもできます。

8.2.14.2 ldap_first_attributeおよびldap_next_attribute

この項のファンクションを使用して、エントリとともに戻される属性の型のリストを参照します。

構文

char *ldap_first_attribute
(

LDAP            *ld,
LDAPMessage     *entry,
BerElement      **ptr

);

char *ldap_next_attribute
(

LDAP            *ld,
LDAPMessage     *entry,
BerElement      *ptr

);
void ldap_memfree( char *mem );

パラメータ

表8-25に、エントリとともに戻される属性の型を参照するためのパラメータを示します。

表8-25 エントリとともに戻される属性の型を参照するためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

entry

属性を参照する対象となるエントリです。ldap_first_entry()またはldap_next_entry()の戻り値と同一です。

ptr

ldap_first_attribute()では、エントリ内の現在の位置を追跡管理するために内部で使用されるポインタのアドレスです。ldap_next_attribute()では、ldap_first_attribute()のコールで前に戻されたポインタです。BerElementタイプ自体は、不透明な構造体です。

mem

ldap_first_attribute()およびldap_next_attributeで戻される属性の型の名前やldap_get_dn()で戻される識別名など、LDAPライブラリによって割り当てられたメモリーへのポインタです。memがNULLの場合は、ldap_memfree()をコールしても何も処理されません。

使用方法

ldap_first_attribute()およびldap_next_attribute()は、属性の最後に達したり、エラーが発生した場合に、NULLを戻します。後者の場合は、そのエラーを示すためにセッション・ハンドルldのエラー・パラメータが設定されます。

いずれのルーチンとも、現行の属性名が格納されている割当て済バッファへのポインタを戻します。不要になった場合は、ldap_memfree()をコールして解放する必要があります。

ldap_first_attribute()は、現在の位置の追跡に使用されるBerElementへのポインタをptrに割り当て、戻します。このポインタを後続のldap_next_attribute()コールに渡し、エントリの属性を参照できます。ldap_first_attribute()およびldap_next_attribute()の一連のコールの後、ptrがnull以外の場合、ber_free(ptr, 0)をコールしてこれを解放する必要があります。BerElementに関連付けられたバッファが別に割り当てられたメモリーを示さないため、このコールで2つ目のパラメータを0(ゼロ)として渡すことが非常に重要です。

戻された属性の型の名前は、関連する値を取り出すためのldap_get_values()や関連するファンクションのコールに渡すのに適しています。

8.2.14.3 ldap_get_values、ldap_get_values_len、ldap_count_values、ldap_count_values_len、ldap_value_freeおよびldap_value_free_len

ldap_get_values()およびldap_get_values_len()を使用して、指定した属性の値をエントリから取得します。ldap_count_values()およびldap_count_values_len()を使用して、戻された値をカウントします。

ldap_value_free()およびldap_value_free_len()は、値を解放します。

構文

char **ldap_get_values
(

LDAP            *ld,
LDAPMessage     *entry,
const char      *attr

);

struct berval **ldap_get_values_len
(

LDAP            *ld,
LDAPMessage     *entry,
const char      *attr

);

int ldap_count_values( char **vals );
int ldap_count_values_len( struct berval **vals );
void ldap_value_free( char **vals );
void ldap_value_free_len( struct berval **vals );

パラメータ

表8-26に、属性値を取得してその件数をカウントするためのパラメータをリストし、説明します。

表8-26 属性値を取得してその件数をカウントするためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

entry

値を取得する元のエントリです。ldap_first_entry()またはldap_next_entry()の戻り値と同一です。

attr

値を取得する対象となる属性です。ldap_first_attribute()またはldap_next_attribute()の戻り値、またはコール元が提供する文字列(たとえば、mail)と同一です。

vals

ldap_get_values()またはldap_get_values_len()のコールで前に戻された値です。

使用方法

2つの形式のコールが用意されています。最初の形式は、バイナリ以外の文字列データに対してのみ使用できます。_lenが付く2番目の形式は、あらゆる種類のデータで使用できます。

ldap_get_values()およびldap_get_values_len()は、attrに値がない場合またはエラーが発生した場合、NULLを戻します。

ldap_count_values()およびldap_count_values_len()は、valsパラメータが無効などのエラーが発生した場合、-1を戻します。

NULLのvalsパラメータがldap_value_free()またはldap_value_free_len()に渡された場合、何も処理されません。

戻された値は動的に割り当てられます。不要になった場合は、ldap_value_free()またはldap_value_free_len()をコールして解放する必要があります。

8.2.14.4 ldap_get_dn、ldap_explode_dn、ldap_explode_rdnおよびldap_dn2ufn

ldap_get_dn()は、エントリの名前の取得に使用されます。ldap_explode_dn()およびldap_explode_rdn()は、名前の構成要素への分割に使用されます。ldap_dn2ufn()は、名前をわかりやすい形式に変換するために使用されます。

構文

char *ldap_get_dn( LDAP *ld, LDAPMessage *entry );
char **ldap_explode_dn( const char *dn, int notypes );
char **ldap_explode_rdn( const char *rdn, int notypes );
char *ldap_dn2ufn( const char *dn );

パラメータ

表8-27に、エントリ名を取得、分割および変換するためのパラメータをリストし、説明します。

表8-27 エントリ名を取得、分割および変換するためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

entry

名前を取得する対象となるエントリです。ldap_first_entry()またはldap_next_entry()の戻り値と同一です。

dn

ldap_get_dn()で戻された識別名など、分割する識別名です。

rdn

ldap_explode_dn()によって配列の構成要素に戻された相対識別名など、分割する相対識別名です。

notypes

ブール値パラメータです。0(ゼロ)以外の場合は、識別名または相対識別名の構成要素から型情報が削除されることを示します。つまり、cn=BabsはBabsになります。

使用方法

識別名解析エラーが発生した場合、ldap_get_dn()はNULLを戻します。ファンクションはセッション・ハンドルldにエラー・パラメータを設定し、エラーを示します。新規に割り当てられた領域へのポインタを戻します。この領域は不要になった際にコール元がldap_memfree()をコールして解放する必要があります。

notypesパラメータで示されたタイプの有無にかかわらず、ldap_explode_dn()は指定されたDNのRDNコンポーネントを含むNULL終了char *配列を戻します。コンポーネントはDNに指定されている順序で戻されます。この戻された配列が不要になった場合は、ldap_value_free()をコールして解放する必要があります。

notypesパラメータで示されたタイプの有無にかかわらず、ldap_explode_rdn()は、指定されたRDNのコンポーネントを含むNULL終了char *配列を戻します。コンポーネントはRDNに指定されている順序で戻されます。この戻された配列が不要になった場合は、ldap_value_free()をコールして解放する必要があります。

ldap_dn2ufn()はDNをユーザーにわかりやすい形式に変換します。戻されたUFNは新規に割り当てられた領域です。この領域は不要になった際、ldap_memfree()コールにより解放する必要があります。

8.2.14.5 ldap_get_entry_controls

ldap_get_entry_controls()は、LDAPコントロールをエントリから抽出します。

構文

int ldap_get_entry_controls
(

LDAP            *ld,
LDAPMessage     *entry,
LDAPControl     ***serverctrlsp

);

パラメータ

表8-28に、LDAPコントロールをエントリから抽出するためのパラメータを示します。

表8-28 LDAPコントロールをエントリから抽出するためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

entry

コントロールを抽出する元のエントリです。ldap_first_entry()またはldap_next_entry()の戻り値と同一です。

serverctrlsp

この結果パラメータには、エントリからコピーされたコントロールの割当て済配列が入力されます。このコントロール配列は、ldap_controls_free()をコールして解放する必要があります。serverctrlspがNULLの場合、コントロールは戻されません。

使用方法

ldap_get_entry_controls()は、リファレンスが正常に解析されたかどうかを示すLDAPエラー・コードを戻します(正常終了の場合はLDAP_SUCCESS)。

8.2.14.6 ldap_parse_reference

ldap_parse_reference()を使用して、参照およびコントロールをSearchResultReferenceメッセージから抽出します。

構文

int ldap_parse_reference
(

LDAP            *ld,
LDAPMessage     *ref,
char            ***referralsp,
LDAPControl     ***serverctrlsp,
int             freeit

);

パラメータ

表8-29に、参照とコントロールをSearchResultReferenceメッセージから抽出するためのパラメータをリストし、説明します。

表8-29 参照とコントロールをSearchResultReferenceメッセージから抽出するためのパラメータ

パラメータ

説明

ld

セッション・ハンドルです。

ref

解析するリファレンスです。ldap_result()、ldap_first_reference()またはldap_next_reference()の戻り値と同一です。

referralsp

この結果パラメータには、文字列の割当て済配列が入力されます。配列の要素は、refに格納されている参照(通常はLDAP URL)です。この配列が不要になった場合は、ldap_value_free()をコールして解放する必要があります。referralspがNULLの場合、参照URLは戻されません。

serverctrlsp

この結果パラメータには、refからコピーされたコントロールの割当て済配列が入力されます。このコントロール配列は、ldap_controls_free()をコールして解放する必要があります。serverctrlspがNULLの場合、コントロールは戻されません。

freeit

refパラメータを解放するかどうかを判断するブール値です。0(ゼロ)以外の値を渡すと、このルーチンはリクエストされた情報を抽出した後にrefパラメータを解放します。このパラメータは便宜的に用意されたものです。結果は、後でldap_msgfree()を使用して解放することもできます。

使用方法

ldap_parse_reference()は、リファレンスが正常に解析されたかどうかを示すLDAPエラー・コードを戻します(正常終了の場合はLDAP_SUCCESS)。

8.3 C APIの使用例

最初の3つの例では、SSLと組み合せてC APIを使用する方法、SSLを使用せずにC APIを使用する方法およびSASL認証にC APIを使用する方法を示します。詳細な例は、RFC 1823に記載されています。また、LDAP検索を実行するコマンドライン・ツールのサンプル・コードも、SSLモードおよび非SSLモードでのAPIの使用方法を示します。

この項では、次の項目について説明します。

- 第8.3.1項「SSLモードを使用するC APIの使用方法」

- 第8.3.2項「SSLモードを使用しないC APIの使用方法」

- 第8.3.3項「SASLベースのDigest-MD5認証でのC APIの使用方法」

- 第8.3.4項「参照の追跡時に資格証明を得るためのコールバック・ファンクションの設定と使用」

8.3.1 SSLモードを使用するC APIの使用方法

#include <stdio.h>
#include <ldap.h>

main()
{

LDAP          *ld;
int               ret = 0;
….
/* open a connection */
if ((ld = ldap_open("MyHost", 3131)) == NULL)
exit( 1 );

/* SSL initialization */
ret = ldap_init_SSL(&ld->ld_sb, "file:/sslwallet", "welcome",
GSLC_SSL_ONEWAY_AUTH );
if(ret != 0)
{

printf(" %s \n", ldap_err2string(ret));
exit(1);

}

/* authenticate as nobody */
if ( ldap_bind_s( ld, NULL, NULL ) != LDAP_SUCCESS ) {
ldap_perror( ld, "ldap_bind_s" );
exit( 1 );
}

.
.
.

}

ldap_init_SSLをコールしているので、この例でのクライアント/サーバー間の通信は、SSLを使用することによって保護されています。

8.3.2 SSLモードを使用しないC APIの使用方法

#include <stdio.h>
#include <ldap.h>

main()
{

LDAP          *ld;
int           ret = 0;
.
.
.
/* open a connection */
if ( (ld = ldap_open( "MyHost", LDAP_PORT )) == NULL )
exit( 1 );

/* authenticate as nobody */
if ( ldap_bind_s( ld, NULL, NULL ) != LDAP_SUCCESS ) {
ldap_perror( ld, "ldap_bind_s" );
exit( 1 );
}
.
.
.

}

この例では、ldap_init_SSLをコールしていないので、クライアント/サーバー間の通信は保護されていません。

8.3.3 SASLベースのDigest-MD5認証でのC APIの使用方法

この例では、ディレクトリ・サーバーに対するSASLベースのDigest-MD5認証におけるLDAP SASL C-APIの使用方法を示します。

/*
EXPORT FUNCTION(S)
NONE

INTERNAL FUNCTION(S)
NONE

STATIC FUNCTION(S)
NONE

NOTES
Usage:
saslbind -h ldap_host -p ldap_port -D authentication_identity_dn \
-w password
options
-h     LDAP host
-p     LDAP port
-D     DN of the identity for authentication
-p     Password

Default SASL authentication parameters used by the demo program
SASL Security Property :    Currently only "auth" security property
is supported by the C-API. This demo
program uses this security property.
SASL Mechanism         :    Supported mechanisms by OID
"DIGEST-MD5" - This demo program
illustrates it's usage.
"EXTERNAL" - SSL authentication is used.
(This demo program does
not illustrate it's usage.)
Authorization identity :    This demo program does not use any
authorization identity.

MODIFIED   (MM/DD/YY)
******      06/12/03 - Creation

*/

/*---------------------------------------------------------------------------
PRIVATE TYPES AND CONSTANTS
---------------------------------------------------------------------------*/

/*---------------------------------------------------------------------------
STATIC FUNCTION DECLARATIONS
---------------------------------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include <ldap.h>

static int ldap_version = LDAP_VERSION3;

main (int argc, char **argv)
{
LDAP*           ld;
extern char*    optarg;
char*           ldap_host = NULL;
char*           ldap_bind_dn = NULL;
char*           ldap_bind_pw = NULL;
int             authmethod = 0;
char            ldap_local_host[256] = "localhost";
int             ldap_port = 3060;
char*           authcid = (char *)NULL;
char*           mech = "DIGEST-MD5"; /* SASL mechanism */
char*           authzid = (char *)NULL;
char*           sasl_secprops = "auth";
char*           realm = (char *)NULL;
int             status = LDAP_SUCCESS;
OraLdapHandle   sasl_cred = (OraLdapHandle )NULL;
OraLdapClientCtx *cctx = (OraLdapClientCtx *)NULL;
int              i = 0;

while (( i = getopt( argc, argv,
"D:h:p:w:E:P:U:V:W:O:R:X:Y:Z"
)) != EOF ) {
switch( i ) {

case 'h':       /* ldap host */
ldap_host = (char *)strdup( optarg );
break;
case 'D':       /* bind DN */
authcid = (char *)strdup( optarg );
break;

case 'p':       /* ldap port */
ldap_port = atoi( optarg );
break;
case 'w':       /* Password */
ldap_bind_pw = (char *)strdup( optarg );
break;

default:
printf("Invalid Arguments passed\n" );
}
}

/* Get the connection to the LDAP server */
if (ldap_host == NULL)
ldap_host = ldap_local_host;

if ((ld = ldap_open (ldap_host, ldap_port)) == NULL)
{
ldap_perror (ld, "ldap_init");
exit (1);
}

/* Create the client context needed by LDAP C-API Oracle Extension functions*/
status = ora_ldap_init_clientctx(&cctx);

if(LDAP_SUCCESS != status) {
printf("Failed during creation of client context \n");
exit(1);
}

/* Create SASL credentials */
sasl_cred = ora_ldap_create_cred_hdl(cctx, ORA_LDAP_CRED_HANDLE_SASL_MD5);

ora_ldap_set_cred_props(cctx, sasl_cred, ORA_LDAP_CRED_SASL_REALM,
(void *)realm);
ora_ldap_set_cred_props(cctx, sasl_cred, ORA_LDAP_CRED_SASL_AUTH_PASSWORD,
(void *)ldap_bind_pw);
ora_ldap_set_cred_props(cctx, sasl_cred, ORA_LDAP_CRED_SASL_AUTHORIZATION_ID,
(void *)authzid);
ora_ldap_set_cred_props(cctx, sasl_cred, ORA_LDAP_CRED_SASL_SECURITY_PROPERTIES,
(void *)sasl_secprops);

/* If connecting to the directory using SASL DIGEST-MD5, the Authentication ID
has to be normalized before it's sent to the server,
the LDAP C-API does this normalization based on the following flag set in
SASL credential properties */
ora_ldap_set_cred_props(cctx, sasl_cred, ORA_LDAP_CRED_SASL_NORM_AUTHDN, (void *)NULL);

/* SASL Authetication to LDAP Server */
status = (int)ora_ldap_init_SASL(cctx, ld, (char *)authcid, (char *)ORA_LDAP_SASL_MECH_DIGEST_MD5,
sasl_cred, NULL, NULL);

if(LDAP_SUCCESS == status) {
printf("SASL bind successful \n" );
}else {
printf("SASL bind failed with status :  %d\n", status);
}

/* Free SASL Credentials */
ora_ldap_free_cred_hdl(cctx, sasl_cred);

status = ora_ldap_free_clientctx(cctx);

/* Unbind from LDAP server */
ldap_unbind (ld);

return (0);
}

/* end of file saslbind.c */

8.3.4 参照の追跡時に資格証明を得るためのコールバック・ファンクションの設定と使用

コールバック・ファンクションを設定するには、ldap_set_rebind_proc()を使用します。コールバック・ファンクションは、ldap_set_option()を使用してLDAP_OPT_REFERRALSが設定されている場合にのみ使用されます。ldap_set_rebind_proc()がコールされていない場合、LDAP参照の追跡時、ライブラリでは新しいサーバーへの接続に匿名バインドを使用します。

/* referralsample.c - Sample program to demonstrate the usage of ldap_set_rebind_proc() for referrals */

#include <stdio.h>
#include <stdlib.h>
#include <ldap.h>

/*
* Prints the Entry DNs of the search result
*/
void print_entry_dns( LDAP *ld, LDAPMessage *result )
{
LDAPMessage     *e;
char            *dn;

for ( e = ldap_first_entry( ld, result ); e != NULL;
e = ldap_next_entry(ld, e ) )
{
if ( (dn = ldap_get_dn( ld, e )) != NULL ) {
printf( "dn: %s\n\n", dn );
ldap_memfree( dn );
}
else {
ldap_perror( ld, "ldap_get_dn" );
}
}
}

/*
* Rebind function for providing the credentials to bind referral servers
*/
int getbindcredentials(LDAP *ld, char **binddn, char **bindpwd, int *authmethod, int freeit)
{
if (freeit == 0) {
/* In this example bind credentials are static.  Typically, Bind credentials are fetched from wallet or
some other means for the server information in input session handle */

*binddn = "cn=orcladmin";
*bindpwd = "xyz";
*authmethod = LDAP_AUTH_SIMPLE;
}
else {
/* In this example there is no memory allocation.
If the memory is allocated for binddn/bindpwd/authmehod, they should be freed here */

*binddn = NULL;
*bindpwd = NULL;
*authmethod = 0;
}

return 0;
}

main()
{
char            ldaphost[] = "localhost";
char            binddn[] = "cn=orcladmin";
char            bindpwd[] = "password";
int             ldapport = 3060;
char            searchbase[] = "dc=oracle,dc=com";
char            filter[] = "objectclass=*";
int             scope = LDAP_SCOPE_SUBTREE;

LDAP           *ld;
LDAPMessage    *result;
int             ret = 0;

if ( (ld = ldap_open( ldaphost, ldapport )) == NULL) {
printf( "ldap_open: Connection failed\n" );
exit( 1 );
}

if ( ldap_simple_bind_s(ld, binddn, bindpwd) != LDAP_SUCCESS ) {
ldap_perror(ld, "ldap_simple_bind_s");
exit( 1 );
}

/* Set this option to connect to the referrals */
ldap_set_option (ld, LDAP_OPT_REFERRALS, (void *)1);

/* set the function pointer which provides the bind credentials for referral server */
ldap_set_rebind_proc(ld,  (int (*)(LDAP*, char**, char**, int*, int))getbindcredentials);

ret = ldap_search_s( ld, searchbase, scope, filter, NULL, 0, &result );
if(LDAP_SUCCESS != ret) {
ldap_perror(ld, "ldap_search_s");
exit( 1 );
}

print_entry_dns(ld, result);

ldap_unbind(ld);
return(0);
}

8.4 C APIに必要なヘッダー・ファイルおよびライブラリ

C APIを使用してアプリケーションを作成するには、次のことが必要です。

- $ORACLE_HOME/ldap/public/ldap.hにあるヘッダー・ファイルをインクルードします。

- 次の場所にあるライブラリに動的にリンクします。

- $ORACLE_HOME/lib/libclntsh.so.10.1(UNIXオペレーティング・システムの場合)

- %ORACLE_HOME%\bin\oraldapclnt10.dll(Windowsオペレーティング・システムの場合)

8.5 C APIの依存性と制限事項

このAPIは、すべてのリリースのOracle Internet Directoryで機能します。Oracle環境または最低でもグローバリゼーション・サポートなどの主要ライブラリが必要です。

SSLで別の認証モードを使用するには、ディレクトリ・サーバーの構成設定をモードに応じて変更する必要があります。

関連項目:

様々なSSL認証モードでのディレクトリ・サーバーの設定方法の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

SSLモードでC APIを使用する場合は、ウォレットを作成するためにOracle Wallet Managerが必要となります。

TCP/IPソケット・ライブラリが必要です。

次のOracleライブラリが必要です。

- Oracle SSL関連ライブラリ

- Oracleシステム・ライブラリ

サンプル・コマンドライン・ツールのリリースの中には、サンプル・ライブラリが含まれています。それらのライブラリはユーザー自身のライブラリに置き換える必要があります。

この製品は、LDAP SDKの仕様(RFC 1823)に記述されている認証方式のみをサポートします。

C APIに入力されるすべての文字列はUTF-8形式の必要があります。文字列がUTF-8形式でない場合は、OCIファンクションOCINlsCharSetConvertを使用して変換できます。http://www.oracle.com/technology/documentationのOracle Database LibraryでOracle Call Interfaceプログラマーズ・ガイドを参照してください。

9 DBMS_LDAP PL/SQLリファレンス

DBMS_LDAPには、PL/SQLプログラマがLDAPサーバーのデータにアクセスするためのファンクションとプロシージャが含まれています。この章では、すべてのAPIファンクションの詳細を説明します。

この章では、次の項目について説明します。

- 第9.1項「サブプログラムの概要」

- 第9.2項「例外の概要」

- 第9.3項「データ型の概要」

- 第9.4項「サブプログラム」

9.1 サブプログラムの概要

表9-1 DBMS_LDAP APIのサブプログラム

ファンクションまたはプロシージャ

説明

initファンクション

init()では、LDAPサーバーとのセッションが初期化されます。これにより、実際にLDAPサーバーとの接続が確立されます。

simple_bind_sファンクション

simple_bind_s()ファンクションを使用すると、ユーザー名およびパスワードに基づく、ディレクトリ・サーバーへの簡易認証を実行できます。

bind_sファンクション

bind_s()ファンクションを使用すると、ディレクトリ・サーバーへの高度な認証を実行できます。

unbind_sファンクション

unbind_s()ファンクションは、アクティブなLDAPセッションのクローズに使用します。

compare_sファンクション

compare_s()ファンクションを使用すると、特定のエントリの特定の属性が特定の値を持っているかどうかをテストできます。

search_sファンクション

search_s()ファンクションを使用すると、LDAPサーバー内で同期検索が実行されます。これを実行すると、サーバーからすべての検索結果が送信されるか、検索リクエストがサーバーによってタイムアウトになるまでは、PL/SQL環境に制御が戻されません。

search_stファンクション

search_st()ファンクションを使用すると、LDAPサーバー内で、クライアント側のタイムアウトを使用して同期検索が実行されます。これを実行すると、サーバーからすべての検索結果が送信されるか、検索リクエストがクライアントまたはサーバーによってタイムアウトになるまで、PL/SQL環境に制御が戻されません。

first_entryファンクション

first_entryファンクションを使用するとsearch_s()またはsearch_stで戻された結果セット内の最初のエントリを取り出せます。

next_entryファンクション

next_entry()ファンクションを使用すると、検索操作による結果セット内の次のエントリを取り出すことができます。

count_entriesファンクション

このファンクションは、結果セット内のエントリ数のカウントに使用します。また、first_entry()ファンクションおよびnext_entryファンクションと組み合せて使用すると、結果セットの全探索時に残っているエントリの数をカウントすることもできます。

first_attributeファンクション

first_attribute()ファンクションを使用すると、結果セットの中から、指定したエントリの最初の属性がフェッチされます。

next_attributeファンクション

next_attribute()ファンクションを使用すると、結果セットの中から、指定したエントリの次の属性がフェッチされます。

get_dnファンクション

get_dn()ファンクションを使用すると、結果セットの中から、指定したエントリのX.500識別名が取り出されます。

get_valuesファンクション

get_values()ファンクションを使用すると、特定のエントリの特定の属性に関連する値をすべて取り出せます。

get_values_lenファンクション

get_values_len()ファンクションを使用すると、バイナリ構文を持つ属性の値を取り出せます。

delete_sファンクション

delete_sファンクションを使用すると、LDAPディレクトリ情報ツリー内のリーフ・エントリを削除できます。

modrdn2_sファンクション

modrdn2_s()ファンクションを使用すると、エントリの相対識別名を変更できます。

err2stringファンクション

err2string()ファンクションを使用すると、LDAPエラー・コードを、APIの動作環境で使用されている各国語の文字列に変換できます。

create_mod_arrayファンクション

create_mod_array()ファンクションを使用すると、modify_s()ファンクションを使用してエントリに適用される変更配列に、メモリーが割り当てられます。

populate_mod_arrayプロシージャ(文字列バージョン)

追加操作または変更操作に、1組の属性情報を代入します。DBMS_LDAP.create_mod_array()をコールした後に、このプロシージャをコールする必要があります。

populate_mod_arrayプロシージャ(バイナリ・バージョン)

追加操作または変更操作に、1組の属性情報を代入します。DBMS_LDAP.create_mod_array()をコールした後に、このプロシージャをコールする必要があります。

populate_mod_arrayプロシージャ(バイナリ・バージョン。BLOBデータ型を使用)

追加操作または変更操作に、1組の属性情報を代入します。DBMS_LDAP.create_mod_array()をコールした後に、このプロシージャをコールする必要があります。

get_values_blobファンクション

get_values_blob()ファンクションを使用すると、バイナリ構文を持つ属性のより大きな値を取り出せます。

count_values_blobファンクション

DBMS_LDAP.get_values_blob()によって戻された値の数をカウントします。

value_free_blobファンクション

DBMS_LDAP.get_values_blob()によって戻されたBLOB_COLLECTIONに関連付けられているメモリーを解放します。

modify_sファンクション

既存のLDAPディレクトリ・エントリの同期変更を実行します。add_sをコールする前に、まずDBMS_LDAP.creat_mod_array()とDBMS_LDAP.populate_mod_array()をコールする必要があります。

add_sファンクション

LDAPディレクトリに新規エントリを同期的に追加します。add_sをコールする前に、まずDBMS_LDAP.creat_mod_array()とDBMS_LDAP.populate_mod_array()をコールする必要があります。

free_mod_arrayプロシージャ

DBMS_LDAP.create_mod_array()によって割り当てられたメモリーを解放します。

count_valuesファンクション

DBMS_LDAP.get_values()によって戻された値の数をカウントします。

count_values_lenファンクション

DBMS_LDAP.get_values_len ()によって戻された値の数をカウントします。

rename_sファンクション

LDAPエントリの名前を同期的に変更します。

explode_dnファンクション

識別名を個々の構成要素に分割します。

open_sslファンクション

すでに確立されているLDAP接続を介してSSL接続を確立します。

msgfreeファンクション

同期検索ファンクションによって戻されたメッセージ・ハンドルに対応付けられている結果セットを解放します。

ber_freeファンクション

BER_ELEMENTへのハンドルに対応付けられたメモリーを解放します。

nls_convert_to_utf8ファンクション

nls_convert_to_utf8ファンクションでは、データベース・キャラクタ・セットのデータを含む入力文字列をUTF-8キャラクタ・セットのデータに変換して戻します。

nls_convert_from_utf8ファンクション

nls_convert_from_utf8ファンクションでは、UTF-8キャラクタ・セットのデータを含む入力文字列をデータベース・キャラクタ・セットのデータに変換して戻します。

nls_get_dbcharset_nameファンクション

nls_get_dbcharset_nameファクションでは、データベース・キャラクタ・セット名を含む文字列を戻します。

関連項目:

- DBMS_LDAP.search_s()およびDBMS_LDAP.search_st()の詳細は、第2.6項「ディレクトリの検索」を参照してください。

- DBMS_LDAP.unbind_s()の詳細は、第2.7.2項「DBMS_LDAPを使用したセッションの終了」を参照してください。

9.2 例外の概要

DBMS_LDAPでは、表9-2に示す例外が生成される場合があります。

表9-2 DBMS_LDAP例外の概要

例外名

Oracleエラー番号

例外の原因

general_error

31202

関係する特定のPL/SQL例外がないエラーが発生すると常に呼び出されます。エラー文字列では、ユーザーが使用している言語で問題が説明されます。

init_failed

31203

DBMS_LDAP.init()に問題がある場合に呼び出されます。

invalid_session

31204

DBMS_LDAPパッケージのファンクションおよびプロシージャに無効なセッション・ハンドルが渡された場合に呼び出されます。

invalid_auth_method

31205

DBMS_LDAP.bind_s()でリクエストされた認証方式がサポートされていない場合に呼び出されます。

invalid_search_scope

31206

検索の範囲が無効な場合に、すべての検索ファンクションによって呼び出されます。

invalid_search_time_val

31207

制限時間として渡された値が無効な場合に、DBMS_LDAP.search_st()によって呼び出されます。

invalid_message

31208

検索操作によるエントリの取得を結果セット全体にわたって反復するファンクションに、無効なメッセージ・ハンドルが指定された場合に呼び出されます。

count_entry_error

31209

DBMS_LDAP.count_entriesで指定した結果セット内のエントリをカウントできない場合に呼び出されます。

get_dn_error

31210

DBMS_LDAP.get_dnによって取り出されるエントリの識別名がNULLである場合に呼び出されます。

invalid_entry_dn

31211

エントリを変更、追加または名前を変更するファンクションに無効なエントリの識別名を指定した場合に呼び出されます。

invalid_mod_array

31212

変更配列を引数として取るファンクションに、無効な変更配列を指定した場合に呼び出されます。

invalid_mod_option

31213

DBMS_LDAP.populate_mod_arrayで指定した変更オプションが、MOD_ADD、MOD_DELETEまたはMOD_REPLACEでない場合に呼び出されます。

invalid_mod_type

31214

DBMS_LDAP.populate_mod_arrayによって変更される属性の型がNULLである場合に呼び出されます。

invalid_mod_value

31215

DBMS_LDAP.populate_mod_arrayで指定した属性をNULL値で更新しようとした場合に呼び出されます。

invalid_rdn

31216

有効な相対識別名を想定するファンクションおよびプロシージャに、無効な相対識別名を指定した場合に呼び出されます。

invalid_newparent

31217

DBMS_LDAP.rename_sによって名前を変更されるエントリの新しい親がNULLである場合に呼び出されます。

invalid_deleteoldrdn

31218

DBMS_LDAP.rename_sのdeleteoldrdnパラメータが無効な場合に呼び出されます。

invalid_notypes

31219

DBMS_LDAP.explode_dnのnotypesパラメータが無効な場合に呼び出されます。

invalid_ssl_wallet_loc

31220

ウォレットの場所がNULLであるがSSL認証モードが有効なウォレットを必要とする場合に、DBMS_LDAP.open_sslによって呼び出されます。

invalid_ssl_wallet_password

31221

DBMS_LDAP.open_sslで指定したウォレット・パスワードがNULLである場合に呼び出されます。

invalid_ssl_auth_mode

31222

SSL認証モードが1、2または3でない場合にDBMS_LDAP.open_sslによって呼び出されます。

9.3 データ型の概要

DBMS_LDAPパッケージでは、表9-3に示すデータ型を使用します。

表9-3 DBMS_LDAPデータ型の概要

データ型

用途

SESSION

LDAPセッションのハンドルを保持するために使用します。APIのほとんどすべてのファンクションでは、作業のために、有効なLDAPセッションが必要となります。

MESSAGE

結果セットから取り出されたメッセージのハンドルを保持するために使用します。このデータ型は、エントリの属性および値を処理するすべてのファンクションで使用します。

MOD_ARRAY

modify_s()またはadd_s()に渡される変更配列のハンドルを保持するために使用します。

TIMEVAL

制限時間を必要とするLDAP APIファンクションに制限時間の情報を渡すために使用します。

BER_ELEMENT

受信メッセージのデコードに使用されるBER構造体のハンドルを保持するために使用します。

STRING_COLLECTION

LDAPサーバーに渡すことができるVARCHAR2文字列のリストを保持するために使用します。

BINVAL_COLLECTION

バイナリ・データを表すRAWデータのリストを保持するために使用します。

BERVAL_COLLECTION

変更配列の代入に使用されるBERVAL値のリストを保持するために使用します。

BLOB_COLLECTION

バイナリ・データを表すBLOBデータのリストを保持するために使用します。

9.4 サブプログラム

この項では、DBMS_LDAPの各サブプログラムについてさらに詳しく説明します。

9.4.1 initファンクション

init()では、LDAPサーバーとのセッションが初期化されます。これにより、実際にLDAPサーバーとの接続が確立されます。

構文

FUNCTION init
(

hostname IN VARCHAR2,
portnum  IN PLS_INTEGER

)

RETURN SESSION;

パラメータ

表9-4 INITファンクションのパラメータ

パラメータ

説明

hostname

接続先のLDAPサーバーを実行しているホストのIPアドレスを示す、空白で区切られたホスト名またはドット表記の文字列のリストが入ります。リスト内の各ホスト名には、コロンでホストと区切ってポート番号を含められます。ホストがリストの順序に従って試みられ、最初にホストへの接続が成功した時点で終了します。

portnum

接続先のTCPポート番号が入ります。ホスト名にポート番号が含まれている場合、このパラメータは無視されます。このパラメータを指定せず、ホスト名にポート番号を含めていない場合は、デフォルトのポート番号3060が指定されたものとみなされます。

戻り値

表9-5 INITファンクションの戻り値

値

説明

SESSION

以後のAPIのコールに使用できるLDAPセッション・ハンドルです。

例外

表9-6 INITファンクションの例外

例外

説明

init_failed

LDAPサーバーとの通信中に問題が発生した場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

DBMS_LDAP.init()は、LDAPサーバーとのセッションを確立するファンクションなので最初に呼び出す必要があります。DBMS_LDAP.init()ファンクションはセッション・ハンドルを戻します。セッション・ハンドルは、セッションに関連する後続のコールに渡す必要がある不透明な構造体へのポインタです。セッションを初期化できない場合、このルーチンはNULLを戻し、INIT_FAILED例外を発生させます。init()をコールした後、接続はDBMS_LDAP.bind_sまたはDBMS_LDAP.simple_bind_s()を使用して認証される必要があります。

関連項目

DBMS_LDAP.simple_bind_s()、DBMS_LDAP.bind_s()。

9.4.2 simple_bind_sファンクション

simple_bind_sファンクションを使用すると、ユーザー名およびパスワードに基づく、ディレクトリ・サーバーへの簡易認証を実行できます。

構文

FUNCTION simple_bind_s
(

ld     IN SESSION,
dn     IN VARCHAR2,
passwd IN VARCHAR2

)

RETURN PLS_INTEGER;

パラメータ

表9-7 SIMPLE_BIND_Sファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

dn

ログイン時に使用するユーザー識別名です。

passwd

パスワードを含む文字列です。

戻り値

表9-8 SIMPLE_BIND_Sファンクションの戻り値

値

説明

PLS_INTEGER

正常終了した場合はDBMS_LDAP.SUCCESSです。問題があった場合は、次の例外のいずれかが呼び出されます。

例外

表9-9 SIMPLE_BIND_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

DBMS_LDAP.simple_bind_s()を使用すると、ディレクトリ識別名およびディレクトリ・パスワードがすでにわかっているユーザーを認証できます。DBMS_LDAP.init()のコールで有効なLDAPセッション・ハンドルを取得してから、コールしてください。

9.4.3 bind_sファンクション

bind_sファンクションを使用すると、ディレクトリ・サーバーへの高度な認証を実行できます。

構文

FUNCTION  bind_s
(

ld     IN SESSION,
dn     IN VARCHAR2,
cred IN VARCHAR2,
meth IN PLS_INTEGER

)

RETURN PLS_INTEGER;

パラメータ

表9-10 BIND_Sファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

dn

ユーザーの識別名です。

cred

認証に使用する資格証明を含む文字列です。

meth

認証方式です。有効な値はDBMS_LDAP_UTL.AUTH_SIMPLEのみです。

戻り値

表9-11 BIND_Sファンクションの戻り値

値

説明

PLS_INTEGER

正常終了した場合はDBMS_LDAP.SUCCESSです。問題があった場合は、次の例外が呼び出されます。

例外

表9-12 BIND_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_auth_method

リクエストした認証方式がサポートされていない場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

DBMS_LDAP.bind_s()を使用すると、ユーザーを認証できます。DBMS_LDAP.init()のコールで有効なLDAPセッション・ハンドルを取得してから、コールしてください。

関連項目

DBMS_LDAP.init()、DBMS_LDAP.simple_bind_s()。

9.4.4 unbind_sファンクション

unbind_sファンクションは、アクティブなLDAPセッションのクローズに使用します。

構文

FUNCTION unbind_s
(

ld IN OUT SESSION

)

RETURN PLS_INTEGER;

パラメータ

表9-13 UNBIND_Sファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

戻り値

表9-14 UNBIND_Sファンクションの戻り値

値

説明

PLS_INTEGER

適切に終了した場合はDBMS_LDAP.SUCCESSです。それ以外の場合は、次の例外のいずれかが呼び出されます。

例外

表9-15 UNBIND_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

unbind_s()ファンクションを使用すると、サーバーにバインド解除リクエストが送信され、LDAPセッションに関連するオープンな接続がすべてクローズされ、セッション・ハンドルに関連するリソースがすべて処理された後に値が戻されます。このファンクションをコールすると、セッション・ハンドルldが無効になります。

関連項目

DBMS_LDAP.bind_s()、DBMS_LDAP.simple_bind_s()。

9.4.5 compare_sファンクション

compare_sファンクションを使用すると、特定のエントリの特定の属性が特定の値を持っているかどうかをテストできます。

構文

FUNCTION compare_s
(

ld    IN SESSION,
dn    IN VARCHAR2,
attr  IN VARCHAR2,
value IN VARCHAR2

)

RETURN PLS_INTEGER;

パラメータ

表9-16 COMPARE_Sファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

dn

比較の対象となるエントリの名前です。

attr

比較の対象となる属性です。

value

比較の対象となる文字列の属性値です。

戻り値

表9-17 COMPARE_Sファンクションの戻り値

値

説明

PLS_INTEGER

属性の値が指定した値と一致した場合の戻り値はCOMPARE_TRUEです。

属性の値が指定した値と一致しない場合の戻り値はCOMPARE_FALSEです。

例外

表9-18 COMPARE_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

compare_sファンクションを使用すると、ディレクトリ内の属性が特定の値を持つことを確認できます。この操作は、比較が可能な構文を持つ属性についてのみ実行できます。compare_sファンクションは、有効なLDAPセッション・ハンドルをinit()ファンクションで取得し、bind_s()またはsimple_bind_s()ファンクションで認証してから、コールしてください。

関連項目

DBMS_LDAP.bind_s()。

9.4.6 search_sファンクション

search_sファンクションを使用すると、ディレクトリ内で同期検索が実行されます。これを実行すると、サーバーからすべての検索結果が送信されるか、検索リクエストがサーバーによってタイムアウトになるまでは、PL/SQL環境に制御が戻されません。

構文

FUNCTION search_s
(

ld       IN  SESSION,
base     IN  VARCHAR2,
scope    IN  PLS_INTEGER,
filter   IN  VARCHAR2,
attrs    IN  STRING_COLLECTION,
attronly IN  PLS_INTEGER,
res      OUT MESSAGE

)

RETURN PLS_INTEGER;

パラメータ

表9-19 SEARCH_Sファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

base

検索の開始点となるエントリの識別名です。

scope

SCOPE_BASE (0x00)、SCOPE_ONELEVEL (0x01)またはSCOPE_SUBTREE (0x02)のいずれかで、検索範囲を指定します。

filter

検索フィルタを表す文字列です。この値をNULLにすると、すべてのエントリに一致するフィルタ"(objectclass=*)"を使用するように指定できます。

attrs

一致した各エントリのどの属性を戻すかを指定する文字列の集合です。このパラメータをNULLにすると、取得可能なユーザー属性がすべて取り出されます。文字列NO_ATTRS ("1.1")を配列内の唯一の文字列として使用すると、サーバーが属性の型を戻さないように指定できます。attrs配列の中で、文字列ALL_USER_ATTRS ("*")をいくつかの操作属性名とともに使用すると、すべてのユーザー属性に加えて、リストした操作属性を戻すように指定できます。

attrsonly

属性の型と値の両方を戻す場合には0(ゼロ)、属性の型のみを要求する場合には0(ゼロ)以外を指定する必要があるブール値です。

res

コールの終了時に検索結果が入る結果パラメータです。戻される結果がない場合、*resはNULLに設定されます。

戻り値

表9-20 SEARCH_Sファンクションの戻り値

値

説明

PLS_INTEGER

検索操作が正常終了した場合はDBMS_LDAP.SUCCESSです。その他の場合は例外が呼び出されます。

res

検索が正常終了してエントリがあった場合、このパラメータはNULL以外の値に設定されます。この値を使用すると、結果セットからエントリを取り出すことができます。

例外

表9-21 SEARCH_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_search_scope

検索範囲が、SCOPE_BASE、SCOPE_ONELEVELまたはSCOPE_SUBTREEではない場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

search_s()ファンクションが検索操作を発行すると、サーバーからすべての結果が戻されるまで、ユーザー環境に制御が戻されません。検索によって戻されるエントリがある場合、resパラメータの中に収められます。このパラメータはコール元に対しては不透明です。エントリ、属性および値は、この章で説明する解析ルーチンをコールすることで抽出できます。

関連項目

DBMS_LDAP.search_st()、DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry。

9.4.7 search_stファンクション

search_st()ファンクションを使用すると、LDAPサーバー内で、クライアント側のタイムアウトを使用して同期検索が実行されます。これを実行すると、サーバーからすべての検索結果が送信されるか、検索リクエストがクライアントまたはサーバーによってタイムアウトになるまで、PL/SQL環境に制御が戻されません。

構文

FUNCTION search_st
(

ld       IN  SESSION,
base     IN  VARCHAR2,
scope    IN  PLS_INTEGER,
filter   IN  VARCHAR2,
attrs    IN  STRING_COLLECTION,
attronly IN  PLS_INTEGER,
tv       IN  TIMEVAL,
res      OUT MESSAGE

)

RETURN PLS_INTEGER;

パラメータ

表9-22 SEARCH_STファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

base

検索の開始点となるエントリの識別名です。

scope

SCOPE_BASE (0x00)、SCOPE_ONELEVEL (0x01)またはSCOPE_SUBTREE (0x02)のいずれかで、検索範囲を指定します。

filter

検索フィルタを表す文字列です。この値をNULLにすると、すべてのエントリに一致するフィルタ"(objectclass=*)"を使用するように指定できます。

attrs

一致した各エントリのどの属性を戻すかを指定する文字列の集合です。このパラメータをNULLにすると、取得可能なユーザー属性がすべて取り出されます。文字列NO_ATTRS ("1.1")を配列内の唯一の文字列として使用すると、サーバーが属性の型を戻さないように指定できます。attrs配列の中で、文字列ALL_USER_ATTRS ("*")をいくつかの操作属性名とともに使用すると、すべてのユーザー属性に加えて、リストした操作属性を戻すように指定できます。

attrsonly

属性の型と値の両方を戻す場合には0(ゼロ)、属性の型のみを要求する場合には0(ゼロ)以外を指定する必要があるブール値です。

tv

この検索で使用する必要があるタイムアウト値です(秒およびミリ秒単位で表します)。

res

コールの終了時に検索結果が入る結果パラメータです。戻される結果がない場合、*resはNULLに設定されます。

戻り値

表9-23 SEARCH_STファンクションの戻り値

値

説明

PLS_INTEGER

検索操作が正常終了した場合はDBMS_LDAP.SUCCESSです。その他の場合は例外が呼び出されます。

res

検索が正常終了してエントリがあった場合、このパラメータはNULL以外の値に設定されます。この値を使用すると、結果セットからエントリを取り出すことができます。

例外

表9-24 SEARCH_STファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_search_scope

検索範囲が、SCOPE_BASE、SCOPE_ONELEVELまたはSCOPE_SUBTREEではない場合に呼び出されます。

invalid_search_time_value

タイムアウトに指定した時間の値が無効な場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

このファンクションはDBMS_LDAP.search_s()に類似していますが、タイムアウト値を指定する必要があるという点に違いがあります。

関連項目

DBMS_LDAP.search_s()、DBML_LDAP.first_entry()、DBMS_LDAP.next_entry。

9.4.8 first_entryファンクション

first_entry()ファンクションを使用するとsearch_s()またはsearch_st()で戻された結果セット内の最初のエントリを取り出せます。

構文

FUNCTION first_entry
(

ld  IN SESSION,
msg IN MESSAGE

)

RETURN MESSAGE;

パラメータ

表9-25 FIRST_ENTRYファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

msg

検索結果です。同期検索ルーチンのいずれかをコールして取得されるものと同一です。

戻り値

表9-26 FIRST_ENTRYの戻り値

値

説明

MESSAGE

LDAPサーバーから戻されたエントリのリスト中の最初のエントリのハンドルです。エラーがあった場合はNULLに設定され、例外が呼び出されます。

例外

表9-27 FIRST_ENTRYの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したmsgハンドルが無効な場合に呼び出されます。

使用方法

first_entry()ファンクションは、検索操作からの結果を取り出すために必ず最初にコールする必要があるファンクションです。

関連項目

DBMS_LDAP.next_entry()、DBMS_LDAP.search_s()、DBMS_LDAP.search_st()。

9.4.9 next_entryファンクション

next_entry()ファンクションを使用すると、検索操作による結果セット内の次のエントリを取り出すことができます。

構文

FUNCTION next_entry
(

ld  IN SESSION,
msg IN MESSAGE

)

RETURN MESSAGE;

パラメータ

表9-28 NEXT_ENTRYファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

msg

検索結果です。同期検索ルーチンのいずれかをコールして取得されるものと同一です。

戻り値

表9-29 NEXT_ENTRYファンクションの戻り値

値

説明

MESSAGE

LDAPサーバーから戻されたエントリのリスト中の次のエントリのハンドルです。エラーがあった場合はNULLに設定されて、例外が呼び出されます。

例外

表9-30 NEXT_ENTRYファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したmsgハンドルが無効な場合に呼び出されます。

使用方法

next_entry()ファンクションは、必ずfirst_entry()ファンクションの後にコールする必要があります。また、リスト中の次のエントリをフェッチするには、正常終了したnext_entry()のコールの戻り値を、次のnext_entry()のコールでmsg引数として使用する必要があります。

関連項目

DBMS_LDAP.first_entry()、DBMS_LDAP.search_s()、DBMS_LDAP.search_st()。

9.4.10 count_entriesファンクション

このファンクションは、結果セット内のエントリ数のカウントに使用します。また、first_entry()ファンクションおよびnext_entryファンクションと組み合せて使用すると、結果セットの全探索時に残っているエントリの数をカウントすることもできます。

構文

FUNCTION count_entries
(

ld  IN SESSION,
msg IN MESSAGE

)

RETURN PLS_INTEGER;

パラメータ

表9-31 COUNT_ENTRYファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

msg

検索結果です。同期検索ルーチンのいずれかをコールして取得されるものと同一です。

戻り値

表9-32 COUNT_ENTRYファンクションの戻り値

値

説明

PLS_INTEGER

結果セット中にエントリがある場合の戻り値は0(ゼロ)以外です。問題があった場合は-1です。

例外

表9-33 COUNT_ENTRYファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したmsgハンドルが無効な場合に呼び出されます。

count_entry_error

エントリのカウント中に問題があった場合に呼び出されます。

使用方法

count_entries()は、エントリのチェーンに含まれるエントリの数を戻します。resパラメータが無効などのエラーが発生した場合、-1が戻されます。first_message(), next_message(), first_entry(), next_entry(), first_reference(), next_reference()から戻されたメッセージ、エントリまたはリファレンスとともにコールされた場合、count_entries()コールを使用してチェーンに残っているエントリ数をカウントすることもできます。

関連項目

DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry()。

9.4.11 first_attributeファンクション

first_attribute()ファンクションを使用すると、結果セットの中から、指定したエントリの最初の属性がフェッチされます。

構文

FUNCTION first_attribute
(

ld          IN  SESSION,
ldapentry   IN  MESSAGE,
ber_elem    OUT BER_ELEMENT

)

RETURN VARCHAR2;

パラメータ

表9-34 FIRST_ATTRIBUTEファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

ldapentry

属性を参照する対象となるエントリです。first_entry()またはnext_entry()の戻り値と同一です。

ber_elem

エントリ内の読取り済の属性を記録するために使用されるBER_ELEMENTのハンドルです。

戻り値

表9-35 FIRST_ATTRIBUTEファンクションの戻り値

値

説明

VARCHAR2

属性が存在する場合の戻り値はその属性の名前です。

属性が存在しない場合、またはエラーが発生した場合はNULLです。

ber_elem

DBMS_LDAP.next_attribute()で、すべての属性に対して同一処理を反復するために使用するハンドルです。

例外

表9-36 FIRST_ATTRIBUTEファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したmsgハンドルが無効な場合に呼び出されます。

使用方法

エントリの様々な属性に対して処理を繰り返し行うには、first_attribute()のパラメータとして戻されたBER_ELEMENTのハンドルを、次のnext_attribute()のコールで使用する必要があります。また、first_attribute()のコールで戻された属性の名前を、get_values()またはget_values_len()のコールで使用すると、その属性の値を取得できます。

関連項目

DBMS_LDAP.next_attribute()、DBMS_LDAP.get_values()、DBMS_LDAP.get_values_len()、DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry()。

9.4.12 next_attributeファンクション

next_attribute()ファンクションを使用すると、結果セットの中から、指定したエントリの次の属性が取り出されます。

構文

FUNCTION next_attribute
(

ld       IN SESSION,
ldapentry      IN MESSAGE,
ber_elem IN BER_ELEMENT

)

RETURN VARCHAR2;

パラメータ

表9-37 NEXT_ATTRIBUTEファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

ldapentry

属性を参照する対象となるエントリです。first_entry()またはnext_entry()の戻り値と同一です。

ber_elem

エントリ内の読取り済の属性を記録するために使用されるBER_ELEMENTのハンドルです。

戻り値

表9-38 NEXT_ATTRIBUTEファンクションの戻り値

値

説明

VARCHAR2

(ファンクションの戻り値)

属性が存在する場合の戻り値はその属性の名前です。

例外

表9-39 NEXT_ATTRIBUTEファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したmsgハンドルが無効な場合に呼び出されます。

使用方法

エントリの様々な属性に対して処理を繰り返し行うには、first_attribute()のパラメータとして戻されたBER_ELEMENTのハンドルを、次のnext_attribute()のコールで使用する必要があります。また、next_attribute()のコールで戻された属性の名前を、get_values()またはget_values_len()のコールで使用すると、その属性の値を取得できます。

関連項目

DBMS_LDAP.first_attribute()、DBMS_LDAP.get_values()、DBMS_LDAP.get_values_len()、DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry()。

9.4.13 get_dnファンクション

get_dn()ファンクションを使用すると、結果セットの中から、指定したエントリのX.500識別名が取り出されます。

構文

FUNCTION get_dn
(

ld  IN SESSION,
ldapentrymsg IN MESSAGE

)

RETURN VARCHAR2;

パラメータ

表9-40 GET_DNファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

ldapentry

識別名が戻り値となるエントリです。

戻り値

表9-41 GET_DNファンクションの戻り値

値

説明

VARCHAR2

エントリのPL/SQL文字列でのX.500識別名です。

問題があった場合はNULLです。

例外

表9-42 GET_DNファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したmsgハンドルが無効な場合に呼び出されます。

get_dn_error

識別名を確認中に問題があった場合に呼び出されます。

使用方法

get_dn()ファンクションを使用すると、プログラム・ロジックが結果セット全体にわたって同一処理を反復する間に、エントリの識別名を取り出せます。また、この識別名をexplode_dn()への入力として使用すると、その識別名の個々の構成要素を取り出せます。

関連項目

DBMS_LDAP.explode_dn()。

9.4.14 get_valuesファンクション

get_values()ファンクションを使用すると、特定のエントリの特定の属性に関連する値をすべて取り出せます。

構文

FUNCTION get_values
(

ld   IN SESSION,
ldapentry IN MESSAGE,
attr IN VARCHAR2

)

RETURN STRING_COLLECTION;

パラメータ

表9-43 GET_VALUESファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

ldapentry

検索結果から戻されたエントリの有効なハンドルです。

attr

値を検索する対象となる属性の名前です。

戻り値

表9-44 GET_VALUESファンクションの戻り値

値

説明

STRING_COLLECTION

指定した属性のすべての値を含むPL/SQL文字列の集合です。

指定した属性に関連する値がない場合はNULLです。

例外

表9-45 GET_VALUESファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したエントリのハンドルが無効な場合に呼び出されます。

使用方法

get_values()ファンクションは、first_entry()またはnext_entry()のコールで最初のエントリのハンドルを取り出してからコールしてください。属性の名前は、事前に判明している場合もあれば、first_attribute()またはnext_attribute()のコールによって判明する場合もあります。get_values()ファンクションでは、取得する属性のデータ型は常に文字列とみなされます。バイナリ・データ型の取得には、get_values_len()を使用する必要があります。

関連項目

DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry()、DBMS_LDAP.count_values()、DBMS_LDAP.get_values_len()。

9.4.15 get_values_lenファンクション

get_values_len()ファンクションを使用すると、バイナリ構文を持つ属性の値を取り出せます。

構文

FUNCTION get_values_len
(

ld   IN SESSION,
ldapentry IN MESSAGE,
attr IN VARCHAR2

)

RETURN BINVAL_COLLECTION;

パラメータ

表9-46 GET_VALUES_LENファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

ldapentrymsg

検索結果から戻されたエントリの有効なハンドルです。

attr

値の検索対象となる属性の文字列名です。

戻り値

表9-47 GET_VALUES_LENファンクションの戻り値

値

説明

BINVAL_COLLECTION

指定した属性のすべての値を含むPL/SQL RAW型データの集合です。

指定した属性に関連する値がない場合はNULLです。

例外

表9-48 GET_VALUES_LENファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_message

受信したエントリのハンドルが無効な場合に呼び出されます。

使用方法

get_values_len()ファンクションは、first_entry()またはnext_entry()のコールでエントリのハンドルを取り出した後にのみコールできます。属性の名前は事前に判明している場合もあれば、first_attribute()またはnext_attribute()をコールして確認する場合もあります。このファンクションは、バイナリとバイナリ以外の両方の属性値の取出しに使用できます。

関連項目

DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry()、DBMS_LDAP.count_values_len()、DBMS_LDAP.get_values()。

9.4.16 delete_sファンクション

delete_s()ファンクションを使用すると、ディレクトリ情報ツリー内のリーフ・エントリを削除できます。

構文

FUNCTION delete_s
(

ld      IN SESSION,
entrydn IN VARCHAR2

)

RETURN PLS_INTEGER;

パラメータ

表9-49 DELETE_Sファンクションのパラメータ

パラメータ名

説明

ld

有効なLDAPセッションです。

entrydn

削除するエントリのX.500識別名です。

戻り値

表9-50 DELETE_Sファンクションの戻り値

値

説明

PLS_INTEGER

削除操作が正常終了した場合はDBMS_LDAP.SUCCESSです。その他の場合は例外が呼び出されます。

例外

表9-51 DELETE_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_entry_dn

エントリの識別名が無効な場合に呼び出されます。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

delete_s()ファンクションを使用すると、ディレクトリ情報ツリー内のリーフ・エントリのみを削除できます。リーフ・エントリとは、下位エントリを持たないエントリです。このファンクションは、リーフ以外のエントリの削除には使用できません。

関連項目

DBMS_LDAP.modrdn2_s()。

9.4.17 modrdn2_sファンクション

modrdn2_s()ファンクションを使用すると、エントリの相対識別名を変更できます。

構文

FUNCTION modrdn2_s
(

ld IN SESSION,
entrydn in VARCHAR2
newrdn in VARCHAR2
deleteoldrdn IN PLS_INTEGER

)

RETURN PLS_INTEGER;

パラメータ

表9-52 MODRDN2_Sファンクションのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

entrydn

エントリの識別名です(このエントリはディレクトリ情報ツリー内のリーフ・ノードです)。

newrdn

エントリの新しい相対識別名です。

deleteoldrdn

0(ゼロ)以外にした場合は、古い名前から引き継いだ属性値をエントリから削除する必要があることを示すブール値です。

戻り値

表9-53 MODRDN2_Sファンクションの戻り値

値

説明

PLS_INTEGER

操作が正常終了した場合はDBMS_LDAP.SUCCESSです。その他の場合は例外が呼び出されます。

例外

表9-54 MODRDN2_Sファンクションの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid_entry_dn

エントリの識別名が無効な場合に呼び出されます。

invalid_rdn

LDAP相対識別名が無効です。

invalid_deleteoldrdn

LDAP deleteoldrdnが無効です。

general_error

その他すべてのエラーに対応します。この例外に関連するエラー文字列で、エラーの詳細が説明されます。

使用方法

nodrdn2_s()ファンクションを使用すると、ディレクトリ情報ツリーのリーフ・ノードの名前を変更できます。認識の指標となる相対識別名のみが変更されます。LDAP v3規格では、このファンクションの使用は非推奨です。同じ目的を実現するrename_s()を使用してください。

関連項目

DBMS_LDAP.rename_s()。

9.4.18 err2stringファンクション

err2string()ファンクションを使用すると、LDAPエラー・コードを、APIの動作環境で使用されている各国語の文字列に変換できます。

構文

FUNCTION err2string
(

ldap_err IN PLS_INTEGER

)

RETURN VARCHAR2;

パラメータ

表9-55 ERR2STRINGファンクションのパラメータ

パラメータ

説明

ldap_err

いずれかのAPIコールから戻されたエラー番号です。

戻り値

表9-56 ERR2STRINGファンクションの戻り値

値

説明

VARCHAR2

各国語へ変換された文字列です。この文字列で、エラーの詳細が説明されます。

例外

err2string()では、例外は呼び出されません。

使用方法

このリリースでは、APIコールにエラーが発生した場合、例外処理メカニズムによって自動的にこのファンクションがコールされます。

9.4.19 create_mod_arrayファンクション

create_mod_array()ファンクションを使用すると、modify_s()ファンクションまたはadd_s()ファンクションを使用してエントリに適用される変更配列に、メモリーが割り当てられます。

構文

FUNCTION create_mod_array
(

num IN PLS_INTEGER

)

RETURN MOD_ARRAY;

パラメータ

表9-57 CREATE_MOD_ARRAYファンクションのパラメータ

パラメータ

説明

num

追加または変更する属性の数です。

戻り値

表9-58 CREATE_MOD_ARRAYファンクションの戻り値

値

説明

MOD_ARRAY

このデータ構造により、LDAP変更配列へのポインタが保持されます。

問題があった場合の戻り値はNULLです。

例外

create_mod_array()では、例外は呼び出されません。

使用方法

このファンクションは、DBMS_LDAP.add_sおよびDBMS_LDAP.modify_sを使用するための準備段階の1つです。add_sまたはmodify_sのコールが終了した後に、DBMS_LDAP.free_mod_arrayをコールしてメモリーを解放します。

関連項目

DBMS_LDAP.populate_mod_array()、DBMS_LDAP.modify_s()、DBMS_LDAP.add_s()およびDBMS_LDAP.free_mod_array()。

9.4.20 populate_mod_arrayプロシージャ(文字列バージョン)

追加操作または変更操作に、1組の属性情報を代入します。

構文

PROCEDURE populate_mod_array
(

modptr   IN DBMS_LDAP.MOD_ARRAY,
mod_op   IN PLS_INTEGER,
mod_type IN VARCHAR2,
modval   IN DBMS_LDAP.STRING_COLLECTION

);

パラメータ

表9-59 POPULATE_MOD_ARRAY(文字列バージョン)プロシージャのパラメータ

パラメータ

説明

modptr

このデータ構造により、LDAP変更配列へのポインタが保持されます。

mod_op

このフィールドで実行する変更のタイプ(MOD_ADD、MOD_DELETEまたはMOD_REPLACE)を指定します。

mod_type

このフィールドで、変更を適用する属性の型の名前を指定します。

modval

このフィールドで、追加、削除または置換する属性値を指定します。対象は文字列値のみです。

例外

表9-60 POPULATE_MOD_ARRAY(文字列バージョン)プロシージャの例外

例外

説明

invalid_mod_array

LDAP変更配列が無効です。

invalid_mod_option

LDAP変更オプションが無効です。

invalid_mod_type

LDAP変更型が無効です。

invalid_mod_value

LDAP変更値が無効です。

使用方法

このファンクションは、DBMS_LDAP.add_sおよびDBMS_LDAP.modify_sを使用するための準備段階の1つです。DBMS_LDAP.create_mod_arrayをコールした後に、このプロシージャをコールする必要があります。

関連項目

DBMS_LDAP.create_mod_array()、DBMS_LDAP.modify_s()、DBMS_LDAP.add_s()およびDBMS_LDAP.free_mod_array()。

9.4.21 populate_mod_arrayプロシージャ(バイナリ・バージョン)

追加操作または変更操作に、1組の属性情報を代入します。DBMS_LDAP.create_mod_array()をコールした後に、このプロシージャをコールします。

構文

PROCEDURE populate_mod_array
(

modptr   IN DBMS_LDAP.MOD_ARRAY,
mod_op   IN PLS_INTEGER,
mod_type IN VARCHAR2,
modbval  IN DBMS_LDAP.BERVAL_COLLECTION

);

パラメータ

表9-61 POPULATE_MOD_ARRAY(バイナリ・バージョン)プロシージャのパラメータ

パラメータ

説明

modptr

このデータ構造により、LDAP変更配列へのポインタが保持されます。

mod_op

このフィールドで実行する変更のタイプ(MOD_ADD、MOD_DELETEまたはMOD_REPLACE)を指定します。

mod_type

このフィールドで、変更を適用する属性の型の名前を指定します。

modbval

このフィールドで、追加、削除または置換する属性値を指定します。対象はバイナリ値のみです。

例外

表9-62 POPULATE_MOD_ARRAY(バイナリ・バージョン)プロシージャの例外

例外

説明

invalid_mod_array

LDAP変更配列が無効です。

invalid_mod_option

LDAP変更オプションが無効です。

invalid_mod_type

LDAP変更型が無効です。

invalid_mod_value

LDAP変更値が無効です。

使用方法

このファンクションは、DBMS_LDAP.add_sおよびDBMS_LDAP.modify_sを使用するための準備段階の1つです。DBMS_LDAP.create_mod_arrayをコールした後に、このプロシージャをコールします。

関連項目

DBMS_LDAP.create_mod_array()、DBMS_LDAP.modify_s()、DBMS_LDAP.add_s()およびDBMS_LDAP.free_mod_array()。

9.4.22 populate_mod_arrayプロシージャ(バイナリ・バージョン。BLOBデータ型を使用)

追加操作または変更操作に、1組の属性情報を代入します。DBMS_LDAP.create_mod_array()をコールした後に、このプロシージャをコールします。

構文

PROCEDURE populate_mod_array
(
modptr IN DBMS_LDAP.MOD_ARRAY,
mod_op IN PLS_INTEGER,
mod_type IN VARCHAR2,
modbval IN DBMS_LDAP.BLOB_COLLECTION
);

パラメータ

表9-63 POPULATE_MOD_ARRAY(バイナリ)のパラメータ

パラメータ

説明

modptr

このデータ構造により、LDAP変更配列へのポインタが保持されます。

mod_op

このフィールドで実行する変更のタイプ(MOD_ADD、MOD_DELETEまたはMOD_REPLACE)を指定します。

mod_type

このフィールドで、変更を適用する属性の型の名前を指定します。

modbval

このフィールドで、追加、削除または置換するバイナリ属性値を指定します。

例外

表9-64 POPULATE_MOD_ARRAY(バイナリ)の例外

例外

説明

invalid_mod_array

LDAP変更配列が無効です。

invalid_mod_option

LDAP変更オプションが無効です。

invalid_mod_type

LDAP変更型が無効です。

invalid_mod_value

LDAP変更値が無効です。

使用方法

このファンクションは、DBMS_LDAP.add_sおよびDBMS_LDAP.modify_sを使用するための準備段階の1つです。DBMS_LDAP.create_mod_arrayをコールした後に、このプロシージャをコールします。

関連項目

DBMS_LDAP.create_mod_array()、DBMS_LDAP.modify_s()、DBMS_LDAP.add_s()およびDBMS_LDAP.free_mod_array()。

9.4.23 get_values_blobファンクション

get_values_blob()ファンクションを使用すると、バイナリ構文を持つ属性のより大きな値を取り出せます。

構文

Syntax
FUNCTION get_values_blob
(
ld IN SESSION,
ldapentry IN MESSAGE,
attr IN VARCHAR2
)
RETURN BLOB_COLLECTION;

パラメータ

表9-65 GET_VALUES_BLOBのパラメータ

パラメータ

説明

ld

有効なLDAPセッション・ハンドルです。

ldapentrymsg

検索結果から戻されたエントリの有効なハンドルです。

attr

値の検索対象となる属性の文字列名です。

戻り値

表9-66 get_values_blobの戻り値

値

説明

BLOB_COLLECTION

指定した属性のすべての値を含むPL/SQL BLOB型データの集合です。

NULL

指定した属性に関連する値がありません。

例外

表9-67 get_values_blobの例外

例外

説明

invalid_session

セッション・ハンドルldが無効な場合に呼び出されます。

invalid message

受信したエントリのハンドルが無効な場合に呼び出されます。

使用方法

get_values_blob()ファンクションは、first_entry()またはnext_entry()のコールでエントリのハンドルを取り出してからコールしてください。属性の名前は、事前に判明している場合もあれば、first_attribute()またはnext_attribute()のコールによって判明する場合もあります。このファンクションは、バイナリの属性値および非バイナリの属性値の取出しに使用できます。

関連項目

DBMS_LDAP.first_entry()、DBMS_LDAP.next_entry()、DBMS_LDAP.count_values_blob()、DBMS_LDAP.get_values()。

9.4.24 count_values_blobファンクション

DBMS_LDAP.get_values_blob()によって戻された値の数をカウントします。

構文

FUNCTION count_values_blob
(
values IN DBMS_LDAP.BLOB_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表9-68 COUNT_VALUES_BLOBのパラメータ

パラメータ

説明

values

ラージ・バイナリ値の集合です。

戻り値

表9-69 COUNT_VALUES_BLOBの戻り値

値

説明

PLS_INTEGER

操作の成功または失敗を示します。

例外

count_values_blob()では、例外は呼び出されません。

関連項目

DBMS_LDAP.count_values()、DBMS_LDAP.get_values_blob()。

9.4.25 value_free_blobファンクション

DBMS_LDAP.get_values_blob()によって戻されたBLOB_COLLECTIONに関連付けられているメモリーを解放します。

構文

PROCEDURE value_free_blob
(
vals IN OUT DBMS_LDAP.BLOB_COLLECTION
);

パラメータ

表9-70 VALUE_FREE_BLOBのパラメータ

パラメータ

説明

vals

DBMS_LDAP.get_values_blob()によって戻されたラージ・バイナリ値の集合です。

例外

value_free_blob()では、例外は呼び出されません。

関連項目

DBMS_LDAP.get_values_blob()。

9.4.26 modify_sファンクション

既存のLDAPディレクトリ・エントリの同期変更を実行します。

構文

FUNCTION modify_s
(

ld      IN DBMS_LDAP.SESSION,
entrydn IN VARCHAR2,
modptr  IN DBMS_LDAP.MOD_ARRAY

)

RETURN PLS_INTEGER;

パラメータ

表9-71 MODIFY_Sファンクションのパラメータ

パラメータ

説明

ld

このパラメータは、DBMS_LDAP.init()のコールが正常終了した場合に戻されるLDAPセッションのハンドルです。

entrydn

このパラメータで、内容を変更するディレクトリ・エントリの名前を指定します。

modptr

このパラメータはLDAP変更構造体のハンドルで、DBMS_LDAP.create_mod_array()のコールが正常終了した場合の戻り値と同一です。

戻り値

表9-72 MODIFY_Sファンクションの戻り値

値

説明

PLS_INTEGER

変更操作の成功または失敗を示します。

例外

表9-73 MODIFY_Sファンクションの例外

例外

説明

invalid_session

LDAPセッションが無効です。

invalid_entry_dn

LDAPエントリ識別名が無効です。

invalid_mod_array

LDAP変更配列が無効です。

使用方法

このファンクションは、DBMS_LDAP.create_mod_array()およびDBMS_LDAP.populate_mod_array()のコールが正常終了した後にコールする必要があります。

関連項目

DBMS_LDAP.create_mod_array()、DBMS_LDAP.populate_mod_array()、DBMS_LDAP.add_s()およびDBMS_LDAP.free_mod_array()。

9.4.27 add_sファンクション

LDAPディレクトリに新規エントリを同期的に追加します。add_sをコールする前に、まずDBMS_LDAP.create_mod_array()とDBMS_LDAP.populate_mod_array()をコールする必要があります。

構文

FUNCTION add_s
(

ld      IN DBMS_LDAP.SESSION,
entrydn IN VARCHAR2,
modptr  IN DBMS_LDAP.MOD_ARRAY

)

RETURN PLS_INTEGER;

パラメータ

表9-74 ADD_Sファンクションのパラメータ

パラメータ

説明

ld

このパラメータはLDAPセッションのハンドルで、DBMS_LDAP.init()のコールが正常終了した場合の戻り値と同一です。

entrydn

このパラメータで、作成するディレクトリ・エントリの名前を指定します。

modptr

このパラメータはLDAP変更構造体のハンドルで、DBMS_LDAP.create_mod_array()のコールが正常終了した場合の戻り値と同一です。

戻り値

表9-75 ADD_Sファンクションの戻り値

値

説明

PLS_INTEGER

変更操作の成功または失敗を示します。

例外

表9-76 ADD_Sファンクションの例外

例外

説明

invalid_session

LDAPセッションが無効です。

invalid_entry_dn

LDAPエントリ識別名が無効です。

invalid_mod_array

LDAP変更配列が無効です。

使用方法

追加するエントリの親エントリは、ディレクトリ内にすでに存在している必要があります。このファンクションは、DBMS_LDAP.create_mod_array()およびDBMS_LDAP.populate_mod_array()のコールが正常終了した後にコールする必要があります。

関連項目

DBMS_LDAP.create_mod_array()、DBMS_LDAP.populate_mod_array()、DBMS_LDAP.modify_s()およびDBMS_LDAP.free_mod_array()。

9.4.28 free_mod_arrayプロシージャ

DBMS_LDAP.create_mod_array()によって割り当てられたメモリーを解放します。

構文

PROCEDURE free_mod_array
(

modptr IN DBMS_LDAP.MOD_ARRAY

);

パラメータ

表9-77 FREE_MOD_ARRAYプロシージャのパラメータ

パラメータ

説明

modptr

このパラメータは、DBMS_LDAP.create_mod_array()のコールが正常終了した場合に戻されるLDAP変更構造体のハンドルです。

例外

free_mod_arrayでは、例外は呼び出されません。

関連項目

DBMS_LDAP.populate_mod_array()、DBMS_LDAP.modify_s()、DBMS_LDAP.add_s()およびDBMS_LDAP.create_mod_array()。

9.4.29 count_valuesファンクション

DBMS_LDAP.get_values()によって戻された値の数をカウントします。

構文

FUNCTION count_values
(

values IN DBMS_LDAP.STRING_COLLECTION

)

RETURN PLS_INTEGER;

パラメータ

表9-78 COUNT_VALUESファンクションのパラメータ

パラメータ

説明

values

文字列値の集合です。

戻り値

表9-79 COUNT_VALUESファンクションの戻り値

値

説明

PLS_INTEGER

操作の成功または失敗を示します。

例外

count_valuesでは、例外は呼び出されません。

関連項目

DBMS_LDAP.count_values_len()、DBMS_LDAP.get_values()。

9.4.30 count_values_lenファンクション

DBMS_LDAP.get_values_len ()によって戻された値の数をカウントします。

構文

FUNCTION count_values_len
(

values IN DBMS_LDAP.BINVAL_COLLECTION

)

RETURN PLS_INTEGER;

パラメータ

表9-80 COUNT_VALUES_LENファンクションのパラメータ

パラメータ

説明

values

バイナリ値の集合です。

戻り値

表9-81 COUNT_VALUES_LENファンクションの戻り値

値

説明

PLS_INTEGER

操作の成功または失敗を示します。

例外

count_values_lenでは、例外は呼び出されません。

関連項目

DBMS_LDAP.count_values()、DBMS_LDAP.get_values_len()。

9.4.31 rename_sファンクション

LDAPエントリの名前を同期的に変更します。

構文

FUNCTION rename_s
(

ld           IN SESSION,
dn           IN VARCHAR2,
newrdn       IN VARCHAR2,
newparent    IN VARCHAR2,
deleteoldrdn IN PLS_INTEGER,
serverctrls  IN LDAPCONTROL,
clientctrls  IN LDAPCONTROL

)

RETURN PLS_INTEGER;

パラメータ

表9-82 RENAME_Sファンクションのパラメータ

パラメータ

説明

ld

このパラメータは、DBMS_LDAP.init()のコールが正常終了した場合に戻されるLDAPセッションのハンドルです。

dn

このパラメータで、名前を変更または移動するディレクトリ・エントリの名前を指定します。

newrdn

このパラメータで、新しい相対識別名を指定します。

newparent

このパラメータで、新しい親の識別名を指定します。

deleteoldrdn

このパラメータで、古い相対識別名を保持するかどうかを指定します。この値を1にすると、古い相対識別名が削除されます。

serverctrls

現在はサポートされていません。

clientctrls

現在はサポートされていません。

戻り値

表9-83 RENAME_Sファンクションの戻り値

値

説明

PLS_INTEGER

操作の成功または失敗を示します。

例外

表9-84 RENAME_Sファンクションの例外

例外

説明

invalid_session

LDAPセッションが無効です。

invalid_entry_dn

LDAP識別名が無効です。

invalid_rdn

LDAP相対識別名が無効です。

invalid_newparent

LDAPの新規の親が無効です。

invalid_deleteoldrdn

LDAP deleteoldrdnが無効です。

関連項目

DBMS_LDAP.modrdn2_s()。

9.4.32 explode_dnファンクション

識別名を個々の構成要素に分割します。

構文

FUNCTION explode_dn
(

dn      IN VARCHAR2,
notypes IN PLS_INTEGER

)

RETURN STRING_COLLECTION;

パラメータ

表9-85 EXPLODE_DNファンクションのパラメータ

パラメータ

説明

dn

このパラメータで、分割するディレクトリ・エントリの名前を指定します。

notypes

このパラメータで、属性タグを戻すかどうかを指定します。この値を0(ゼロ)以外にすると、属性タグは戻されません。

戻り値

表9-86 EXPLODE_DNファンクションの戻り値

値

説明

STRING_COLLECTION

文字列の配列です。識別名が分割できない場合はNULLが戻されます。

例外

表9-87 EXPLODE_DNファンクションの例外

例外

説明

invalid_entry_dn

LDAP識別名が無効です。

invalid_notypes

LDAP notypes値が無効です。

関連項目

DBMS_LDAP.get_dn()。

9.4.33 open_sslファンクション

すでに確立されているLDAP接続を介してSSL接続を確立します。

構文

FUNCTION open_ssl
(

ld              IN SESSION,
sslwrl          IN VARCHAR2,
sslwalletpasswd IN VARCHAR2,
sslauth         IN PLS_INTEGER

)

RETURN PLS_INTEGER;

パラメータ

表9-88 OPEN_SSLファンクションのパラメータ

パラメータ

説明

ld

このパラメータは、DBMS_LDAP.init()のコールが正常終了した場合に戻されるLDAPセッションのハンドルです。

sslwrl

このパラメータで、ウォレットの位置を指定します。書式はfile:pathです。サーバー、またはクライアントとサーバーのSSL接続の場合は必須です。

sslwalletpasswd

このパラメータで、ウォレットのパスワードを指定します。サーバー、またはクライアントとサーバーのSSL接続の場合は必須です。

sslauth

このパラメータで、SSL認証モードを指定します。(認証なしの場合は1、一方向認証の場合は2、双方向認証の場合は3です)。

戻り値

表9-89 OPEN_SSLファンクションの戻り値

値

説明

PLS_INTEGER

操作の成功または失敗を示します。

例外

表9-90 OPEN_SSLファンクションの例外

例外

説明

invalid_session

LDAPセッションが無効です。

invalid_ssl_wallet_loc

LDAP SSLのウォレットの場所が無効です。

invalid_ssl_wallet_passwd

LDAP SSLのウォレットのパスワードが無効です。

invalid_ssl_auth_mode

LDAP SSL認証モードが無効です。

使用方法

有効なLDAPセッションを取得するには、まずDBMS_LDAP.init()をコールする必要があります。

関連項目

DBMS_LDAP.init()。

9.4.34 msgfreeファンクション

同期検索ファンクションによって戻されたメッセージ・ハンドルに対応付けられている結果セットを解放します。

構文

FUNCTION msgfree
(

res             IN MESSAGE

)

RETURN PLS_INTEGER;

パラメータ

表9-91 MSGFREEファンクションのパラメータ

パラメータ

説明

res

同期検索ルーチンのいずれかをコールして取得されるメッセージ・ハンドルです。

戻り値

表9-92 MSGFREEの戻り値

値

説明

PLS_INTEGER

結果セット内にある最後のメッセージのタイプを示します。

このファンクションの戻り値は、次の値のいずれかになります。

- DBMS_LDAP.LDAP_RES_BIND

- DBMS_LDAP.LDAP_RES_SEARCH_ENTRY

- DBMS_LDAP.LDAP_RES_SEARCH_REFERENCE

- DBMS_LDAP.LDAP_RES_SEARCH_RESULT

- DBMS_LDAP.LDAP_RES_MODIFY

- DBMS_LDAP.LDAP_RES_ADD

- DBMS_LDAP.LDAP_RES_DELETE

- DBMS_LDAP.LDAP_RES_MODDN

- DBMS_LDAP.LDAP_RES_COMPARE

- DBMS_LDAP.LDAP_RES_EXTENDED

例外

msgfreeでは、例外は呼び出されません。

関連項目

DBMS_LDAP.search_s()、DBMS_LDAP.search_st()。

9.4.35 ber_freeファンクション

BER ELEMENTへのハンドルに対応付けられたメモリーを解放します。

構文

FUNCTION ber_free
(

ber_elem IN BER_ELEMENT,
freebuf  IN PLS_INTEGER

)

パラメータ

表9-93 BER_FREEファンクションのパラメータ

パラメータ

説明

ber_elem

BER ELEMENTへのハンドルです。

freebuf

DBMS_LDAP.first_attribute()から戻されたBER ELEMENTを解放している間、このフラグの値は0(ゼロ)であることが必要です。それ以外の場合、このフラグの値は1であることが必要です。

このパラメータのデフォルト値は0(ゼロ)です。

戻り値

ber_freeでは、値は戻されません。

例外

ber_freeでは、例外は呼び出されません。

関連項目

DBMS_LDAP.first_attribute()、DBMS_LDAP.next_attribute()。

9.4.36 nls_convert_to_utf8ファンクション

nls_convert_to_utf8ファンクションでは、データベース・キャラクタ・セットのデータを含む入力文字列をUTF-8キャラクタ・セットのデータに変換して戻します。

構文

Function nls_convert_to_utf8
(
data_local IN VARCHAR2
)
RETURN VARCHAR2;

パラメータ

表9-94 nls_convert_to_utf8のパラメータ

パラメータ

説明

data_local

データベース・キャラクタ・セットのデータを指定します。

戻り値

表9-95 nls_convert_to_utf8の戻り値

値

説明

VARCHAR2

UTF-8キャラクタ・セットのデータ文字列です。

使用方法

DBMS_LDAPパッケージのファンクションは、UTF8_CONVERSIONパッケージ変数にFALSEが設定されている場合、入力データがUTF-8キャラクタ・セットのデータであると想定します。nls_convert_to_utf8()ファンクションは、データベース・キャラクタ・セットのデータをUTF-8キャラクタ・セットのデータに変換します。

DBMS_LDAPパッケージのUTF8_CONVERSIONパッケージ変数がTRUEに設定されている場合、DBMS_LDAPパッケージのファンクションでは、入力データはデータベース・キャラクタ・セットのデータであると想定します。

関連項目

DBMS_LDAP.nls_convert_from_utf8()、DBMS_LDAP.nls_get_dbcharset_name()。

9.4.37 nls_convert_to_utf8ファンクション

nls_convert_to_utf8()ファンクションでは、データベース・キャラクタ・セットのデータを含む入力文字列のコレクションをUTF-8キャラクタ・セットのデータに変換します。その後、変換したデータを戻します。

構文

Function nls_convert_to_utf8
(
data_local IN STRING_COLLECTION
)
RETURN STRING_COLLECTION;

パラメータ

表9-96 nls_convert_to_utf8のパラメータ

パラメータ

説明

data_local

データベース・キャラクタ・セットのデータを含む文字列のコレクションです。

戻り値

表9-97 nls_convert_to_utf8の戻り値

値

説明

STRING_COLLECTION

UTF-8キャラクタ・セットのデータを含む文字列のコレクションです。

使用方法

DBMS_LDAPパッケージのファンクションは、UTF8_CONVERSIONパッケージ変数にFALSEが設定されている場合、入力データがUTF-8キャラクタ・セットであると想定します。nls_convert_to_utf8()ファンクションは、入力データをデータベース・キャラクタ・セットからUTF-8キャラクタ・セットに変換します。

DBMS_LDAPパッケージのUTF8_CONVERSIONパッケージ変数がTRUEに設定されている場合、DBMS_LDAPパッケージのファンクションでは、入力データはデータベース・キャラクタ・セットであると想定します。

関連項目

DBMS_LDAP.nls_convert_from_utf8()、DBMS_LDAP.nls_get_dbcharset_name()。

9.4.38 nls_convert_from_utf8ファンクション

nls_convert_from_utf8()ファンクションでは、UTF-8キャラクタ・セットのデータを含む入力文字列をデータベース・キャラクタ・セットのデータに変換します。その後、このデータを戻します。

構文

Function nls_convert_from_utf8
(
data_utf8 IN VARCHAR2
)
RETURN VARCHAR2;

パラメータ

表9-98 nls_convert_from_utf8のパラメータ

パラメータ

説明

data_utf8

UTF-8キャラクタ・セットのデータを指定します。

戻り値

表9-99 nls_convert_from_utf8の戻り値

値

説明

VARCHAR2

データベース・キャラクタ・セットのデータ文字列です。

使用方法

DBMS_LDAPパッケージのファンクションは、UTF8_CONVERSIONパッケージ変数にFALSEが設定されている場合、UTF-8キャラクタ・セット・データを戻します。nls_convert_from_utf8()ファンクションは、出力データをUTF-8キャラクタ・セットからデータベース・キャラクタ・セットに変換します。

DBMS_LDAPパッケージのUTF8_CONVERSIONパッケージ変数がTRUEに設定されている場合、DBMS_LDAPパッケージのファンクションはデータベース・キャラクタ・セットのデータを戻します。

関連項目

DBMS_LDAP.nls_convert_to_utf8()、DBMS_LDAP.nls_get_dbcharset_name()。

9.4.39 nls_convert_from_utf8ファンクション

nls_convert_from_utf8()ファンクションでは、UTF-8キャラクタ・セットのデータを含む入力文字列のコレクションをデータベース・キャラクタ・セットのデータに変換します。その後、このデータを戻します。

構文

Function nls_convert_from_utf8
(
data_utf8 IN STRING_COLLECTION
)
RETURN STRING_COLLECTION;

パラメータ

表9-100 nls_convert_from_utf8のパラメータ

パラメータ

説明

data_utf8

UTF-8キャラクタ・セットのデータを含む文字列のコレクションです。

戻り値

表9-101 nls_convert_from_utf8の戻り値

値

説明

VARCHAR2

データベース・キャラクタ・セットのデータを含む文字列のコレクションです。

使用方法

DBMS_LDAPパッケージのファンクションは、UTF8_CONVERSIONパッケージ変数がFALSEに設定されている場合、UTF-8キャラクタ・セット・データを戻します。nls_convert_from_utf8()は、出力データをUTF-8キャラクタ・セットからデータベース・キャラクタ・セットに変換します。DBMS_LDAPパッケージのUTF8_CONVERSIONパッケージ変数がTRUEに設定されている場合、DBMS_LDAPパッケージのファンクションはデータベース・キャラクタ・セットのデータを戻します。

関連項目

DBMS_LDAP.nls_convert_to_utf8()、DBMS_LDAP.nls_get_dbcharset_name()。

9.4.40 nls_get_dbcharset_nameファンクション

nls_get_dbcharset_name()ファンクションでは、データベース・キャラクタ・セット名を含む文字列を戻します。

構文

Function nls_get_dbcharset_name

RETURN VARCHAR2;

パラメータ

ありません。

戻り値

表9-102 nls_get_dbcharset_nameの戻り値

値

説明

VARCHAR2

データベース・キャラクタ・セット名を含む文字列です。

関連項目

DBMS_LDAP.nls_convert_to_utf8()、DBMS_LDAP.nls_convert_from_utf8()。

10 Java APIリファレンス

Oracle Internet Directoryの標準的なJava APIは、Java Naming and Directory Interface(JNDI)として入手できます。JNDIは次のリンクで提供されています。

http://www.oracle.com/technetwork/java/jndi/index.html

標準APIに対するOracleの拡張機能の詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Internet Directory』を参照してください。

11 DBMS_LDAP_UTL PL/SQLリファレンス

Oracleの拡張機能のユーティリティ・ファンクションが含まれているDBMS_LDAP_UTLパッケージに関するリファレンス情報を示します。この章では、次の項目について説明します。

- 第11.1項「サブプログラムの概要」

- 第11.2項「サブプログラム」

- 第11.3項「ファンクション・リターン・コードの概要」

- 第11.4項「データ型の概要」

11.1 サブプログラムの概要

表11-1 DBMS_LDAP_UTLのユーザー関連サブプログラム

ファンクションまたはプロシージャ

用途

authenticate_userファンクション

Lightweight Directory Access Protocol(LDAP)サーバーに対してユーザーを認証します。

create_user_handleファンクション

ユーザー・ハンドルを作成します。

set_user_handle_propertiesファンクション

指定したプロパティをユーザー・ハンドルに関連付けます。

get_user_propertiesファンクション

LDAPサーバーからユーザー・プロパティを取得します。

set_user_propertiesファンクション

ユーザーのプロパティを変更します。

get_user_extended_propertiesファンクション

ユーザーの拡張プロパティを取得します。

get_user_dnファンクション

ユーザーの識別名を取得します。

check_group_membershipファンクション

ユーザーが、指定されたグループのメンバーであるかどうかをチェックします。

locate_subscriber_for_userファンクション

指定したユーザーのサブスクライバを取得します。

get_group_membershipファンクション

ユーザーがメンバーとなっているグループのリストを取得します。

表11-2 DBMS_LDAP_UTLのグループ関連サブプログラム

ファンクションまたはプロシージャ

用途

create_group_handleファンクション

グループ・ハンドルを作成します。

set_group_handle_propertiesファンクション

指定したプロパティをグループ・ハンドルに関連付けます。

get_group_propertiesファンクション

LDAPサーバーからグループ・プロパティを取得します。

get_group_dnファンクション

グループの識別名を取得します。

表11-3 DBMS_LDAP_UTLのサブスクライバ関連サブプログラム

ファンクションまたはプロシージャ

用途

create_subscriber_handleファンクション

サブスクライバ・ハンドルを作成します。

get_subscriber_propertiesファンクション

LDAPサーバーからサブスクライバ・プロパティを取得します。

get_subscriber_dnファンクション

サブスクライバの識別名を取得します。

表11-4 DBMS_LDAP_UTLのその他のサブプログラム

ファンクションまたはプロシージャ

用途

normalize_dn_with_caseファンクション

識別名の文字列を正規化します。

get_property_namesファンクション

PROPERTY_SETのプロパティ名のリストを取得します。

get_property_valuesファンクション

プロパティ名の値リストを取得します。

get_property_values_blobファンクション

プロパティ名のラージ・バイナリ値のリストを取得します。

property_value_free_blobプロシージャ

DBMS_LDAP_UTL.get_property_values_blob()によって戻されたBLOB_COLLECTIONに関連付けられているメモリーを解放します。

get_property_values_lenファンクション

プロパティ名のバイナリ値のリストを取得します。

free_propertyset_collectionプロシージャ

PROPERTY_SET_COLLECTIONを解放します。

create_mod_propertysetファンクション

MOD_PROPERTY_SETを作成します。

populate_mod_propertysetファンクション

MOD_PROPERTY_SET構造体に移入します。

free_mod_propertysetプロシージャ

MOD_PROPERTY_SETを解放します。

free_handleプロシージャ

ハンドルを解放します。

check_interface_versionファンクション

インタフェースのバージョンに関するサポートをチェックします。

11.2 サブプログラム

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

- 第11.2.1項「ユーザー関連サブプログラム」

- 第11.2.2項「グループ関連サブプログラム」

- 第11.2.3項「サブスクライバ関連サブプログラム」

- 第11.2.4項「プロパティ関連サブプログラム」

- 第11.2.5項「その他のサブプログラム」

11.2.1 ユーザー関連サブプログラム

ユーザーはDBMS_LDAP_UTL.HANDLEデータ型で表現されます。適切なサブスクライバ・ハンドルの作成に加え、識別名、GUIDまたは単純な名前を使用してユーザー・ハンドルを作成できます。単純な名前を使用すると、ルートのOracleコンテキストおよびサブスクライバのOracleコンテキストの追加情報がユーザーの識別に使用されます。次の例は、ユーザー・ハンドルの作成方法を示しています。

retval := DBMS_LDAP_UTL.create_user_handle(
user_handle,
DBMS_LDAP_UTL.TYPE_DN,
"cn=user1,cn=users,o=example,dc=com"
);

ユーザー・ハンドルは、適切なサブスクライバ・ハンドルに関連付ける必要があります。たとえば、subscriber_handleがo=example,dc=comの場合、サブスクライバ・ハンドルを次の方法で関連付けることができます。

retval := DBMS_LDAP_UTL.set_user_handle_properties(
user_handle,
DBMS_LDAP_UTL.SUBSCRIBER_HANDLE,
subscriber_handle
);

ユーザー・ハンドルの一般的な用途としては、ユーザー・プロパティの設定と取得、ユーザーの認証などがあります。次に、ユーザーを認証するハンドルを示します。

retval := DBMS_LDAP_UTL.authenticate_user(
my_session
user_handle
DBMS_LDAP_UTL.AUTH_SIMPLE,
"welcome"
NULL
);

この例では、ユーザーはクリアテキストのパスワードwelcomeを使用して認証されます。

次に、ユーザーの電話番号を取得するハンドルを示します。

--my_attrs is of type DBMS_LDAP.STRING_COLLECTION
my_attrs(1) :='telephonenumber';
retval := DBMS_LDAP_UTL.get_user_properties(
my_session,
my_attrs,
DBMS_LDAP_UTL.ENTRY_PROPERTIES,
my_pset_coll
);

11.2.1.1 authenticate_userファンクション

authenticate_user()ファンクションでは、Oracle Internet Directoryに対してユーザーを認証します。

構文

FUNCTION authenticate_user
(
ld IN SESSION,
user_handle IN HANDLE,
auth_type IN PLS_INTEGER,
credentials IN VARCHAR2,
binary_credentials IN RAW
)
RETURN PLS_INTEGER;

パラメータ

表11-5 authenticate_userファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

auth_type

PLS_INTEGER

認証のタイプ。有効な値はDBMS_LDAP_UTL.AUTH_SIMPLEのみです。

credentials

VARCHAR2

ユーザー資格証明。

binary_credentials

RAW

バイナリ資格証明。このパラメータはオプションです。デフォルトでNULLにできます。

戻り値

表11-6 authenticate_userファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

認証に失敗しました。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.MULTIPLE_USER_ENTRIES

ユーザーが複数の識別名エントリを持ちます。

DBMS_LDAP_UTL.INVALID_SUBSCRIBER_ORCL_CTX

サブスクライバのOracleコンテキストが無効です。

DBMS_LDAP_UTL.NO_SUCH_SUBSCRIBER

サブスクライバが存在しません。

DBMS_LDAP_UTL.MULTIPLE_SUBSCRIBER_ENTRIES

サブスクライバが複数の識別名エントリを持ちます。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.ACCT_TOTALLY_LOCKED_EXCP

ユーザー・アカウントがロックされています。

DBMS_LDAP_UTL.AUTH_PASSWD_CHANGE_WARN

この戻り値は非推奨です。

DBMS_LDAP_UTL.AUTH_FAILURE_EXCP

認証に失敗しました。

DBMS_LDAP_UTL.PWD_EXPIRED_EXCP

ユーザー・パスワードが期限切れです。

DBMS_LDAP_UTL.PWD_GRACELOGIN_WARN

ユーザーの猶予期間ログインです。

DBMS_LDAPエラー・コード

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.create_user_handle()。

11.2.1.2 create_user_handleファンクション

create_user_handle()ファンクションでは、ユーザー・ハンドルを作成します。

構文

FUNCTION create_user_handle
(
user_hd OUT HANDLE,
user_type IN PLS_INTEGER,
user_id IN VARCHAR2,
)
RETURN PLS_INTEGER;

パラメータ

表11-7 CREATE_USER_HANDLEファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

user_hd

HANDLE

ユーザーのハンドルへのポインタです。

user_type

PLS_INTEGER

渡されるユーザーIDのタイプ。この引数に有効な値は、次のとおりです。

- DBMS_LDAP_UTL.TYPE_DN

- DBMS_LDAP_UTL.TYPE_GUID

- DBMS_LDAP_UTL.TYPE_NICKNAME

user_id

VARCHAR2

ユーザー・エントリを表すユーザーIDです。

戻り値

表11-8 CREATE_USER_HANDLEファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

関連項目

DBMS_LDAP_UTL.get_user_properties()、DBMS_LDAP_UTL.set_user_handle_properties()。

11.2.1.3 set_user_handle_propertiesファンクション

set_user_handle_properties()ファンクションでは、ユーザー・ハンドルのプロパティを構成します。

構文

FUNCTION set_user_handle_properties
(
user_hd IN HANDLE,
property_type IN PLS_INTEGER,
property IN HANDLE
)
RETURN PLS_INTEGER;

パラメータ

表11-9 SET_USER_HANDLE_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

user_hd

HANDLE

ユーザーのハンドルへのポインタです。

property_type

PLS_INTEGER

渡されるプロパティのタイプ。この引数に有効な値はDBMS_LDAP_UTL.SUBSCRIBER_HANDLEです。

property

HANDLE

ユーザー・エントリを記述するプロパティです。

戻り値

表11-10 SET_USER_HANDLE_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.RESET_HANDLE

コール元が既存のハンドル・プロパティをリセットしようとした場合の戻り値です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

使用方法

ユーザー・ハンドルが、TYPE_DNまたはTYPE_GUIDのユーザー・タイプで作成されている場合は、サブスクライバ・ハンドルをユーザー・ハンドルのプロパティに設定する必要はありません。

関連項目

DBMS_LDAP_UTL.get_user_properties()。

11.2.1.4 get_user_propertiesファンクション

get_user_properties()ファンクションでは、ユーザー・プロパティを取得します。

構文

FUNCTION get_user_properties
(
ld IN SESSION,
user_handle IN HANDLE,
attrs IN STRING_COLLECTION,
ptype IN PLS_INTEGER,
ret_pset_coll OUT PROPERTY_SET_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-11 GET_USER_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

attrs

STRING_COLLECTION

取得するユーザー属性のリストです。

ptype

PLS_INTEGER

戻すプロパティのタイプ。有効な値は次のとおりです。

- DBMS_LDAP_UTL.ENTRY_PROPERTIES

- DBMS_LDAP_UTL.NICKNAME_PROPERTY

ret-pset_collection

PROPERTY_SET_COLLECTION

コール元がリクエストした属性に含まれているユーザーの詳細です。

戻り値

表11-12 GET_USER_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.MULTIPLE_USER_ENTRIES

ユーザーが複数の識別名エントリを持ちます。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションには、次の要件があります。

- 有効なLDAPセッション・ハンドル。これはDBMS_LDAP.init()ファンクションで取得する必要があります。

- ユーザーのタイプがDBMS_LDAP_UTL.TYPE_NICKNAMEの場合は、グループ・ハンドルのプロパティに有効なサブスクライバ・ハンドルの設定が必要です。

このファンクションは、NULLのサブスクライバ・ハンドルをデフォルト・サブスクライバとして識別しません。デフォルト・サブスクライバは、引数にNULLのsubscriber_idが渡されるDBMS_LDAP_UTL.create_subscriber_handle()で取得できます。

グループ・タイプがDBMS_LDAP_UTL.TYPE_GUIDまたはDBMS_LDAP_UTL.TYPE_DNの場合は、サブスクライバ・ハンドルをユーザー・ハンドルのプロパティに設定する必要はありません。サブスクライバ・ハンドルが設定されている場合、サブスクライバ・ハンドルは無視されます。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.create_user_handle()。

11.2.1.5 set_user_propertiesファンクション

set_user_properties()ファンクションでは、ユーザーのプロパティを変更します。

構文

FUNCTION set_user_properties
(
ld IN SESSION,
user_handle IN HANDLE,
pset_type IN PLS_INTEGER,
mod_pset IN PROPERTY_SET,
mod_op IN PLS_INTEGER
)
RETURN PLS_INTEGER;

パラメータ

表11-13 SET_USER_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

pset_type

PLS_INTEGER

変更するプロパティ・セットのタイプ。有効な値はENTRY_PROPERTIESです。

mod_pset

PROPERTY_SET

プロパティ・セットに対して実行する変更操作が含まれているデータ構造です。

mod_op

PLS_INTEGER

プロパティ・セットに対して実行する変更操作のタイプ。有効な値は次のとおりです。

- ADD_PROPERTYSET

- MODIFY_PROPERTYSET

- DELETE_PROPERTYSET

戻り値

表11-14 SET_USER_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.MULTIPLE_USER_ENTRIES

ユーザーが複数の識別名エントリを持ちます。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.PWD_MIN_LENGTH_ERROR

パスワードの長さが最低限の長さに達していません。

DBMS_LDAP_UTL.PWD_NUMERIC_ERROR

パスワードに数字を含める必要があります。

DBMS_LDAP_UTL.PWD_NULL_ERROR

パスワードはNULLにできません。

DBMS_LDAP_UTL.PWD_INHISTORY_ERROR

置換したパスワードと同じパスワードを指定することはできません。

DBMS_LDAP_UTL.PWD_ILLEGALVALUE_ERROR

パスワードに無効な文字が含まれています。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAPサーバーによるLDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.get_user_properties()。

11.2.1.6 get_user_extended_propertiesファンクション

get_user_extended_properties()ファンクションでは、ユーザーの拡張プロパティを取得します。

構文

FUNCTION get_user_extended_properties
(
ld IN SESSION,
user_handle IN HANDLE,
attrs IN STRING_COLLECTION
ptype IN PLS_INTEGER,
filter IN VARCHAR2,
rep_pset_coll OUT PROPERTY_SET_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-15 GET_USER_EXTENDED_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

attrs

STRING_COLLECTION

ユーザーに対してフェッチする属性のリストです。

ptype

PLS_INTEGER

戻すプロパティのタイプ。有効な値はDBMS_LDAP_UTL.EXTPROPTYPE_RADです。

filter

VARCHAR2

ファンクションで戻されたユーザー・プロパティをさらに明確にするためのLDAPフィルタです。

ret_pset_collection

PROPERTY_SET_COLLECTION

コール元がリクエストした属性が含まれているユーザーの詳細です。

戻り値

表11-16 GET_USER_EXTENDED_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.MULTIPLE_USER_ENTRIES

ユーザーが複数の識別名エントリを持ちます。

USER_PROPERTY_NOT_FOUND

ユーザーの拡張プロパティが存在しません。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.get_user_properties()。

11.2.1.7 get_user_dnファンクション

get_user_dn()ファンクションでは、ユーザーの識別名を戻します。

構文

FUNCTION get_user_dn
(
ld IN SESSION,
user_handle IN HANDLE,
dn OUT VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-17 GET_USER_DNファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

dn

VARCHAR2

ユーザーの識別名です。

戻り値

表11-18 GET_USER_DNファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

認証に失敗しました。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.MULTIPLE_USER_ENTRIES

ユーザーが複数の識別名エントリを持ちます。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAP error codes

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()。

11.2.1.8 check_group_membershipファンクション

check_group_membership()ファンクションでは、ユーザーがグループに属しているかどうかをチェックします。

構文

FUNCTION check_group_membership
(
ld IN SESSION,
user_handle IN HANDLE,
group_handle IN HANDLE,
nested IN PLS_INTEGER
)
RETURN PLS_INTEGER;

パラメータ

表11-19 CHECK_GROUP_MEMBERSHIPファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

group_handle

HANDLE

グループ・ハンドルです。

nested

PLS_INTEGER

ユーザーがグループ内で保持しているメンバーシップのタイプ。有効な値は次のとおりです。

- DBMS_LDAP_UTL.NESTED_MEMBERSHIP

- DBMS_LDAP_UTL.DIRECT_MEMBERSHIP

戻り値

表11-20 CHECK_GROUP_MEMBERSHIPファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

ユーザーがメンバーである場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_GROUP_MEMBERSHIP

ユーザーがメンバーでない場合の戻り値です。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.get_group_membership()。

11.2.1.9 locate_subscriber_for_userファンクション

locate_subscriber_for_user()ファンクションでは、指定したユーザーのサブスクライバを取得し、そのハンドルを戻します。

構文

FUNCTION locate_subscriber_for_user
(
ld IN SESSION,
user_handle IN HANDLE,
subscriber_handle OUT HANDLE
)
RETURN PLS_INTEGER;

パラメータ

表11-21 LOCATE_SUBSCRIBER_FOR_USERファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

subscriber_handle

HANDLE

サブスクライバ・ハンドルです。

戻り値

表11-22 LOCATE SUBSCRIBER FOR USERファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.NO_SUCH_SUBSCRIBER

サブスクライバが存在しません。

DBMS_LDAP_UTL.MULTIPLE_SUBSCRIBER_ENTRIES

指定したサブスクライバに対して、複数のサブスクライバ識別名エントリがディレクトリに存在します。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.MULTIPLE_USER_ENTRIES

指定したユーザーに対して、複数のユーザー識別名エントリがディレクトリに存在します。

DBMS_LDAP_UTL.SUBSCRIBER_NOT_FOUND

指定したユーザーのサブスクライバの位置を特定できません。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.ACCT_TOTALLY_LOCKED_EXCP

ユーザー・アカウントがロックされています。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAPサーバーによるLDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.create_user_handle()。

11.2.1.10 get_group_membershipファンクション

get_group_membership()ファンクションでは、ユーザーがメンバーになっているグループのリストを戻します。

構文

FUNCTION get_group_membership
(
user_handle IN HANDLE,
nested IN PLS_INTEGER,
attr_list IN STRING_COLLECTION,
ret_groups OUT PROPERTY_SET_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-23 GET_GROUP_MEMBERSHIPファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

user_handle

HANDLE

ユーザー・ハンドルです。

nested

PLS_INTEGER

ユーザーがグループ内で保持しているメンバーシップのタイプ。有効な値は次のとおりです。

- DBMS_LDAP_UTL.NESTED_MEMBERSHIP

- DBMS_LDAP_UTL.DIRECT_MEMBERSHIP

attr_list

STRING_COLLECTION

戻される属性のリストです。

ret_groups

PROPERTY_SET_COLLECTION

グループ・エントリの配列へのポインタを指すポインタです。

戻り値

表11-24 GET_GROUP_MEMBERSHIPファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()。

11.2.2 グループ関連サブプログラム

グループは、DBMS_LDAP_UTL.HANDLEデータ型を使用して表されます。グループ・ハンドルは、有効なグループ・エントリを表します。適切なサブスクライバ・ハンドルの作成に加え、識別名、GUIDまたは単純な名前を使用してグループ・ハンドルを作成できます。単純な名前を使用すると、ルートのOracleコンテキストおよびサブスクライバのOracleコンテキストの追加情報がグループの識別に使用されます。次に、グループ・ハンドルの作成例を示します。

retval := DBMS_LDAP_UTL.create_group_handle(
group_handle,
DBMS_LDAP_UTL.TYPE_DN,
"cn=group1,cn=Groups,o=example,dc=com"
);

このグループ・ハンドルを、適切なサブスクライバ・ハンドルに関連付ける必要があります。たとえば、o=example,dc=comを表すサブスクライバ・ハンドルsubscriber_handleの場合、サブスクライバ・ハンドルは次の方法で関連付けることができます。

retval := DBMS_LDAP_UTL.set_group_handle_properties(
group_handle,
DBMS_LDAP_UTL.SUBSCRIBER_HANDLE,
subscriber_handle
);

グループ・ハンドルの使用例としては、グループ・プロパティの取得があります。次に例を示します。

my_attrs is of type DBMS_LDAP.STRING_COLLECTION
my_attrs(1) :='uniquemember';
retval := DBMS_LDAP_UTL.get_group_properties(
my_session,
my_attrs,
DBMS_LDAP_UTL.ENTRY_PROPERTIES,
my_pset_coll
);

グループ関連サブプログラムは、メンバーシップに関連する機能もサポートしています。DBMS_LDAP_UTL.check_group_membership()ファンクションを使用すると、あるユーザー・ハンドルがグループのダイレクト・メンバーであるか、ネストされたメンバーであるかを確認できます。次に例を示します。

retval := DBMS_LDAP_UTL.check_group_membership(
session,
user_handle,
group_handle,
DBMS_LDAP_UTL.DIRECT_MEMBERSHIP

また、DBMS_LDAP_UTL.get_group_membership()ファンクションを使用して、特定のグループが属しているグループのリストを取得することもできます。次に例を示します。

my_attrs is of type DBMS_LDAP.STRING_COLLECTION
my_attrs(1) :='cn';
retval := DBMS_LDAP_UTL.get_group_membership(
my_session,
user_handle,
DBMS_LDAP_UTL.DIRECT_MEMBERSHIP,
my_attrs
my_pset_coll
);

11.2.2.1 create_group_handleファンクション

create_group_handle()ファンクションでは、グループ・ハンドルを作成します。

構文

FUNCTION create_group_handle
(
group_hd OUT HANDLE,
group_type IN PLS_INTEGER,
group_id IN VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-25 CREATE_GROUP_HANDLEファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

group_hd

HANDLE

グループのハンドルへのポインタです。

group_type

PLS_INTEGER

渡されるグループIDのタイプ。この引数に有効な値は、次のとおりです。

- DBMS_LDAP_UTL.TYPE_DN

- DBMS_LDAP_UTL.TYPE_GUID

- DBMS_LDAP_UTL.TYPE_NICKNAME

group_id

VARCHAR2

グループ・エントリを表すグループIDです。

戻り値

表11-26 CREATE_GROUP_HANDLEファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

関連項目

DBMS_LDAP_UTL.get_group_properties()、DBMS_LDAP_UTL.set_group_handle_properties()。

11.2.2.2 set_group_handle_propertiesファンクション

set_group_handle_properties()ファンクションでは、グループ・ハンドルのプロパティを構成します。

構文

FUNCTION set_group_handle_properties
(
group_hd IN HANDLE,
property_type IN PLS_INTEGER,
property IN HANDLE
)
RETURN PLS_INTEGER;

パラメータ

表11-27 SET_GROUP_HANDLE_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

group_hd

HANDLE

グループのハンドルへのポインタです。

property_type

PLS_INTEGER

渡されるプロパティのタイプ。この引数に有効な値はDBMS_LDAP_UTL.GROUP_HANDLEです。

property

HANDLE

グループ・エントリを記述するプロパティです。

戻り値

表11-28 SET_GROUP_HANDLE_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.RESET_HANDLE

コール元が既存のハンドル・プロパティをリセットしようとした場合の戻り値です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

使用方法

グループ・ハンドルが、TYPE_DNまたはTYPE_GUIDのグループ・タイプで作成されている場合は、サブスクライバ・ハンドルをグループ・ハンドルのプロパティに設定する必要はありません。

関連項目

DBMS_LDAP_UTL.get_group_properties()。

11.2.2.3 get_group_propertiesファンクション

get_group_properties()ファンクションでは、グループ・プロパティを取得します。

構文

FUNCTION get_group_properties
(
ld IN SESSION,
group_handle IN HANDLE,
attrs IN STRING_COLLECTION,
ptype IN PLS_INTEGER,
ret_pset_coll OUT PROPERTY_SET_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-29 GET_GROUP_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

group_handle

HANDLE

グループ・ハンドルです。

attrs

STRING_COLLECTION

グループに対してフェッチする必要がある属性のリストです。

ptype

PLS_INTEGER

戻されるプロパティのタイプ。有効な値はDBMS_LDAP_UTL.ENTRY_PROPERTIESです。

ret_pset_coll

PROPERTY_SET_COLLECTION

コール元がリクエストした属性が含まれているグループの詳細です。

戻り値

表11-30 GET_GROUP_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_GROUP

グループが存在しません。

DBMS_LDAP_UTL.MULTIPLE_GROUP_ENTRIES

指定したグループに対して、複数のグループ識別名エントリがディレクトリに存在します。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAPサーバーによるLDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションには、次の要件があります。

- DBMS_LDAP.init()ファンクションで取得した有効なLDAPセッション・ハンドル。

- グループのタイプがDBMS_LDAP_UTL.TYPE_NICKNAMEの場合は、グループ・ハンドルのプロパティに有効なサブスクライバ・ハンドルの設定が必要です。

このファンクションは、NULLのサブスクライバ・ハンドルをデフォルト・サブスクライバとして識別しません。デフォルト・サブスクライバは、引数にNULLのsubscriber_idが渡されるDBMS_LDAP_UTL.create_subscriber_handle()で取得できます。

グループ・タイプがDBMS_LDAP_UTL.TYPE_GUIDまたはDBMS_LDAP_UTL.TYPE_DNの場合は、サブスクライバ・ハンドルをグループ・ハンドルのプロパティに設定する必要はありません。サブスクライバ・ハンドルが設定されている場合、サブスクライバ・ハンドルは無視されます。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.create_group_handle()。

11.2.2.4 get_group_dnファンクション

get_group_dn()ファンクションでは、グループの識別名を戻します。

構文

FUNCTION get_group_dn
(
ld IN SESSION,
group_handle IN HANDLE
dn OUT VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-31 GET_GROUP_DNファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

group_handle

HANDLE

グループ・ハンドルです。

dn

VARCHAR2

グループの識別名です。

戻り値

表11-32 GET_GROUP_DNファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_GROUP

グループが存在しません。

DBMS_LDAP_UTL.MULTIPLE_GROUP_ENTRIES

指定したグループに対して、複数のグループ識別名エントリがディレクトリに存在します。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()。

11.2.3 サブスクライバ関連サブプログラム

サブスクライバは、dbms_ldap_utl.handleデータ型を使用して表されます。サブスクライバ・ハンドルは、識別名、GUIDまたは単純な名前を使用して作成できます。単純な名前を使用すると、ルートのOracleコンテキストの追加情報がサブスクライバの識別に使用されます。次の例は、サブスクライバ・ハンドルの作成方法を示しています。

retval := DBMS_LDAP_UTL.create_subscriber_handle(

subscriber_handle,
DBMS_LDAP_UTL.TYPE_DN,
"o=example,dc=com"
);

subscriber_handleは、その識別名であるo=oracle,dc=comによって作成されます。

サブスクライバ・プロパティの取得は、サブスクライバ・ハンドルの一般的な用途の1つです。次に例を示します。

my_attrs is of type DBMS_LDAP.STRING_COLLECTION
my_attrs(1) :='orclguid';
retval := DBMS_LDAP_UTL.get_subscriber_properties(
my_session,
my_attrs,
DBMS_LDAP_UTL.ENTRY_PROPERTIES,
my_pset_coll
);

11.2.3.1 create_subscriber_handleファンクション

create_subscriber_handle()ファンクションでは、サブスクライバ・ハンドルを作成します。

構文

FUNCTION create_subscriber_handle
(
subscriber_hd OUT HANDLE,
subscriber_type IN PLS_INTEGER,
subscriber_id IN VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-33 CREATE_SUBSCRIBER_HANDLEファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

subscriber_hd

HANDLE

サブスクライバのハンドルへのポインタです。

subscriber_type

PLS_INTEGER

渡されるサブスクライバIDのタイプ。この引数に有効な値は、次のとおりです。

- DBMS_LDAP_UTL.TYPE_DN

- DBMS_LDAP_UTL.TYPE_GUID

- DBMS_LDAP_UTL.TYPE_NICKNAME

- DBMS_LDAP_UTL.TYPE_DEFAULT

subscriber_id

VARCHAR2

サブスクライバ・エントリを表すサブスクライバIDです。subscriber_typeがDBMS_LDAP_UTL.TYPE_DEFAULTの場合は、このパラメータをNULLにできます。その場合、デフォルト・サブスクライバはルートのOracleコンテキストから取得されます。

戻り値

表11-34 CREATE_SUBSCRIBER_HANDLEファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

関連項目

DBMS_LDAP_UTL.get_subscriber_properties()。

11.2.3.2 get_subscriber_propertiesファンクション

get_subscriber_properties()ファンクションでは、指定したサブスクライバ・ハンドルのサブスクライバ・プロパティを取得します。

構文

FUNCTION get_subscriber_properties
(
ld IN SESSION,
subscriber_handle IN HANDLE,
attrs IN STRING_COLLECTION,
ptype IN PLS_INTEGER,
ret_pset_coll OUT PROPERTY_SET_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-35 GET_SUBSCRIBER_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

subscriber_handle

HANDLE

サブスクライバ・ハンドルです。

attrs

STRING_COLLECTION

サブスクライバに対して取得する必要がある属性のリストです。

ptype

PLS_INTEGER

戻すサブスクライバのOracleコンテキストのプロパティ。有効な値は次のとおりです。

- DBMS_LDAP_UTL.ENTRY_PROPERTIES

- DBMS_LDAP_UTL.COMMON_PROPERTIES

ret_pset_coll

PROPERTY_SET_COLLECTION

コール元がリクエストした属性が含まれているサブスクライバの詳細です。

戻り値

表11-36 GET_SUBSCRIBER_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_SUBSCRIBER

サブスクライバが存在しません。

DBMS_LDAP_UTL.MULTIPLE_SUBSCRIBER_ENTRIES

サブスクライバが複数の識別名エントリを持ちます。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()、DBMS_LDAP_UTL.create_subscriber_handle()。

11.2.3.3 get_subscriber_dnファンクション

get_subscriber_dn()ファンクションでは、サブスクライバの識別名を戻します。

構文

FUNCTION get_subscriber_dn
(
ld IN SESSION,
subscriber_handle IN HANDLE,
dn OUT VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-37 GET_SUBSCRIBER_DNファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

subscriber_handle

HANDLE

サブスクライバ・ハンドルです。

dn

VARCHAR2

サブスクライバの識別名です。

戻り値

表11-38 GET_SUBSCRIBER_DNファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_SUBSCRIBER

サブスクライバが存在しません。

DBMS_LDAP_UTL.MULTIPLE_SUBSCRIBER_ENTRIES

指定したサブスクライバに対して、複数のサブスクライバ識別名エントリがディレクトリに存在します。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAPエラー・コード

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目

DBMS_LDAP.init()。

11.2.3.4 get_subscriber_ext_propertiesファンクション

get_subscriber_ext_properties()ファンクションでは、拡張されたサブスクライバのプロパティを取得します。現在、このファンクションは、サブスクライバ全体のデフォルトのリソース・アクセス記述子を取得するために使用されます。

構文

FUNCTION get_subscriber_ext_properties
(
ld IN SESSION,
subscriber_handle IN HANDLE,
attrs IN STRING_COLLECTION,
ptype IN PLS_INTEGER,
filter IN VARCHAR2,
rep_pset_coll OUT PROPERTY_SET_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-39 GET_SUBSCRIBER_EXT_PROPERTIESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

ld

SESSION

有効なLDAPセッション・ハンドルです。

subscriber_handle

HANDLE

サブスクライバ・ハンドルです。

attrs

STRING_COLLECTION

取得するサブスクライバ属性のリストです。

ptype

PLS_INTEGER

戻すプロパティのタイプ。有効な値はDBMS_LDAP_UTL.DEFAULT_RAD_PROPERTIESです。

filter

VARCHAR2

ファンクションで戻されたサブスクライバ・プロパティをさらに明確にするためのLDAPフィルタです。

ret_pset_collection

PROPERTY_SET_COLLECTION

コール元がリクエストした属性が含まれているサブスクライバの詳細です。

戻り値

表11-40 GET_USER_EXTENDED_PROPERTIESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.NO_SUCH_USER

ユーザーが存在しません。

DBMS_LDAP_UTL.INVALID_ROOT_ORCL_CTX

ルートのOracleコンテキストが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

DBMS_LDAP error codes

LDAP操作中に発生した無条件の障害に対して、適切なDBMS_LDAPエラー・コードを戻します。

使用方法

このファンクションは、DBMS_LDAP.init()のコールで有効なLDAPセッションを取得してからコールしてください。

関連項目: DBMS_LDAP.init()、DBMS_LDAP_UTL.get_subscriber_properties()。

11.2.4 プロパティ関連サブプログラム

ユーザー関連、サブスクライバ関連およびグループ関連のサブプログラムの多くは、結果を表す1つ以上のLDAPエントリのコレクションであるDBMS_LDAP_UTL.PROPERTY_SET_COLLECTIONを戻します。これらの各エントリは、DBMS_LDAP_UTL.PROPERTY_SETで表されます。PROPERTY_SETには属性(つまり、プロパティ)とその値が含まれる場合があります。次に、DBMS_LDAP_UTL.PROPERTY_SET_COLLECTIONからプロパティを取得する例を示します。

my_attrs is of type DBMS_LDAP.STRING_COLLECTION
my_attrs(1) :='cn';

retval := DBMS_LDAP_UTL.get_group_membership(
my_session,
user_handle,
DBMS_LDAP_UTL.DIRECT_MEMBERSHIP,
my_attrs,
my_pset_coll
);

IF my_pset_coll.count > 0 THEN
FOR i in my_pset_coll.first .. my_pset_coll.last LOOP
--    my_property_names is of type DBMS_LDAP.STRING_COLLECTION
retval := DBMS_LDAP_UTL.get_property_names(
pset_coll(i),
property_names
IF my_property_names.count > 0 THEN
FOR j in my_property_names.first .. my_property_names.last LOOP
retval := DBMS_LDAP_UTL.get_property_values(
pset_coll(i),
property_names(j),
property_values
if my_property_values.COUNT > 0 then
FOR k in my_property_values.FIRST..my_property_values.LAST LOOP
DBMS_OUTPUT.PUT_LINE(my_property_names(j)  || ':'
||my_property_values(k));
END LOOP; -- For each value
else
DBMS_OUTPUT.PUT_LINE('NO VALUES FOR' || my_property_names(j));
end if;
END LOOP; -- For each property name
END IF; -- IF my_property_names.count > 0
END LOOP; -- For each propertyset
END IF; -- If my_pset_coll.count > 0

use_handleはユーザー・ハンドルです。my_pset_collには、user_handleが属するネストされたグループがすべて含まれます。このコードは結果エントリをループし、各エントリのcnを出力します。

11.2.5 その他のサブプログラム

DBMS_LDAP_UTLパッケージのその他のサブプログラムは、様々な機能を実行します。

11.2.5.1 normalize_dn_with_caseファンクション

normalize_dn_with_case()ファンクションでは、識別名から不要な空白文字を削除し、フラグに基づいてすべての文字を小文字に変換します。

構文

FUNCTION normalize_dn_with_case
(
dn IN VARCHAR2,
lower_case IN PLS_INTEGER,
norm_dn OUT VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-41 NORMALIZE_DN_WITH_CASEファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

dn

VARCHAR2

識別名を指定します。

lower_case

PLS_INTEGER

1に設定した場合、正規化された識別名が小文字で戻されます。0(ゼロ)に設定した場合、正規化された識別名の文字列がそのまま戻されます。

norm_dn

VARCHAR2

正規化された識別名です。

戻り値

表11-42 NORMALIZE_DN_WITH_CASEファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

障害時の戻り値です。

使用方法

このファンクションは、2つの識別名を比較する際に使用できます。

11.2.5.2 get_property_namesファンクション

get_property_names()ファンクションでは、プロパティ・セットのプロパティ名のリストを取得します。

構文

FUNCTION get_property_names
(
pset IN PROPERTY_SET,
property_names OUT STRING_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-43 GET_PROPERTY_NAMESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

pset

PROPERTY_SET

次のいずれかのファンクションで戻されるPropertySetCollection内のプロパティ・セットです。

- DBMS_LDAP_UTL.get_group_membership()

- DBMS_LDAP_UTL.get_subscriber_properties()

- DBMS_LDAP_UTL.get_user_properties()

- DBMS_LDAP_UTL.get_group_properties()

property_names

STRING_COLLECTION

プロパティ・セットに関連付けられているプロパティ名のリストです。

戻り値

表11-44 GET_PROPERTY_NAMESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

エラーが発生した場合の戻り値です。

関連項目

DBMS_LDAP_UTL.get_property values()。

11.2.5.3 get_property_valuesファンクション

get_property_values()ファンクションでは、指定したプロパティ名とプロパティに対するプロパティ値(文字列)を取得します。

構文

FUNCTION get_property_values
(
pset IN PROPERTY_SET,
property_name IN VARCHAR2,
property_values OUT STRING_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-45 GET_PROPERTY_VALUESファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

property_name

VARCHAR2

プロパティ名です。

pset

PROPERTY_SET

次のいずれかのファンクションで戻されるPropertySetCollection内のプロパティ・セットです。

- DBMS_LDAP_UTL.get_group_membership()

- DBMS_LDAP_UTL.get_subscriber_properties()

- DBMS_LDAP_UTL.get_user_properties()

- DBMS_LDAP_UTL.get_group_properties()

property_values

STRING_COLLECTION

プロパティ値(文字列)のリストです。

戻り値

表11-46 GET_PROPERTY_VALUESファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

障害時の戻り値です。

関連項目

DBMS_LDAP_UTL.get_property_values_len()。

11.2.5.4 get_property_values_lenファンクション

get_property_values_len()ファンクションでは、指定したプロパティ名とプロパティに対するバイナリ・プロパティ値を取得します。

構文

FUNCTION get_property_values_len
(
pset IN PROPERTY_SET,
property_name IN VARCHAR2,
auth_type IN PLS_INTEGER,
property_values OUT BINVAL_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-47 GET_PROPERTY_VALUES_LENファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

property_name

VARCHAR2

プロパティ名です。

pset

PROPERTY_SET

次のいずれかのファンクションで戻されるPropertySetCollection内のプロパティ・セットです。

- DBMS_LDAP_UTL.get_group_membership()

- DBMS_LDAP_UTL.get_subscriber_properties()

- DBMS_LDAP_UTL.get_user_properties()

- DBMS_LDAP_UTL.get_group_properties()

property_values

BINVAL_COLLECTION

バイナリ・プロパティ値のリストです。

戻り値

表11-48 GET_PROPERTY_VALUES_LENファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

障害時の戻り値です。

関連項目

DBMS_LDAP_UTL.get_property_values()。

11.2.5.5 free_propertyset_collectionプロシージャ

free_propertyset_collection()プロシージャでは、プロパティ・セット・コレクションに関連付けられているメモリーを解放します。

構文

PROCEDURE free_propertyset_collection
(
pset_collection IN OUT PROPERTY_SET_COLLECTION
);

パラメータ

表11-49 FREE_PROPERTYSET_COLLECTIONプロシージャのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

pset_collection

PROPERTY_SET_COLLECTION

次のいずれかのファンクションで戻されるPropertySetCollectionです。

- DBMS_LDAP_UTL.get_group_membership()

- DBMS_LDAP_UTL.get_subscriber_properties()

- DBMS_LDAP_UTL.get_user_properties()

- DBMS_LDAP_UTL.get_group_properties()

関連項目

DBMS_LDAP_UTL.get_group_membership()、DBMS_LDAP_UTL.get_subscriber_properties()、DBMS_LDAP_UTL.get_user_properties()、DBMS_LDAP_UTL.get_group_properties()。

11.2.5.6 create_mod_propertysetファンクション

create_mod_propertyset()ファンクションでは、MOD_PROPERTY_SETデータ構造を作成します。

構文

FUNCTION create_mod_propertyset
(
pset_type IN PLS_INTEGER,
pset_name IN VARCHAR2,
mod_pset OUT MOD_PROPERTY_SET
)
RETURN PLS_INTEGER;

パラメータ

表11-50 CREATE_MOD_PROPERTYSETファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

pset_type

PLS_INTEGER

変更するプロパティ・セットのタイプ。有効な値はENTRY_PROPERTIESです。

pset_name

VARCHAR2

プロパティ・セットの名前。ENTRY_PROPERTIESが変更されている場合は、このパラメータをNULLにできます。

mod_pset

MOD_PROPERTY_SET

プロパティ・セットに対して実行する変更操作が含まれているデータ構造です。

戻り値

表11-51 CREATE_MOD_PROPERTYSETファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.GENERAL_ERROR

その他のエラーです。

関連項目

DBMS_LDAP_UTL.populate_mod_propertyset()。

11.2.5.7 populate_mod_propertysetファンクション

populate_mod_propertyset()ファンクションでは、MOD_PROPERTY_SETデータ構造に移入します。

構文

FUNCTION populate_mod_propertyset
(
mod_pset IN MOD_PROPERTY_SET,
property_mod_op IN PLS_INTEGER,
property_name IN VARCHAR2,
property_values IN STRING_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-52 POPULATE_MOD_PROPERTYSETファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

mod_pset

MOD_PROPERTY_SET

Mod_PropertySetデータ構造です。

property_mod_op

PLS_INTEGER

プロパティに対して実行する変更操作のタイプ。有効な値は次のとおりです。

- ADD_PROPERTY

- REPLACE_PROPERTY

- DELETE_PROPERTY

property_name

VARCHAR2

プロパティの名前です。

property_values

STRING_COLLECTION

プロパティに関連付けられている値です。

戻り値

表11-53 POPULATE_MOD_PROPERTYSETファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.GENERAL_ERROR

認証に失敗しました。

DBMS_LDAP_UTL.PWD_GRACELOGIN_WARN

ユーザーの猶予期間ログインです。

関連項目

DBMS_LDAP_UTL.create_mod_propertyset()。

11.2.5.8 free_mod_propertysetプロシージャ

free_mod_propertyset()プロシージャでは、MOD_PROPERTY_SETデータ構造を解放します。

構文

PROCEDURE free_mod_propertyset
(
mod_pset IN MOD_PROPERTY_SET
);

パラメータ

表11-54 FREE_MOD_PROPERTYSETプロシージャのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

mod_pset

PROPERTY_SET

Mod_PropertySetデータ構造です。

関連項目

DBMS_LDAP_UTL.create_mod_propertyset()。

11.2.5.9 free_handleプロシージャ

free_handle()プロシージャでは、ハンドルに関連付けられているメモリーを解放します。

構文

PROCEDURE free_handle
(
handle IN OUT HANDLE
);

パラメータ

表11-55 FREE_HANDLEプロシージャのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

handle

HANDLE

ハンドルへのポインタです。

関連項目

DBMS_LDAP_UTL.create_user_handle()、DBMS_LDAP_UTL.create_subscriber_handle()、DBMS_LDAP_UTL.create_group_handle()。

11.2.5.10 check_interface_versionファンクション

check_interface_version()ファンクションでは、インタフェースのバージョンをチェックします。

構文

FUNCTION check_interface_version
(
interface_version IN VARCHAR2
)
RETURN PLS_INTEGER;

パラメータ

表11-56 CHECK_INTERFACE_VERSIONファンクションのパラメータ

パラメータ名

パラメータ・タイプ

パラメータの説明

interface_version

VARCHAR2

インタフェースのバージョンです。

戻り値

表11-57 CHECK_VERSION_INTERFACEファンクションの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

インタフェースのバージョンはサポートされています。

DBMS_LDAP_UTL.GENERAL_ERROR

インタフェースのバージョンはサポートされていません。

11.2.5.11 get_property_values_blobファンクション

get_property_values_blob()ファンクションでは、指定したプロパティ名とプロパティに対するラージ・バイナリ・プロパティ値を取得します。

構文

FUNCTION get_property_values_blob
(
pset IN PROPERTY_SET,
property_name IN VARCHAR2,
auth_type IN PLS_INTEGER,
property_values OUT BLOB_COLLECTION
)
RETURN PLS_INTEGER;

パラメータ

表11-58 GET_PROPERTY_VALUES_BLOBファンクションのパラメータ

パラメータ

パラメータ・タイプ

説明

property_name

VARCHAR2

プロパティ名です。

pset

PROPERTY_SET

次のいずれかのファンクションで戻されるPropertySetCollection内のプロパティ・セットです。

- DBMS_LDAP_UTL.get_group_membership()

- DBMS_LDAP_UTL.get_subscriber_properties()

- DBMS_LDAP_UTL.get_user_properties()

- DBMS_LDAP_UTL.get_group_properties()

property_values

BLOB_COLLECTION

バイナリ・プロパティ値のリストです。

戻り値

表11-59 GET_PROPERTY_VALUES_BLOBの戻り値

値

説明

DBMS_LDAP_UTL.SUCCESS

正常終了した場合の戻り値です。

DBMS_LDAP_UTL.PARAM_ERROR

入力パラメータが無効です。

DBMS_LDAP_UTL.GENERAL_ERROR

障害時の戻り値です。

関連項目

DBMS_LDAP_UTL.get_property_values()。

11.2.5.12 property_value_free_blobプロシージャ

DBMS_LDAP.get_property_values_blob()によって戻されたBLOB_COLLECTIONに関連付けられているメモリーを解放します。

構文

Syntax
PROCEDURE property_value_free_blob
(
vals IN OUT DBMS_LDAP.BLOB_COLLECTION
);

パラメータ

表11-60 PROPERTY_VALUE_FREE_BLOBファンクションのパラメータ

パラメータ

説明

vals

DBMS_LDAP.get_property_values_blob()によって戻されたラージ・バイナリ値の集合です。

関連項目

DBMS_LDAP.get_property_values_blob()。

11.3 ファンクション・リターン・コードの概要

DBMS_LDAP_UTLの各ファンクションは、次の表の値を戻す場合があります。

表11-61 ファンクション・リターン・コード

名前

リターン・コード

説明

SUCCESS

0

操作は正常終了しました。

GENERAL_ERROR

-1

このエラー・コードは、ここにリストされている以外の障害が発生した場合に戻されます。

PARAM_ERROR

-2

入力パラメータが無効な場合は、すべてのファンクションがこのコードを戻します。

NO_GROUP_MEMBERSHIP

-3

ユーザーがグループのメンバーでない場合は、ユーザー関連ファンクションとグループ・ファンクションからこのコードが戻されます。

NO_SUCH_SUBSCRIBER

-4

ディレクトリにサブスクライバが存在しない場合は、サブスクライバ関連のファンクションからこのコードが戻されます。

NO_SUCH_USER

-5

ディレクトリにユーザーが存在しない場合は、ユーザー関連のファンクションからこのコードが戻されます。

NO_ROOT_ORCL_CTX

-6

ディレクトリにルートのOracleコンテキストが存在しない場合は、ほとんどのファンクションがこのコードを戻します。

MULTIPLE_SUBSCRIBER_ENTRIES

-7

指定したサブスクライバ・ニックネームに対して複数のサブスクライバ・エントリが検出された場合は、サブスクライバ関連のファンクションからこのコードが戻されます。

INVALID_ROOT_ORCL_CTX

-8

ファンクションに必要なすべての必須情報が、ルートのOracleコンテキストに含まれていません。

NO_SUBSCRIBER_ORCL_CTX

-9

サブスクライバのOracleコンテキストが存在しません。

INVALID_SUBSCRIBER_ORCL_CTX

-10

サブスクライバのOracleコンテキストが無効です。

MULTIPLE_USER_ENTRIES

-11

指定したユーザー・ニックネームに対して複数のユーザー・エントリが検出された場合は、ユーザー関連のファンクションからこのコードが戻されます。

NO_SUCH_GROUP

-12

ディレクトリにグループが存在しない場合は、グループ関連のファンクションからこのコードが戻されます。

MULTIPLE_GROUP_ENTRIES

-13

指定したグループ・ニックネームに対して、複数のグループ・エントリがディレクトリに存在しています。

ACCT_TOTALLY_LOCKED_EXCEPTION

-14

ユーザー・アカウントがロックされている場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。このエラーは、サブスクライバのOracleコンテキストに設定されているパスワード・ポリシーに基づいています。

AUTH_PASSWD_CHANGE_WARN

-15

このリターン・コードは非推奨です。

AUTH_FAILURE_EXCEPTION

-16

ユーザーの認証に失敗した場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。

PWD_EXPIRED_EXCEPTION

-17

ユーザー・パスワードが期限切れの場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

RESET_HANDLE

-18

エントリ・ハンドルのプロパティをコール元がリセットしようとしている場合は、このコードが戻されます。

SUBSCRIBER_NOT_FOUND

-19

サブスクライバの位置を特定できない場合は、DBMS_LDAP-UTL.locate_subscriber_for_user()ファンクションからこのコードが戻されます。

PWD_EXPIRE_WARN

-20

ユーザー・パスワードの期限切れが近い場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_MINLENGTH_ERROR

-21

ユーザー・パスワードの変更時に、新規ユーザー・パスワードが最低限の長さに達していない場合は、DBMS_LDAP_UTL.set_user_properties()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_NUMERIC_ERROR

-22

ユーザー・パスワードの変更時に、新規ユーザー・パスワードに最低1文字の数字が含まれていない場合は、DBMS_LDAP_UTL.set_user_properties()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_NULL_ERROR

-23

ユーザー・パスワードの変更時に、新規ユーザー・パスワードに空のパスワードが指定された場合は、DBMS_LDAP_UTL.set_user_properties()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_INHISTORY_ERROR

-24

ユーザー・パスワードの変更時に、新規ユーザー・パスワードに以前と同じパスワードが指定された場合は、DBMS_LDAP_UTL.set_user_properties()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_ILLEGALVALUE_ERROR

-25

ユーザー・パスワードの変更時に、新規ユーザー・パスワードに無効な文字が指定された場合は、DBMS_LDAP_UTL.set_user_properties()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_GRACELOGIN_WARN

-26

ユーザー・パスワードが期限切れで、ユーザーに猶予期間ログインが指定されている場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PWD_MUSTCHANGE_ERROR

-27

ユーザー・パスワードの変更が必要な場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

USER_ACCT_DISABLED_ERROR

-29

ユーザー・アカウントが無効な場合は、DBMS_LDAP_UTL.authenticate_user()ファンクションからこのコードが戻されます。これは、パスワード・ポリシー・エラーです。

PROPERTY_NOT_FOUND

-30

ディレクトリでユーザー・プロパティを検索している場合は、ユーザー関連のファンクションからこのコードが戻されます。

11.4 データ型の概要

DBMS_LDAP_UTLパッケージでは、次のデータ型が使用されます。

表11-62 DBMS_LDAP_UTLのデータ型

データ型

用途

HANDLE

エンティティの保持に使用されます。

PROPERTY_SET

エンティティに関するプロパティの保持に使用されます。

PROPERTY_SET_COLLECTION

PROPERTY_SET構造体のリストです。

MOD_PROPERTY_SET

エンティティに対する変更操作を保持する構造体です。

12 Oracle Directory Integration and Provisioning Java APIリファレンス

10g(10.1.4.0.1)には、様々な使用方法に対して最適化された、2つの補完的な製品が用意されています。

- Oracle Identity Manager(旧Oracle Xellerate IP)は、ディレクトリ、データベース、メインフレーム、独自のテクノロジ、フラット・ファイルなどを含む、大きく異なる技術で構成された複雑な環境を管理するために設計されたエンタープライズ・プロビジョニング・プラットフォームです。Oracle Identity Managerには、豊富な一連の監査およびコンプライアンス機能に加え、様々な機能を持つワークフローおよびポリシー機能が備わっています。

- アイデンティティ管理インフラストラクチャのコンポーネントであるOracle Directory Integration and Provisioningは、ディレクトリを中心とする環境において、ディレクトリの同期やプロビジョニング・タスクを実行するために設計されたメタディレクトリ・テクノロジです。Oracle Directory Integration and Provisioningは、ディレクトリおよび互換性のあるOracle製品で構成される、より同質性の高い環境を管理するよう設計されています。Oracle Directory Integration and Provisioningは、データの同期を使用してプロビジョニング・タスクを行います。ワークフローおよびフル機能のポリシー・エンジンが不要な場合、Oracle Directory Integration and Provisioningにより少量のデプロイメント・フットプリントが用意されます。

Oracle Internet Directory SDKにはOracle Directory Integration and Provisioningユーザー・プロビジョニングAPIが含まれ、ユーザーとそのアプリケーション・プロパティをOracle Identity Managementインフラストラクチャで管理できます。この章では、このAPIの主要機能と使用方法について説明します。

この章では、次の項目について説明します。

- 第12.1項「アプリケーション構成」

- 第12.2項「ユーザー管理」

- 第12.3項「デバック」

- 第12.4項「サンプル・コード」

12.1 アプリケーション構成

アプリケーションをプロビジョニング可能な状態にするには、プロビジョニング・システムに登録する必要があります。コマンドライン・インタフェースを使用してOracle Internet Directoryに独自の構成を作成する必要もあります。アプリケーション構成を表示するためのJavaクラスが存在します。

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

- 第12.1.1項「アプリケーション登録とプロビジョニング構成」

- 第12.1.2項「アプリケーション構成クラス」

12.1.1 アプリケーション登録とプロビジョニング構成

プロビジョニング・システムに登録するためには、アプリケーションでプロビジョニング構成を作成する必要があります。プロビジョニング構成が存在すると、ディレクトリ対応であり、プロビジョニングが可能なアプリケーションとしてプロビジョニング・システムに認識されます。

アプリケーションでは、次の手順によりプロビジョニング構成を作成します。

1. アプリケーションの登録

2. プロビジョニングの構成

12.1.1.1 アプリケーションの登録

通常、Oracleアプリケーションは、$ORACLE_HOME/jlibにあるrepository.jarファイルのリポジトリAPIを使用して自己登録を行います。このファイルは、アプリケーション登録専用としてインストール時に配置されます。リポジトリAPIは、Oracle Internet Directoryにアプリケーション・エントリを作成する場合だけでなく、アプリケーションを権限グループに追加する場合にも使用できます。

ただし、顧客が作成したアプリケーションでは、アプリケーション登録にrepository.jar APIを使用することはできません。そのため、アプリケーション開発者は、LDIFテンプレートを使用し、LDAPコマンドでOracle Internet Directoryにアプリケーション・エントリを作成する必要があります。

次のいずれかのコンテナの下に、アプリケーション独自のコンテナを作成する必要があります。

- cn=Products,cn=OracleContext: 複数レルムのユーザーにサービスを提供するアプリケーション用

- "cn=Products,cn=OracleContext,RealmDN": 特定レルムのユーザーにサービスを提供するアプリケーション用

特定レルム用としてアプリケーションを構成すると、そのアプリケーションでは、他のレルムのユーザーを管理できません。ほとんどの場合、Oracle Internet Directoryの特定レルムに関連付けないように、アプリケーションを任意のアイデンティティ管理レルムの外部に作成する必要があります。

アプリケーションの新しいインスタンスがインストールされると、アプリケーション・インスタンスに対する個別エントリがアプリケーションのコンテナに作成されます。プロビジョニング構成には、特定タイプのすべてのインスタンスで共通のものとインスタンス固有のものがあります。企業内にアプリケーションのインスタンスが複数デプロイされている場合、各インスタンスはそれぞれ独立しています。各インスタンスは個別のプロビジョニング可能なアプリケーションとして定義されます。このアプリケーションの1つ以上のインスタンスにアクセスできるように、ユーザーは、このアプリケーションの1つ以上のインスタンスに対してプロビジョニングできます。

この項の例では、Oracle Filesに似たサンプル・アプリケーションを扱います。このアプリケーションの最初のインスタンスをインストールするときに、Oracle Internet Directoryに特定のエントリを作成する必要があります。次の例において、実行時に選択されるこのアプリケーションの名前はFiles-App1であり、アプリケーションのタイプはFILESです。このアプリケーションは、必要に応じてインスタンス化してOracle Internet DirectoryにアップロードできるLDIFテンプレートを持つことができます。この例では、アプリケーションのアイデンティティは任意のレルムの外部にあります。つまり、"cn=Products,cn=OracleContext"コンテナ下です。

dn: cn=FILES,cn=Products,cn=OracleContext
changetype: add
objectclass: orclContainer

dn: orclApplicationCommonName=Files-App1,cn=FILES,cn=Products,cn=OracleContext
changetype: add
orclappfullname: Files Application Instance 1
userpassword: welcome123
description: This is a test Appliction instance.
protocolInformation: xxxxx
orclVersion: 1.0
orclaci: access to entry by group="cn=odisgroup,cn=DIPAdmins,
cn=Directory Integration  Platform,cn=Products,
cn=OracleContext" (browse,proxy) by group="cn=User Provisioning Admins,
cn=Groups,cn=OracleContext" (browse,proxy)
orclaci: access to attr=(*) by group="cn=odisgroup,cn=DIPAdmins,
cn=Directory Integration Platform,cn=Products,
cn=OracleContext" (search,read,write,compare)
by group="cn=User Provisioning Admins,
cn=Groups,cn=OracleContext" (search,read,write,compare)

この例でのACLの詳細は、「アプリケーション・ユーザー・データの場所」を参照してください。

アプリケーションでは、一部のプロビジョニング・サービスとプロビジョニング管理者に一定の権限を付与します。

このアプリケーションの2番目のインスタンスをインストールする場合、Oracle Directory Integration and Provisioningに次のエントリを作成する必要があります。この例では、実行時に決定されるこのアプリケーションの名前をFiles-App2とします。

dn: orclApplicationCommonName=Files-App2,cn=FILES,cn=Products,cn=OracleContext
changetype: add
orclappfullname: Files Application Instance 2
userpassword: welcome123
description: This is a test Appliction instance.
orclVersion: 1.0
orclaci: access to entry by group="cn=odisgroup,
cn=DIPAdmins,cn=Directory Integration Platform,cn=Products,
cn=OracleContext" (browse,proxy) by group="cn=User Provisioning Admins,
cn=Groups,cn=OracleContext" (browse,proxy)
orclaci: access to attr=(*) by group="cn=odisgroup,cn=DIPAdmins,
cn=Directory Integration Platform,cn=Products,
cn=OracleContext" (search,read,write,compare) by
group="cn=User Provisioning Admins,cn=Groups,cn=OracleContext"
(search,read,write,compare)

アプリケーションのエントリが正常に作成されると、アプリケーションのアイデンティティがOracle Internet Directoryに登録されます。アプリケーションに特定の権限が必要な場合、この時点でアプリケーションをOracle Internet Directoryの特定の権限グループに追加できます。表12-1「一部の有用な権限グループ」に、アプリケーションで自身を追加できる権限グループを示します。これらの各グループは、すべてのレルムに存在し、また、RootOracleContextにも存在します。RootOracleContextグループは、すべてのレルムのグループ・メンバーです。

表12-1 一部の有用な権限グループ

グループ名

権限

OracleDASCreateUser

パブリック・ユーザーの作成

OracleDASEditUser

パブリック・ユーザーの編集

OracleDASDeleteUser

パブリック・ユーザーの削除

OracleDASCreateGroup

新規パブリック・グループの作成

OracleDASEditGroup

パブリック・グループの編集

OracleDASDeleteGroup

パブリック・グループの削除

たとえば、次のLDIFファイルを使用すると、すべてのレルムでユーザーを作成する権限を付与するcn=OracleCreateUserに、Files-App1アプリケーションを追加できます。

dn:cn=OracleCreateUser,cn=Groups,cn=OracleContext
changetype: modify
add: uniquemember
uniquemember: orclApplicationCommonName=Files-App1,cn=FILES,cn=Products,cn=OracleContext

12.1.1.2 プロビジョニングの構成

アプリケーションのプロビジョニング構成はそのアプリケーションのプロビジョニング・プロファイルで管理されています。プロビジョニング・システムは、バージョン1.1、2.0および3.0の3つの異なるバージョンのプロビジョニング・プロファイルをサポートします。プロビジョニング・サービスはプロファイルのバージョンごとに異なるサービスを提供します。一部の汎用構成の詳細はバージョンに関係なく、すべてのアプリケーションで共通です。

プロビジョニング構成バージョン間の差異

バージョン3.0のプロファイルとバージョン2.0および1.1のプロファイルとの違いは、次のとおりです。

- 新しいプロビジョニング・フレームワークでは、バージョン3.0のアプリケーションのみが認識されます。したがって、プロビジョニング対象のアプリケーションとしてOracleプロビジョニング・コンソールに表示されるのは、バージョン3.0のプロビジョニング・プロファイルを保持するアプリケーションのみです。バージョン2.0および1.1のプロファイルを保持するアプリケーションは、プロビジョニング対象のアプリケーションとしてプロビジョニング・コンソールに表示されません。ただし、これらのアプリケーションに構成されているイベントの情報は、アプリケーションに通知されます。

- バージョン3.0のプロファイルでは、アプリケーションのプロビジョニング構成の作成は複数ステップのプロセスです。旧バージョンのプロファイルでは、プロビジョニング登録には単一のステップのみが必要とされます(oidprovtoolコマンドの実行)。

- アプリケーションは、様々なインタフェースを使用してプロビジョニング・イベントをサブスクライブできます。JavaおよびOID-LDAPの2つのインタフェースは、プロビジョニング構成のバージョン3.0と併用されるインタフェース・バージョン3.0でのみ使用可能です。表12-2「インタフェースとその構成」を参照してください。

- アプリケーションでは、LDIFファイルで、そのアプリケーション固有のユーザー属性の構成を指定できます。これは、プロビジョニング構成のバージョン3.0と併用されるインタフェース・バージョン3.0でのみサポートされます。第12.1.1.2.6項「アプリケーション・ユーザー属性とデフォルト値の構成」を参照してください。

- 『Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド』に記載されているユーザーのプロビジョニング・ステータスは、バージョン3.0のアプリケーションについてのみ保持されます。バージョン3.0より前のプロファイルを使用するアプリケーションのプロビジョニング・ステータスは、保存されません。

- イベント伝播の構成パラメータは、バージョンごとに変化します。表12-5「イベント伝播のパラメータ」を参照してください。

バージョン3.0固有のプロビジョニング構成

特に記載のないかぎり、この項ではこれより、バージョン3.0に固有のプロビジョニング構成について説明します。図12-1に、プロビジョニング構成の格納に使用されるOracle Internet DirectoryのDITを示します。すべてのプロビジョニング構成情報は、次のコンテナの下に配置されます。

cn=Provisioning,cn=Directory Integration Platform,cn=Products,cn=OracleContext

共通のプロビジョニング構成情報は、次のコンテナの下のエントリに格納されます。

cn=Profiles,cn=Provisioning,cn=Directory Integration Platform,
cn=Products,cn=OracleContext

残りのアプリケーション用のプロビジョニング構成は、次のコンテナの下に配置されます。

cn=ApplicationType,cn=Applications,cn=Provisioning,
cn=Directory Integration Platform,cn=Products,cn=OracleContext

特定のアプリケーション・タイプのすべてのインスタンスは、このコンテナの下にある構成を共有します。つまり、既存のアプリケーション・タイプの2つ目のインスタンスがプロビジョニング・プロファイルを作成すると常に、"cn=ApplicationType"コンテナ内のすべての構成情報が共有されます。

図12-1 プロビジョニング構成データのディレクトリ情報ツリー

Profilesコンテナには、次のタイプの構成情報が含まれます。

- 第12.1.1.2.1項「アプリケーションのアイデンティティの情報」

- 第12.1.1.2.2項「アプリケーション・アイデンティティのレルムの情報」

- 第12.1.1.2.3項「アプリケーション・プロビジョニングとデフォルト・ポリシー」

- 第12.1.1.2.4項「アプリケーション・ユーザー・データの場所」

- 第12.1.1.2.5項「イベント・インタフェースの構成」

- 第12.1.1.2.6項「アプリケーション・ユーザー属性とデフォルト値の構成」

- 第12.1.1.2.7項「アプリケーション・プロビジョニング・プラグインの構成」

- 第12.1.1.2.8項「アプリケーション伝播の構成」

- 第12.1.1.2.9項「アプリケーション・イベント伝播の実行時ステータス」

アプリケーション・インスタンスによってプロファイルが作成されると、その新規プロファイルは、常に次の名前書式でProfilesコンテナの下の個別エントリに格納されます。

orclODIPProfileName=GUID_of_the_Realm_Entry_GUID_of_the_Application_Identity,….

プロビジョニング構成の作成時に、アプリケーションの次の情報を指定する必要があります。

12.1.1.2.1 アプリケーションのアイデンティティの情報

アプリケーションの各インスタンスは、次のパラメータで一意に識別されます。

- アプリケーション識別名: アプリケーションを示すOracle Internet Directory内の一意の識別名。これは必須パラメータです。

- アプリケーション・タイプ: 同一アプリケーションのすべてのインスタンスに共通のパラメータ。一部の構成は、特定タイプの複数のインスタンスで共有できます。これは必須パラメータです。

- アプリケーション名: このパラメータは、個別に指定できます。指定しない場合、識別名から抽出されます。これはオプション・パラメータです。

- アプリケーション表示名: ユーザーにわかりやすいアプリケーション名。この名前は、プロビジョニング可能なターゲット・アプリケーションとしてプロビジョニング・コンソールに表示されます。これはオプション・パラメータです。

プロビジョニング・プロファイルの作成時にこれらのアプリケーションのアイデンティティのパラメータを指定するには、$ORACLE_HOME/bin/oidprovtoolコマンドライン・ユーティリティにそれぞれ次の引数を使用します。

- application_type

- application_dn

- application_name

- application_display_name

関連項目:

『Oracle Fusion Middleware Oracle Identity Managementリファレンス』のoidprovtoolコマンドライン・ツール・リファレンス。

12.1.1.2.2 アプリケーション・アイデンティティのレルムの情報

特定レルムのユーザーのみにサービスを提供するには、そのレルムを対象にアプリケーションを登録します。アプリケーションでサービスを提供するレルムごとに、個別のプロビジョニング・プロファイルを作成する必要があります。複数レルムのシナリオ(ホスティングされたOracle Portalシナリオなど)では、個々のレルムを対象にアプリケーションを登録する必要があります。

レルムのプロビジョニング管理者がプロビジョニング・コンソールにアクセスすると、プロビジョニング可能なターゲット・アプリケーションとして、そのレルムに登録されているアプリケーションのみが表示されます。

プロビジョニング・プロファイルの作成時にレルム情報を指定するには、organization_dn引数付きで$ORACLE_HOME/bin/oidprovtoolコマンドライン・ユーティリティを使用します。

関連項目:

『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のoidprovtoolコマンドライン・ツール・リファレンス

12.1.1.2.3 アプリケーション・プロビジョニングとデフォルト・ポリシー

プロビジョニング・プロファイルの作成時に、プロビジョニング・コンソールでそのアプリケーションに対するプロビジョニングを管理するかどうかを指定できます。管理しない場合、そのアプリケーションは、プロビジョニング・コンソールにプロビジョニング対象として表示されません。ただし、Oracle Directory Integration and Provisioningでは、通常どおりこのプロファイルが処理され、イベントが伝播されます。

プロビジョニング・プロファイルの作成時にこの情報を指定するには、$ORACLE_HOME/bin/oidprovtoolコマンドライン・ユーティリティにapplication_isdasvisible引数を使用します。デフォルト値はTRUEです。

デフォルトで該当レルム内のすべてのユーザーをアプリケーションにプロビジョニングするか、どのユーザーもプロビジョニングしないかを決定するためのデフォルト・ポリシーを構成できます。有効な値は次のとおりです。

- PROVISIONING_REQUIRED: デフォルトですべてのユーザーをプロビジョニングします。

- PROVISIONING_NOT_REQUIRED: デフォルトでユーザーをプロビジョニングしません。

デフォルト値はPROVISIONING_REQUIREDです。

アプリケーション付属のポリシー・プラグインを使用して、デフォルト・ポリシーを実行時に上書きできます。また、管理者は、デフォルト・ポリシーとポリシー・プラグインの決定を両方とも上書きできます。

デフォルト・ポリシー情報を指定するには、$ORACLE_HOME/bin/oidprovtoolコマンドライン・ユーティリティにdefault_provisioning_policy引数を使用します。

12.1.1.2.4 アプリケーション・ユーザー・データの場所

アプリケーション固有のユーザー情報は、アプリケーション固有のコンテナに格納されます。このデータをプロビジョニング・システムで管理する場合、プロビジョニングの登録時にこれらのコンテナの場所を指定する必要があります。ユーザー・データの場所を指定するには、$ORACLE_HOME/bin/oidprovtoolコマンドライン・ユーティリティにuser_data_location引数を使用します。このコンテナに対するACLでOracle Delegated Administration ServicesおよびOracle Directory Integration and Provisioningによるこのコンテナでの情報の管理が許可されることをアプリケーションで確認します。

12.1.1.2.5 イベント・インタフェースの構成

アプリケーションは、PLSQL、Java、OID-LDAPなどの様々なインタフェースを使用してプロビジョニング・イベントをサブスクライブできます。表12-2「インタフェースとその構成」に、サポートされるインタフェースと対応する構成をリストします。INTERFACE_VERSIONは、プロビジョニング・プロファイルのバージョンに合せてください。

表12-2 インタフェースとその構成

構成パラメータ

PL/SQL

Java

OID-LDAP

INTERFACE_VERSION

1.1、2.0、3.0

3.0

3.0

INTERFACE_NAME

インタフェースを実装するPL/SQLパッケージの名前

未使用

未使用

INTERFACE_CONNECT_INFO

データベース接続文字列。すべてのバージョンでサポートされる複数の書式です。

未使用

未使用

INTERFACE_ADDITIONAL_INFO

未使用

未使用

未使用

プラグイン・タイプ

PRE_DATA_ENTRY、POST_DATA_ENTRY、DATA_ACCESS

PRE_DATA_ENTRY、POST_DATA_ENTRY、DATA_ACCESS、EVENT_DELIVERY (MUST)

PRE_DATA_ENTRY、POST_DATA_ENTRY、DATA_ACCESS

説明

主にOracleデータベースのバックエンドを基盤とするアプリケーションが対象です。DIPサーバーは、PL/SQLプロシージャを起動してリモート・データベースにイベントを送信します。

インタフェース・タイプがJAVAの場合、イベント配信プラグインを構成する必要があります。構成されていない場合、サーバーでエラーが発生します。プラグイン構成により残りの構成が決定されます。第12.1.1.2.7項「アプリケーション・プロビジョニング・プラグインの構成」を参照してください。

主に、アプリケーションがOracle Internet Directoryと緊密に統合されており、PL/SQLインタフェースまたはJavaイベント配信プラグインによるイベント配信が不要な場合に使用されます。このインタフェースは、将来的に非推奨になります。かわりにJavaインタフェースを使用してください。

イベント・インタフェース構成を指定する場合、$ORACLE_HOME/bin/oidprovtoolに次の引数を使用できます。

- interface_type(デフォルトはPLSQL)

- interface_version(デフォルトは2.0)

- interface_name

- interface_connect_info

- interface_additional_info

表12-3「PL/SQLインタフェースでサポートされる情報の書式」に、リモート・データベースに接続する場合にPL/SQLインタフェースでサポートされるインタフェース接続情報の書式をリストします。すべてのインタフェース・バージョンですべての書式がサポートされます。

表12-3 PL/SQLインタフェースでサポートされる情報の書式

書式

説明

dbHost:dbPort:dbSID:username:password

古い書式であり、推奨されません。Oracle Directory Integration and Provisioningでこの情報をシンJDBCドライバに渡します。

dbHost:dbPort:dbServiceName:username:password

新しい書式です。高可用性実装では、データベース・ホストおよびポートが変わる可能性があるため、推奨されません。DIPでは、この情報がシンJDBCドライバに渡されます。

DBSVC=DB_TNS_Connect_Sring_Alias:username:password

JDBCシックOCIドライバで使用されます。ローカルのtnsnames.oraファイルには、DIPが稼働するノード上での別名を含める必要があります。

DBURL=ldap://LDAP_host:LDAP_port/ServiceName,cn=OracleContext

高可用性の要件に対応した推奨書式です。DIPはこれをシンJDBCドライバに渡し、ドライバはOracle Internet Directoryでデータベース登録エントリを検索して実際のデータベース接続情報を取得します。

サポートされる書式の例は、次のとおりです。

localhost:1521:iasdb:scott:tiger

localhost:1521:iasdbsvc:scott:tiger

DBSVC=TNSALIAS:scott:tiger

DBURL=ldap://example.com:3060/samplegdbname:scott:tiger

12.1.1.2.6 アプリケーション・ユーザー属性とデフォルト値の構成

アプリケーションでは、LDIFファイルで、そのアプリケーション固有のユーザー属性の構成を指定できます。これは、バージョン3.0のインタフェースでのみサポートされます。

図12-1「プロビジョニング構成データのディレクトリ情報ツリー」に示すとおり、特定の属性に対する構成は、コンテナ下に別のエントリとして格納されます。

"cn=Attributes,cn=User Configuration,cn=Attribute configuration,
cn=Application_Type,cn=Applications,cn=Provisioning,
cn=Directory Integration Platform,cn=Products,cn=OracleContext"

この情報をアップロードするためのoidprovtoolの引数はありません。LDAPファイルとコマンドライン・ツールを使用して、属性の構成情報をOracle Internet Directoryにアップロードする必要があります。

各アプリケーションに固有の属性は、個別のエントリとして示されます。次の例は、属性orclFilesDomainを対象としています。

dn: cn=orclFilesDomain,cn=Attributes,cn=User configuration,cn=Attribute configuration,……
changetype: add
orcldasadminmodifiable: 1
orcldasviewable: 1
displayname: Files Domain
orcldasismandatory: 1
orcldasuitype: LOV
orcldaslov: us.example.com
orcldaslov: uk.example.com
orclDASAttrIsUIField: 1
orclDASAttrIsFieldForCreate: 1
orclDASAttrIsFieldForEdit: 1
orclDASAttrToDisplayByDefault: 1
orclDASSelfModifiable: 1
orclDASAttrDisplayOrder: 1
orclDASAttrDefaultValue: us.example.com
orclDASAttrObjectClass: orclFILESUser
objectclass: orclDASConfigAttr
objectclass: orclcontainer

表12-4「属性の構成エントリに属性として格納されるプロパティ」に、属性の構成エントリに属性として格納される各プロパティの意味を示します。

表12-4 属性の構成エントリに属性として格納されるプロパティ

プロパティ名

説明

コメント

orclDASIsUIField

このプロパティがDASコンソールに表示されるかどうかを示します。

11gリリース1(11.1.1)では使用されません。すべての属性が表示されます。

orclDASUIType

singletext、multitext、LOV、DATE、Number、passwordなどのUIフィールドのタイプです。

Oracle Internet Directoryセルフ・サービス・コンソールでのみ使用されます。

orclDASAdminModifiable

管理者がこのフィールドを変更できるかどうかを示します。

11gリリース1(11.1.1)では使用されません。管理者はすべての属性を変更できます。

orclDASViewAble

この属性がOracle Internet Directoryセルフ・サービス・コンソールで読取り専用属性かどうかを示します。

11gリリース1(11.1.1)では使用されません

displayName

Oracle Internet Directoryセルフ・サービス・コンソールに表示されるローカライズされた属性名です。

orclDASIsMandatory

この属性が必須であるかどうかを示します。

必須属性が移入されない場合、Oracle Internet Directoryセルフ・サービス・コンソールから警告を受けます。

orclDASAttrIsFieldForCreate

ユーザー作成時にかぎりこの属性が公開されるかどうかを示します。

11gリリース1(11.1.1)では使用されません

orclDASAttrIsFieldForEdit

ユーザー編集時にかぎりこの属性が公開されるかどうかを示します。

11gリリース1(11.1.1)では使用されません

orclDASAttrToDisplayByDefault

閉じられたセクションにおいて属性がデフォルトで非表示となるかどうかを示します。

11gリリース1(11.1.1)では使用されません

orclDASSelfModifiable

ユーザーがこの属性を変更できるかどうかを示します。

Oracle Internet Directoryセルフ・サービス・コンソールはアプリケーション固有の属性専用のため、11gリリース1(11.1.1)では使用されません。ユーザーは、Oracle Internet Directoryセルフ・サービス・コンソールからユーザー・プリファレンスを変更できません。

OrclDASAttrDisplayOrder

アプリケーション固有のセクションに属性が表示される順序です。

11gリリース1(11.1.1)では使用されません

OrclDASAttrDefaultValue

プロビジョニング・コンポーネント(Oracle Internet Directoryセルフ・サービス・コンソール、Oracle Directory Integration and Provisioningおよびバルク・プロビジョニング・ツール)で使用される属性の初期デフォルト値です。

Oracle Internet Directoryセルフ・サービス・コンソールのアプリケーション管理ページを使用して変更できます。プラグインまたは管理者により、初期デフォルト値を上書きできます。

OrclDASAttrObjectClass

属性が属するLDAPオブジェクト・クラスです。

プロビジョニング・システムにより管理されるアプリケーション固有のユーザー・エントリを作成するために使用されます。

アプリケーションにアプリケーション固有の属性がある場合、プロビジョニング・システムでその属性のデフォルト値を管理するよう指定できます。これを行うには、$ORACLE_HOME/bin/oidprovtoolにmanage_application_defaults引数を使用します。この引数は、デフォルトでTRUEです。

12.1.1.2.7 アプリケーション・プロビジョニング・プラグインの構成

アプリケーション・プロビジョニング・プラグインの詳細は、次を参照してください。

付録A「ユーザー・プロビジョニング用のJavaプラグイン」.

12.1.1.2.8 アプリケーション伝播の構成

イベント伝播の構成パラメータは、プロファイルのバージョンによって異なります。表12-5「イベント伝播のパラメータ」に、イベント伝播の構成パラメータをリストし、説明します。

表12-5 イベント伝播のパラメータ

パラメータ

サポートされるプロビジョニング・プロファイルのバージョン

説明

profile_mode

2.0,.3.0

アプリケーションでOracle Internet Directoryからの発信プロビジョニング・イベントの受信、着信イベントの送信、またはその両方を実行するかどうかを示します。値は、OUTBOUND(デフォルト)、INBOUND、BOTHです。

Schedule

1.1、2.0、3.0

保留イベントが伝播されるまでのスケジューリング間隔です。

enable_bootstrap

3.0

アプリケーション・ブートストラップ用のイベントを有効にします。これにより、アプリケーションでのプロビジョニング・プロファイルの作成前に、Oracle Internet Directoryに存在するユーザーについてアプリケーションに通知するよう指定します。

enable_upgrade

3.0

アプリケーション・ユーザーのアップグレード用のイベントを有効にします。これにより、アップグレードの前に、Oracle Internet Directoryに存在するユーザーについてアプリケーションに通知するよう指定します。アップグレードの前から存在するアプリケーションの場合、そのアプリケーションにユーザーがすでに存在している可能性があります。このようなユーザーについては、通常の新規ユーザーとは異なる処理するよう、Oracle Directory Integration and Provisioningでアプリケーションにアップグレード・イベントを送信します。

lastchangenumber

3.0

アプリケーションへのイベントの送信元にする必要があるOracle Internet Directoryの変更番号です。

max_prov_failure_limit

3.0

アプリケーションにユーザーをプロビジョニングする際に、Oracle Directory Integration and Provisioningサーバーで試行する最大回数です。

max_events_per_invocation

2.0、3.0

バルク・イベント伝播の場合、このパラメータにより、1回のイベント・インタフェースの起動中にパッケージ化して送信できるイベントの最大数を指定します。

max_events_per_schedule

2.0

プロファイルの1回の実行でOracle Directory Integration and Provisioningがアプリケーションに送信するイベントの最大数です。デフォルトは25です。多くのプロファイルおよびアプリケーションが存在するデプロイメントの場合、これにより、マルチスレッド化されたOracle Directory Integration and Provisioningを使用して複数のプロファイルのスレッドを実行できます。

event_subscription

1.1、2.0、3.0

アプリケーションがイベント伝播サービスから受信するOUTBOUNDイベントのタイプを定義します。書式は次のとおりです。

Object_Type:Domain:Operation(Attributes,…)

次に例を示します。

USER:cn=users,dc=example,dc=com:ADD(*)

この例では、作成されたユーザーが指定ドメインに存在する場合、USER_ADDイベントを送信し、すべての属性も送信するよう指定しています。

USER:cn=users,dc=example,dc=com:MODIFY(cn,sn.mail,telephonenumber)

この例では、変更されたユーザーが指定ドメインに存在し、リストされた属性のいずれかが変更された場合、USER_MODIFYイベントを送信するよう指定しています。

USER:cn=users,dc=example,dc=com:DELETE

この例では、指定ドメインのユーザーが削除された場合、USER_DELETEイベントを送信するよう指定しています。

event_permitted_operations

2.0

アプリケーションがOracle Directory Integration and Provisioningサーバーへの送信権限を持つINBOUNDイベントのタイプを定義します。書式は次のとおりです。

Object_Type:Domain:Operation(Attributes,…)

次に例を示します。

IDENTITY:cn=users,dc=example,dc=com:ADD(*)

この例では、指定ドメインに対してIDENTITY_ADDイベントを許可すると同時に、すべての属性も許可するよう指定しています。つまり、アプリケーションでOracle Internet Directoryにユーザーを作成できます。

IDENTITY:cn=users,dc=example,dc=com:MODIFY(cn,sn.mail,telephonenumber)

この例では、リストされている属性に対してのみIDENTITY_MODIFYを許可するよう指定しています。他の属性は、暗黙的に無視されます。つまり、アプリケーションで、リストされているOracle Internet Directoryのユーザー属性を変更できます。

IDENTITY:cn=users,dc=example,dc=com:DELETE

アプリケーションによるOracle Internet Directoryのユーザーの削除を許可するよう指定しています。

event_mapping_rules

2.0

INBOUNDプロファイルの場合、このパラメータにより、アプリケーションおよび修飾フィルタ条件から取得するオブジェクトの型を指定して、このイベントの対象ドメインを決定します。複数の値を指定できます。書式は次のとおりです。

Object_Type: Filter_condition: Domain_Of_Interest

次に例を示します。

EMP::cn=users,dc=example,dc=com

受け取ったオブジェクト型がEMPの場合、イベントの対象を"cn=users,dc=example,dc=com"ドメインとするよう指定しています。

EMP:l=AMERICA:l=AMER,cn=users,dc=example,dc=com

受け取ったオブジェクト型がEMPで、イベントが属性l(地域)を持ち、その値がAMERICAの場合、イベントの対象を"l=AMER,cn=users,dc=example,dc=com"ドメインとするよう指定しています。

12.1.1.2.9 アプリケーション・イベント伝播の実行時ステータス

Oracleプロビジョニング・サービスでは、プロビジョニング統合アプリケーションごとに、ユーザーのプロビジョニング・ステータスがOracle Internet Directoryに記録されます。この詳細は、『Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド』の「プロビジョニングのデプロイおよび構成」の章を参照してください。

12.1.2 アプリケーション構成クラス

oracle.idm.user.provisioning.configuration.Configurationクラスを使用すると、プロビジョニング・スキーマの情報を取得できます。oracle.idm.user.provisioning.configuration.Applicationクラスを使用すると、登録アプリケーションのメタデータを取得できます。これらのクラスは、oracle.idm.provisioning.configurationパッケージに記述されています。

Configurationクラスでは、アプリケーション構成にアクセスできます。Configurationオブジェクトを構成するには、レルムを指定する必要があります。次に例を示します。

Configuration cfg = new Configuration ("us");

これで、Configurationクラスのメソッドを使用して、レルム内の一部またはすべてのアプリケーション構成を取得できます。レルムのLDAPコンテキストを指定する必要があります。

Configurationオブジェクトは、作成時にOracle Internet Directoryメタデータへのアクセスを必要とするため、パフォーマンスにかなりの影響を与えます。ベスト・プラクティスは、アプリケーションの初期化中にConfigurationオブジェクトを一度作成し、後は必要とされるすべての操作でこのオブジェクトを再利用することです。

Applicationオブジェクトは、アプリケーション・インスタンスを示します。このオブジェクトのメソッドにより、インフラストラクチャの登録アプリケーションに関するメタデータを取得できます。

12.2 ユーザー管理

Oracle Directory Integration and ProvisioningまたはOracle Delegated Administration Servicesでは、プロビジョニング・プラグインを起動する際、プロビジョニング対象のユーザーに関する情報を渡します。デプロイされたアプリケーションでは、ユーザー・オブジェクトを使用してユーザーを変更できます。

ユーザー管理用のプロビジョニング・クラスにより、次の操作を実行できます。

- ベース・ユーザーの作成、変更および削除

- アプリケーション固有のユーザー情報の作成、変更および削除

- ベース・ユーザーの検索

- アプリケーションのユーザー・プロビジョニング・ステータスの取得

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

- 第12.2.1項「ユーザーの作成」

- 第12.2.2項「ユーザーの変更」

- 第12.2.3項「ユーザーの削除」

- 第12.2.4項「ユーザーの検索」

12.2.1 ユーザーの作成

Oracle Identity Managementリポジトリでのユーザーの作成は、2つのステップで構成されます。

1. 指定したレルムに基本ユーザー情報を作成します。この情報は、ベース・ユーザーと呼ばれます。

2. アプリケーション固有のユーザー属性(フットプリント)を作成します。この情報は、アプリケーション・ユーザーと呼ばれます。

リポジトリ内のベース・ユーザーとアプリケーション・ユーザーの組合せは、Oracle Identity Managementユーザーと呼ばれます。メソッドには、ベース・ユーザーのみを作成するものと、Oracle Identity Managementユーザーの両構成要素を作成するものがあります。

ユーザーの作成に必要な最低限の情報は、ベース・ユーザーを示す属性のセットです。属性は、名前/値ペアの形式を取ります。これらのユーザー属性は、oracle.ldap.util.ModPropertySetクラスを使用するJavaオブジェクトとして示されます。

一部のユーザー作成メソッドでは、Oracle Identity Managementのユーザー・リポジトリに作成するエントリの識別名を指定する必要があります。それ以外のメソッドでは、識別名は必要ありません。かわりに、ユーザー作成先のレルムから取得されたメタデータ構成情報を使用して、Oracle Identity Managementユーザーが構成されます。

ベース・ユーザーとアプリケーション・ユーザーの作成に成功すると、作成メソッドによってIdmUserオブジェクトが戻されます。このオブジェクトを使用して、ベース・ユーザーとアプリケーション・ユーザーの属性を管理します。

12.2.2 ユーザーの変更

Oracle Identity Managementリポジトリでベース・ユーザーを変更すると、次の処理が行われます。

- ベース・ユーザー情報の変更

- アプリケーション・ユーザー情報の作成または変更

Oracle Identity Managementユーザーを変更するには、次の情報を指定する必要があります。

1. ユーザーの識別名、GUIDまたはIdmUserオブジェクト参照

2. ベース・ユーザー属性に対する変更操作(oracle.ldap.util.ModPropertySetで指定)

一部のユーザー変更メソッドは、ベース・ユーザー属性のみを変更します。それ以外のメソッドは、アプリケーション・ユーザー属性も変更します。

12.2.3 ユーザーの削除

Oracle Identity Managementリポジトリでベース・ユーザーを削除すると、次の処理が行われます。

- ベース・ユーザー情報の削除

- アプリケーション・ユーザー情報の削除

Oracle Identity Managementユーザーを変更するには、識別名、GUIDまたはIdmUserオブジェクト参照を指定する必要があります。

この操作の結果、ベース・ユーザーとアプリケーション・ユーザーの属性が削除されます。

12.2.4 ユーザーの検索

検索メソッドには、次の2つの検索オプションがあります。

- GUIDまたは識別名を使用した特定のOracle Identity Managementユーザーの検索

- 検索フィルタを使用したOracle Identity Managementユーザーのセットの検索

Oracle Identity Managementユーザーを検索するには、識別名またはGUIDを指定する必要があります。

検索メソッドの出力は、次のいずれかになります。

- 単一のIdmUserオブジェクト

- IdmUserオブジェクトのリスト

12.3 デバッグ

デバッグとトレース情報を有効にするには、UtilDebug.MODE_PROVISIONING_APIモードを設定します。ログ・メッセージの出力ストリームを指定しない場合、メッセージは標準出力に書き込まれます。

次のスニペットは、UtilDebug.MODE_PROVISIONING_APIモードを設定して出力ストリームを指定する方法を示しています。

Import oracle.ldap.util.UtilDebug;
FileOutputStream logStream = new FileOutputStream("ProvAPI.log")
…
UtilDebug.setDebugMode(UtilDebug.MODE_PROVISIONING_API);
UtilDebug.setPrintStream(logStream);

12.4 サンプル・コード

次のコード例は、ユーザーの作成、変更および検索方法と、アプリケーションのユーザー・プロビジョニング・ステータスの取得方法を示しています。

UtilDebug.setDebugMode(UtilDebug.MODE_PROVISIONING_API);
…
Configuration cfg = new Configuration(realm);
try {
debug("Connecting...");
InitialLdapContext ctx =
ConnectionUtil.getDefaultDirCtx(hostName, port, bindDn, passwd);
debug("Connected...");
UserFactory factory = UserFactoryBuilder.createUserFactory(ctx, cfg);

// Create
ModPropertySet mpSet = new ModPropertySet();
mpSet.addProperty("cn","Heman");
mpSet.addProperty("sn","The Master");
mpSet.addProperty("uid","Heman");
IdmUser idmUser = factory.createUser(mpSet);

// Modify
mpSet = new ModPropertySet();
mpSet.addProperty(LDIF.ATTRIBUTE_CHANGE_TYPE_REPLACE,"sn",
"Heman The Master");
mpSet.addProperty("givenName","Master of the Universe");
factory.modifyUser(idmUser, mpSet);

// Lookup         List users = factory.searchUsers(Util.IDTYPE_SIMPLE, "Hema*", null);
….

// Get user provisioning status for an application.
Application app = cfg.getApplication(lCtx, "Files", "FilesInstace");
String  status = idmUser.getProvisioningStatus(app);

// Another way to get user provisioning status
String userDn = idmUser.getDNn();
String  status = ProvUtil.getUserProvisioningStatus(dirctx,
Util.IDTYPE_DN, userDn, app.getType(), app.getName());
} catch (Exception ex) {
ex.printStackTrace();
//
}

13 Oracle Directory Integration Platform PL/SQL APIリファレンス

この章では、Oracle Directory Provisioning Integration Serviceの登録APIについて説明します。この章では、次の項目について説明します。

- 第13.1項「プロビジョニング・ファイルおよびインタフェースのバージョニング」

- 第13.2項「拡張可能なイベント定義の構成」

- 第13.3項「着信イベントおよび発信イベント」

- 第13.4項「PL/SQL双方向インタフェース(バージョン3.0)」

- 第13.5項「PL/SQL双方向インタフェース(バージョン2.0)」

- 第13.6項「プロビジョニング・イベント・インタフェース(バージョン1.1)」

13.1 プロビジョニング・ファイルおよびインタフェースのバージョニング

リリース9.0.2では、デフォルトのインタフェース・バージョンは1.1でした。リリース9.0.4および10.1.2.0.0では、インタフェース・バージョンはデフォルトで2.0です。リリース10.1.2.0.1では3つ目のバージョンが追加されました。管理者はこれらのいずれかを使用できます。

13.2 拡張可能なイベント定義の構成

この機能は、発信イベントでのみ使用可能です。プロビジョニング統合サービスがOracle Internet Directoryでの変更を解析し、アプリケーションに対して適切なイベントが生成および伝播されるかどうかを判断できるように、実行時に新しいイベントを定義できます。次に示すイベントは、インストール時に構成のみが行われるイベントです。

イベント定義(エントリ)は、次の属性で構成されます。

- イベント・オブジェクト型(orclODIPProvEventObjectType): これはイベントが関連付けられているオブジェクトの型を指定します。オブジェクトは、たとえばUSER、GROUP、IDENTITYなどになります。

- LDAP変更型(orclODIPProvEventChangeType): これは、すべてのLDAP操作でこの型のオブジェクトに対してイベントを生成できることを示します。(ADD、MODIFY、DELETEなど)

- イベント基準(orclODIPProvEventCriteria): 特定のオブジェクト型になるLDAPエントリを指定する追加の選択基準です。たとえば、Objectclass=orclUserV2の場合、この基準を満たすLDAPエントリはこのオブジェクト型として識別され、このエントリを変更すると適切なイベントが生成されます。

これらの属性を持つオブジェクト・クラスはorclODIPProvEventTypeConfigです。すべてのイベント型構成を格納するために、コンテナcn=ProvisioningEventTypeConfig,cn=odi,cn=oracle internet directoryが使用されます。

表13-1に、インストールの一部として事前定義されるイベント定義をリストします。

表13-1 事前定義済のイベント定義

イベント・オブジェクト型

LDAP変更型

イベント基準

ENTRY

ADD
MODIFY
DELETE

objectclass=*

USER

ADD
MODIFY
DELETE

objectclass=interorgperson

objectclass=orcluserv2

IDENTITY

ADD
MODIFY
DELETE

objectclass=interorgperson

objectclass=orcluserv2

GROUP

ADD
MODIFY
DELETE

objectclass=orclgroup

objectclass=groupofuniquenames

SUBSCRPTION

ADD
MODIFY
DELETE

objectclass=orclservicerecepient

SUBSCRIBER

ADD
MODIFY
DELETE

objectclass=orclsubscriber

すべてのイベント定義構成を格納するために、コンテナcn=ProvisioningEventTypeConfig,cn=odi,cn=oracle internet directoryが使用されます。事前定義されたイベント定義のLDAP構成は次のとおりです。

dn: orclODIPProvEventObjectType=ENTRY,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: ENTRY
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=*
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=USER,cn=ProvisioningEventTypeConfig,cn=odi,cn=oracle internet directory
orclODIPProvEventObjectType: USER
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=InetOrgPerson
orclODIPProvEventCriteria: objectclass=orcluserv2
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=IDENTITY,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: IDENTITY
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=inetorgperson
orclODIPProvEventCriteria: objectclass=orcluserv2
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=GROUP,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: GROUP
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=orclgroup
orclODIPProvEventCriteria: objectclass=groupofuniquenames
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=SUBSCRIPTION,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: SUBSCRIPTION
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=orclservicerecepient
objectclass: orclODIPProvEventTypeConfig

dn: orclODIPProvEventObjectType=SUBSCRIBER,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: SUBSCRIBER
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=orclsubscriber
objectclass: orclODIPProvEventTypeConfig

オブジェクト型XYZ(オブジェクト・クラスobjXYZで修飾)の新しいイベントを定義するには、Oracle Internet Directoryに次のエントリを作成します。DIPサーバーはこの新しいイベント定義を認識し、このイベントにサブスクライブするアプリケーションに対し、必要に応じてイベントを伝播します。

dn: orclODIPProvEventObjectType=XYZ,cn=ProvisioningEventTypeConfig,cn=odi, cn=oracle internet directory
orclODIPProvEventObjectType: XYZ
orclODIPProvEventLDAPChangeType: Add
orclODIPProvEventLDAPChangeType: Modify
orclODIPProvEventLDAPChangeType: Delete
orclODIPProvEventCriteria: objectclass=objXYZ
objectclass: orclODIPProvEventTypeConfig

これは、オブジェクト・クラスobjXYZを持つLDAPエントリが追加、変更または削除された場合、DIPによってXYZ_ADD、XYZ_MODIFYまたはXYZ_DELETEイベントが関連するアプリケーションに伝播されることを意味します。

13.3 着信イベントおよび発信イベント

アプリケーションは、イベントのサプライヤおよびコンシューマとして登録できます。プロビジョニング・サブスクリプション・プロファイルは、表13-2に示す属性を持ちます。

表13-2 プロビジョニング・サブスクリプション・プロファイルの属性

属性

説明

EventSubscriptions

発信イベントのみ(複数の値を取ります)。

DIPがこのアプリケーションに通知を送信する必要があるイベントです。この文字列の形式は、[USER]GROUP]:[domain_of_interest]:[DELETE|ADD|MODIFY(list_of_attributes_separated_by_comma)]です。

この文字列を異なる値で複数回リストすると、複数の値を指定できます。パラメータを指定しない場合は、デフォルトのUSER:organization_DN:DELETEGROUP:organization_DN:DELETEが使用され、組織識別名に属するユーザーとグループの削除通知が送信されます。

MappingRules

着信イベントのみ(複数の値を取ります)。

アプリケーションおよび修飾フィルタ条件から取得したオブジェクトの型をマップし、このイベントの対象のドメインを判断します。マッピングの形式は次のとおりです。

OBJECT_TYPE: Filter_condition: domain_of_interest

複数の値を指定できます。マッピングEMP:cn=users,dc=example,dc=comでは、取得したオブジェクトの型はEMPです。イベントの対象はドメインcn=users,dc=example,dc=comです。マッピングEMP:l=AMERICA:l=AMER,cn=users,dc=example,dc=comでは、取得したオブジェクトの型はEMPです。イベントの対象はドメインl=AMER,cn=users,dc=example,dc=comです。

permittedOperations

着信イベントのみ(複数の値を取ります)。

アプリケーションがプロビジョニング統合サービスに送信する権限を持つイベントの型を定義します。マッピングの形式は次のとおりです。

Event_Object: affected_domain:operation(attributes, . . . )

マッピングIDENTITY:cn=users,dc=example,dc=com:ADD(*)では、IDENTITY_ADDイベントが指定したドメインに対して許可され、すべての属性も許可されます。マッピングIDENTITY:cn=users,dc=example,dc=com:MODIFY(cn,sn.mail,telephonenumber)では、IDENTITY_MODIFYイベントがリスト内の属性に対してのみ許可されます。その他の属性は暗黙的に無視されます。

13.4 PL/SQL双方向インタフェース(バージョン3.0)

バージョン3.0のPL/SQLインタフェースを使用する前に、次の関連資料を参照してください。

- 付録A「ユーザー・プロビジョニング用のJavaプラグイン」.

- 『Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド』の「Oracle Directory Integration Platformでのプロビジョニングの概要」の章

- 『Oracle Fusion Middleware Oracle Directory Integration Platform管理者ガイド』の「プロビジョニング統合アプリケーションのデプロイ」の章

PL/SQLコールバック・インタフェースを使用するには、Oracle Directory Provisioning Integration Serviceがアプリケーション固有のデータベースで起動するPL/SQLパッケージを開発する必要があります。パッケージには任意の名前を選択できますが、サブスクリプション時にパッケージを登録する際は、必ず同じ名前を使用してください。次のPL/SQLパッケージ仕様を使用してパッケージを実装します。

DROP TYPE LDAP_EVENT_LIST_V3;
DROP TYPE LDAP_EVENT_V3;
DROP TYPE LDAP_EVENT_STATUS_LIST_V3;
DROP TYPE LDAP_ATTR_LIST_V3;
DROP TYPE LDAP_ATTR_V3;
DROP TYPE LDAP_ATTR_VALUE_LIST_V3;
DROP TYPE LDAP_ATTR_VALUE_V3;

--------------------------------------------------------------------------------------------------
-- Name: LDAP_ATTR_VALUE_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains values of an attribute. A list of one or
more of this object is passed in any event.
---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_ATTR_VALUES_V3 AS OBJECT (
attr_value       VARCHAR2(4000),
attr_bvalue      RAW(2048),
attr_value_len   INTEGER
);

GRANT EXECUTE ON LDAP_ATTR_VALUE_V3 to public;

CREATE TYPE LDAP_ATTR_VALUE_LIST_V3 AS TABLE OF LDAP_ATTR_VALUE_V3;
/
GRANT EXECUTE ON LDAP_ATTR_VALUE_LIST_V3 to public;

--------------------------------------------------------------------------------------------------
-- Name: LDAP_ATTR_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains details regarding an attribute. A list of
one or more of this object is passed in any event.
---------------------------------------------------------------------------------------------------
CREATE TYPE LDAP_ATTR_V3 AS OBJECT (
attr_name        VARCHAR2(256),
attr_type        INTEGER ,
attr_mod_op      INTEGER,
attr_values      LDAP_ATTR_VALUE_LIST_V3
);

GRANT EXECUTE ON LDAP_ATTR_V3 to public;

CREATE TYPE LDAP_ATTR_LIST_V3 AS TABLE OF LDAP_ATTR_V3;
/
GRANT EXECUTE ON LDAP_ATTR_LIST_V3 to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains event information plus the attribute List.
---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_EVENT_V3 AS OBJECT (
event_type  VARCHAR2(32),
event_id    VARCHAR2(32),
event_src   VARCHAR2(1024),
event_time  VARCHAR2(32),
object_name VARCHAR2(1024),
object_type VARCHAR2(32),
object_guid VARCHAR2(32),
object_dn   VARCHAR2(1024),
profile_id  VARCHAR2(1024),
attr_list   LDAP_ATTR_LIST_V3 ) ;
/

GRANT EXECUTE ON LDAP_EVENT_V3 to public;
CREATE TYPE LDAP_EVENT_LIST_V3 AS TABLE OF LDAP_EVENT_V3;
/
GRANT EXECUTE ON LDAP_EVENT_LIST_V3 to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT_STATUS_V3
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains information that is sent by the consumer
of an event to the supplier in response to the actual event.
---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_EVENT_STATUS_V3 AS OBJECT (
event_id     VARCHAR2(32),
status       VARCHAR2(32),
status_msg   VARCHAR2(2048),
object_guid  VARCHAR(32)
) ;
/

GRANT EXECUTE ON LDAP_EVENT_STATUS_V3 to public;
CREATE TYPE LDAP_EVENT_STATUS_LIST_V3 AS TABLE OF LDAP_EVENT_STATUS_V3;
/
GRANT EXECUTE ON LDAP_EVENT_STATUS_LIST_V3 to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_NTFY
-- DESCRIPTION: This is the interface to be implemented by provisioning integrated
applications to send information to and receive information from the directory.
The name of the package can be customized as needed. The function and procedure
names within this package should not be changed.
---------------------------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE LDAP_NTFY AS

-- The Predefined Event Types

ENTRY_ADD     CONSTANT VARCHAR2 (32) :='ENTRY_ADD';
ENTRY_DELETE  CONSTANT VARCHAR2 (32) :='ENTRY_DELETE';
ENTRY_MODIFY  CONSTANT VARCHAR2 (32) :='ENTRY_MODIFY';

USER_ADD     CONSTANT VARCHAR2 (32) :='USER_ADD';
USER_DELETE  CONSTANT VARCHAR2 (32) :='USER_DELETE';
USER_MODIFY  CONSTANT VARCHAR2 (32) :='USER_MODIFY';

IDENTITY_ADD     CONSTANT VARCHAR2 (32) :='IDENTITY_ADD';
IDENTITY_DELETE  CONSTANT VARCHAR2 (32) :='IDENTITY_DELETE';
IDENTITY_MODIFY  CONSTANT VARCHAR2 (32) :='IDENTITY_MODIFY';

GROUP_ADD     CONSTANT VARCHAR2 (32) :='GROUP_ADD';
GROUP_DELETE  CONSTANT VARCHAR2 (32) :='GROUP_DELETE';
GROUP_MODIFY  CONSTANT VARCHAR2 (32) :='GROUP_MODIFY';

SUBSCRIPTION_ADD     CONSTANT VARCHAR2(32) :='SUBSCRIPTION_ADD';
SUBSCRIPTION_DELETE  CONSTANT VARCHAR2(32) :='SUBSCRIPTION_DELETE';
SUBSCRIPTION_MODI    CONSTANT VARCHAR2(32) :='SUBSCRIPTION_MODIFY';

SUBSCRIBER_ADD     CONSTANT VARCHAR2(32) :='SUBSCRIBER_ADD';
SUBSCRIBER_DELETE  CONSTANT VARCHAR2(32) :='SUBSCRIBER_DELETE';
SUBSCRIBER_MODIFY  CONSTANT VARCHAR2(32) :='SUBSCRIBER_MODIFY';

-- The Attribute Type

ATTR_TYPE_STRING            CONSTANT NUMBER  := 0;
ATTR_TYPE_BINARY            CONSTANT NUMBER  := 1;
ATTR_TYPE_ENCRYPTED_STRING  CONSTANT NUMBER  := 2;

-- The Attribute Modification Type

MOD_ADD      CONSTANT NUMBER  := 0;
MOD_DELETE   CONSTANT NUMBER  := 1;
MOD_REPLACE  CONSTANT NUMBER  := 2;

-- The Event dispostions constants

EVENT_SUCCESS            CONSTANT VARCHAR2(32)  :='EVENT_SUCCESS';
EVENT_IN_PROGRESS        CONSTANT VARCHAR2(32)  :='EVENT_IN_PROGRESS';
EVENT_USER_NOT_REQUIRED  CONSTANT VARCHAR2(32)  :='EVENT_USER_NOT_REQUIRED';
EVENT_ERROR              CONSTANT VARCHAR2(32)  :='EVENT_ERROR';
EVENT_ERROR_ALERT        CONSTANT VARCHAR2(32)  :='EVENT_ERROR_ALERT';
EVENT_ERROR_ABORT        CONSTANT VARCHAR2(32)  :='EVENT_ERROR_ABORT';

-- The Actual Callbacks

FUNCTION GetAppEvents (events OUT LDAP_EVENT_LIST_V3)
RETURN NUMBER;

-- Return CONSTANTS
EVENT_FOUND      CONSTANT NUMBER:= 0;
EVENT_NOT_FOUND  CONSTANT NUMBER:= 1403;

着信イベントを処理できない場合、プロビジョニング・サーバーはEVENT_ERROR_ALERTステータスを戻し、その結果Oracle Enterprise Managerにトリガーが生成されます。

イベントを処理できるが、そのイベントが処理できないイベントである(たとえば、変更、サブスクライブまたは削除の対象となるユーザーが存在しない)場合、プロビジョニング・サーバーはEVENT_ERRORを戻し、不具合があることをアプリケーションに示します。ステータス・イベントは、再度アプリケーションによって処理されます。

EVENT_ERRORは、ディレクトリ操作ではエラーがなかったことを意味します。その他の理由により、イベントは処理されませんでした。

-- PutAppEventStatus() : DIP Server invokes this callback in the remote Data
base after processing an event it had received using the GetAppEvents()
callback.  For every event received, the DIP server sends the status event
back after processing the event.  This API will NOT be required by the
Oracle Collaboration Suite release 3.0 components.

PROCEDURE PutAppEventStatus (event_status IN LDAP_EVENT_STATUS_LIST_V3);

-- PutOIDEvents() : DIP Server invokes this API in the remote Database. DIP
server sends event to applications using this callback. It also expects a status
event object in response as an OUT parameter. This API needs to be implemented
by all the Oracle Collaboration Suite release 3.0 components.

PROCEDURE PutOIDEvents (event         IN  LDAP_EVENT_LIST_V3,
event_status  OUT LDAP_EVENT_STATUS_LIST_V3);

END LDAP_NTFY;
/

13.5 PL/SQL双方向インタフェース(バージョン2.0)

PL/SQLコールバック・インタフェースを使用するには、プロビジョニング統合サービスがアプリケーション固有のデータベースで起動するPL/SQLパッケージを開発する必要があります。パッケージには任意の名前を選択できますが、サブスクリプション時にパッケージを登録する際は、必ず同じ名前を使用してください。次のPL/SQLパッケージ仕様を使用してパッケージを実装します。

DROP TYPE LDAP_EVENT;
DROP TYPE LDAP_EVENT_STATUS;
DROP TYPE LDAP_ATTR_LIST;
DROP TYPE LDAP_ATTR;
--------------------------------------------------------------------------------
-- Name: LDAP_ATTR
-- Data Type: OBJECT

DESCRIPTION: This structure contains details regarding an attribute. A list of one
--           or more of this object is passed in any event.
---------------------------------------------------------------------------------------------------
CREATE TYPE LDAP_ATTR AS OBJECT (
attr_name        VARCHAR2(256),
attr_value       VARCHAR2(4000),
attr_bvalue      RAW(2048),
attr_value_len   INTEGER,
attr_type        INTEGER ,
attr_mod_op      INTEGER
);

GRANT EXECUTE ON LDAP_ATTR to public;

CREATE TYPE LDAP_ATTR_LIST AS TABLE OF LDAP_ATTR;
/
GRANT EXECUTE ON LDAP_ATTR_LIST to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains event information plus the attribute
--              list.
---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_EVENT AS OBJECT (
event_type  VARCHAR2(32),
event_id    VARCHAR2(32),
event_src   VARCHAR2(1024),
event_time  VARCHAR2(32),
object_name VARCHAR2(1024),
object_type VARCHAR2(32),
object_guid VARCHAR2(32),
object_dn   VARCHAR2(1024),
profile_id  VARCHAR2(1024),
attr_list   LDAP_ATTR_LIST ) ;
/

GRANT EXECUTE ON LDAP_EVENT to public;

---------------------------------------------------------------------------------------------------
-- Name: LDAP_EVENT_STATUS
-- Data Type: OBJECT
-- DESCRIPTION: This structure contains information that is sent by the
--              consumer of an event to the supplier in response to the
--              actual event.
---------------------------------------------------------------------------------------------------

CREATE TYPE LDAP_EVENT_STATUS AS OBJECT (
event_id          VARCHAR2(32),
orclguid          VARCHAR(32),
error_code        INTEGER,
error_String      VARCHAR2(1024),
error_disposition VARCHAR2(32)) ;
/

GRANT EXECUTE ON LDAP_EVENT_STATUS to public;

13.6 プロビジョニング・イベント・インタフェース(バージョン1.1)

プロビジョニング統合サービスによって生成されたイベントをコンシュームするためのロジックを開発する必要があります。アプリケーションとプロビジョニング統合サービス間のインタフェースは、表ベースまたはPL/SQLコールバックを使用したものになります。

PL/SQLコールバック・インタフェースを使用するには、プロビジョニング統合サービスがアプリケーション固有のデータベースで起動するPL/SQLパッケージを開発する必要があります。パッケージには任意の名前を選択できますが、サブスクリプション時にパッケージを登録する際は、必ず同じ名前を使用してください。次のPL/SQLパッケージ仕様を使用してパッケージを実装します。

Rem
Rem      NAME
Rem         ldap_ntfy.pks - Provisioning Notification Package Specification.
Rem

DROP TYPE LDAP_ATTR_LIST;
DROP TYPE LDAP_ATTR;

-- LDAP ATTR
----------------------------------------------------------------
--
--  Name        : LDAP_ATTR
--  Data Type   : OBJECT
--  DESCRIPTION : This structure contains details regarding
--                an attribute.
--
----------------------------------------------------------------
CREATE TYPE LDAP_ATTR AS OBJECT (
attr_name        VARCHAR2(255),
attr_value       VARCHAR2(2048),
attr_bvalue      RAW(2048),
attr_value_len   INTEGER,
attr_type        INTEGER  -- (0 - String, 1 - Binary)
attr_mod_op      INTEGER
);
/
GRANT EXECUTE ON LDAP_ATTR to public;

-------------------------------------------------------------
--
--  Name        : LDAP_ATTR_LIST
--  Data Type   : COLLECTION
--  DESCRIPTION : This structure contains collection
--                of attributes.
--
-------------------------------------------------------------
CREATE TYPE LDAP_ATTR_LIST AS TABLE OF LDAP_ATTR;
/
GRANT EXECUTE ON LDAP_ATTR_LIST to public;

-------------------------------------------------------------------------------
--
--  NAME        : LDAP_NTFY
--  DESCRIPTION : This is a notifier interface implemented by Provisioning System
--                clients to receive information about changes in Oracle Internet
--                Directory. The name of package can be customized as needed.
--                The function names within this package should not be changed.
--
--
-------------------------------------------------------------------------------
CREATE OR REPLACE PACKAGE LDAP_NTFY AS

--
-- LDAP_NTFY data type definitions
--

-- Event Types
USER_DELETE               CONSTANT VARCHAR2(256) := 'USER_DELETE';
USER_MODIFY               CONSTANT VARCHAR2(256) := 'USER_MODIFY';
GROUP_DELETE              CONSTANT VARCHAR2(256) := 'GROUP_DELETE';
GROUP_MODIFY              CONSTANT VARCHAR2(256) := 'GROUP_MODIFY';

-- Return Codes (Boolean)
SUCCESS                   CONSTANT NUMBER  := 1;
FAILURE                   CONSTANT NUMBER  := 0;

-- Values for attr_mod_op in LDAP_ATTR object.
MOD_ADD                   CONSTANT NUMBER  := 0;
MOD_DELETE                CONSTANT NUMBER  := 1;
MOD_REPLACE               CONSTANT NUMBER  := 2;
---------------------------------------------------------------------------------------------------
-- Name: LDAP_NTFY
-- DESCRIPTION: This is the interface to be implemented by Provisioning System
--              clients to send information to and receive information from
--              Oracle Internet Directory. The name of the package can be
--              customized as needed. The function names within this package
--              should not be changed.
---------------------------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE LDAP_NTFY AS

13.6.1 事前定義されるイベント型

ENTRY_ADD                CONSTANT VARCHAR2 (32)    := 'ENTRY_ADD';
ENTRY_DELETE             CONSTANT VARCHAR2 (32)    := 'ENTRY_DELETE';
ENTRY_MODIFY             CONSTANT VARCHAR2 (32)    := 'ENTRY_MODIFY';

USER_ADD                 CONSTANT VARCHAR2 (32)    := 'USER_ADD';
USER_DELETE              CONSTANT VARCHAR2 (32)    := 'USER_DELETE';
USER_MODIFY CONSTANT     VARCHAR2(32)              := 'USER_MODIFY';

IDENTITY_ADD             CONSTANT VARCHAR2 (32)    := 'IDENTITY_ADD';
IDENTITY_DELETE          CONSTANT VARCHAR2 (32)    := 'IDENTITY_DELETE';
IDENTITY_MODIFY          CONSTANT VARCHAR2 (32)    := 'IDENTITY_MODIFY';

GROUP_ADD                CONSTANT VARCHAR2 (32)    := 'GROUP_ADD';
GROUP_DELETE             CONSTANT VARCHAR2 (32)    := 'GROUP_DELETE';
GROUP_MODIFY             CONSTANT VARCHAR2 (32)    := 'GROUP_MODIFY';

SUBSCRIPTION_ADD         CONSTANT VARCHAR2(32)     := 'SUBSCRIPTION_ADD';
SUBSCRIPTION_DELETE      CONSTANT VARCHAR2(32)     := 'SUBSCRIPTION_DELETE';
SUBSCRIPTION_MODI        CONSTANT VARCHAR2(32)     := 'SUBSCRIPTION_MODIFY';

SUBSCRIBER_ADD           CONSTANT VARCHAR2(32)     := 'SUBSCRIBER_ADD';
SUBSCRIBER_DELETE        CONSTANT VARCHAR2(32)     := 'SUBSCRIBER_DELETE';
SUBSCRIBER_MODIFY        CONSTANT VARCHAR2(32)     := 'SUBSCRIBER_MODIFY';

13.6.2 属性の型

ATTR_TYPE_STRING              CONSTANT NUMBER    := 0;
ATTR_TYPE_BINARY              CONSTANT NUMBER    := 1;
ATTR_TYPE_ENCRYPTED_STRING    CONSTANT NUMBER    := 2;

13.6.3 属性の変更型

MOD_ADD        CONSTANT NUMBER    := 0;
MOD_DELETE     CONSTANT NUMBER    := 1;
MOD_REPLACE    CONSTANT NUMBER    := 2;

13.6.4 イベント処理の定数

EVENT_SUCCESS    CONSTANT VARCHAR2(32)    := 'EVENT_SUCCESS';
EVENT_ERROR      CONSTANT VARCHAR2(32)    := 'EVENT_ERROR';
EVENT_RESEND     CONSTANT VARCHAR2(32)    := 'EVENT_RESEND';

13.6.5 コールバック

コールバックは、通知イベントの送受信のためにプロビジョニング統合サービスによって起動されるファンクションです。オブジェクトのイベントを送信する際は、関連する属性も他の詳細とともに送信できます。属性は属性コンテナのコレクション(配列)として正規化されていない形式で送信されます。属性に値が2つある場合、コレクションに2つの行がある状態で送信されます。

13.6.5.1 GetAppEvent()

Oracle Directory Integration and Provisioningサーバーは、リモート・データベースでこのAPIを起動します。イベントに応答するのはアプリケーションです。Oracle Directory Integration and Provisioningはイベントを処理し、PutAppEventStatus()コールバックを使用して、ステータスを戻します。GetAppEvent()の戻り値は、イベントが戻されたかどうかを示します。

FUNCTION GetAppEvent (event OUT LDAP_EVENT)
RETURN NUMBER;

-- Return CONSTANTS
EVENT_FOUND          CONSTANT NUMBER  := 0;
EVENT_NOT_FOUND      CONSTANT NUMBER  := 1403;

イベントを処理できない(LDAPエラーが発生した)場合、プロビジョニング・サーバーはEVENT_RESENDを戻します。GetAppEvent()が再度起動されたときに、アプリケーションはそのイベントを再送する必要があります。

イベントを処理できるが、そのイベントが処理できないイベントである(たとえば、変更、サブスクライブまたは削除の対象となるユーザーが存在しない)場合、プロビジョニング・サーバーはEVENT_ERRORを戻し、不具合があることをアプリケーションに示します。イベントの再送は不要です。このイベントはアプリケーションによって処理されます。

前述のEVENT_RESENDとEVENT_ERRORの違いに注意してください。EVENT_RESENDの場合、イベントを適用することはできたがサーバーではできなかったことを意味します。そのため、再度イベントを取得すると正常に処理されます。

EVENT_ERRORは、ディレクトリ操作の実行中にはエラーはなかったが、その他の理由でイベントが処理されなかったことを意味します。

13.6.5.2 PutAppEventStatus()

Oracle Directory Integration and Provisioningサーバーは、GetAppEvent()コールバックを使用して受信したイベントを処理した後、リモート・データベースでこのコールバックを起動します。受信した各イベントについて、Oracle Directory Integration and Provisioningサーバーはイベントを処理した後、イベントのステータスを戻します。

PROCEDURE PutAppEventStatus (event_status IN LDAP_EVENT_STATUS);

13.6.5.3 PutOIDEvent()

Oracle Directory Integration and Provisioningサーバーは、リモート・データベースでこのAPIを起動します。Oracle Directory Integration Serverはこのコールバックを使用して、アプリケーションにイベントを送信します。また、OUTパラメータとして、イベント・ステータス・オブジェクトが戻されることを想定します。有効なイベント・ステータス・オブジェクトが戻されない場合、またはRESENDの場合、Oracle Directory Integration and Provisioningサーバーはイベントを再送します。EVENT_ERRORの場合、サーバーはイベントを再送しません。

PROCEDURE PutOIDEvent (event  IN  LDAP_EVENT,   event_status  OUT LDAP_EVENT_STATUS);
END LDAP_NTFY;
/

第III部

付録

第III部では、Oracle Collaboration Suiteでのプロビジョニングのカスタマイズに使用できるプラグインについて説明します。また、この部には、DSMLの構文と使用方法に関する付録も含まれます。

- 付録A「ユーザー・プロビジョニング用のJavaプラグイン」.

- 付録B「DSML構文」

- 付録C「Netscape LDAP SDK APIからOracle LDAP SDK APIへの移行」

A ユーザー・プロビジョニング用のJavaプラグイン

この付録では、Oracle Directory Integration and Provisioningプロビジョニング・サービス、リリース3.0の典型的なデプロイメントでプロビジョニング・ポリシー評価、データ検証、データ操作およびイベント配信をカスタマイズするプラグインの使用方法について説明します。

Oracleのプロビジョニング・サーバーは、デプロイメントにおけるすべてのプロビジョニング要件には対応していません。そのため、ユーザーの作成、変更および削除の様々な段階でフックが提供されます。これらのフックにより、企業では、独自のビジネス・ルールを組み入れ、各要件に合せて情報作成をカスタマイズできます。フックは、Javaプラグインの形式を取ります。

この付録では、次の項目について説明します。

- 第A.1項「プロビジョニング・プラグイン・タイプとその用途」

- 第A.2項「プロビジョニング・プラグインの要件」

- 第A.3項「データ・エントリ・プロビジョニング・プラグイン」

- 第A.4項「データ・アクセス・プロビジョニング・プラグイン」

- 第A.5項「イベント配信プロビジョニング・プラグイン」

- 第A.6項「プロビジョニング・プラグインのリターン・ステータス」

- 第A.7項「プロビジョニング・プラグインの構成テンプレート」

- 第A.8項「プロビジョニング・プラグインのサンプル・コード」

A.1 プロビジョニング・プラグイン・タイプとその用途

プロビジョニング・プラグインには、次の3つのタイプがあります。

- データ・エントリ・プラグイン

- データ操作およびデータ・アクセス・プラグイン

- イベント配信プラグイン

データ・エントリ・プラグインは、同期プロビジョニングまたは非同期プロビジョニングを利用するプロビジョニング・フレームワークと統合されるアプリケーションで使用されます。データ・アクセス・プラグインは、同期プロビジョニング用のプロビジョニング・フレームワークと統合されるアプリケーションでのみ使用されます。イベント配信プラグインは、非同期プロビジョニング用のプロビジョニング・フレームワークと統合されるアプリケーションでのみ使用されます。

ディレクトリのベース・ユーザー情報に影響を与えるOracleプロビジョニング・コンソール、Oracle Directory Integration and Provisioningサーバーおよびその他のメカニズムでは、情報の作成時にこれらのプラグインが起動されます。データ・エントリ・プラグインを構成することで、デプロイメントでは次の操作を実行できます。

- アプリケーション・ユーザーの属性値の検証

- ベース・ユーザーの属性値の検証

- アプリケーション・ユーザーの属性値の拡張

- ベース・ユーザーの属性値の拡張

- プロビジョニング・ポリシーの評価

デプロイ済のアプリケーションでアプリケーション・ユーザー情報を管理するには、そのアプリケーション用にデータ・アクセス・プラグインを構成する必要があります。このプラグイン・タイプを使用すると、ディレクトリ外部で、またはディレクトリ内部の複数エントリとしてアプリケーション情報を管理できます。

データ・エントリ・プラグインとデータ・アクセス・プラグインは、通常、次のいずれかの環境から起動されます。

- Oracle Delegated Administration Servicesのユーザー・プロビジョニング・コンソール

- Oracle Directory Integration and Provisioningサーバー

- プロビジョニングAPI

- バルク・プロビジョニング・ツール

イベント配信プラグインは、Javaインタフェース型を備え、プロビジョニング・イベントにサブスクライブするアプリケーションに必要です。同期プロビジョニング対応のアプリケーションには、イベント配信プラグインを実装しないでください。

A.2 プロビジョニング・プラグインの要件

アプリケーションに指定するすべてのプラグインは、標準のLDIFテンプレートでディレクトリにアップロードできるJARファイルに含まれている必要があります。サンプルは、第A.7項「プロビジョニング・プラグインの構成テンプレート」の項を参照してください。プラグイン・インタフェース定義は、$ORACLE_HOME/jlib/ldapjclnt10.jarにあります。詳細は、『Oracle Fusion Middleware Java API Reference for Oracle Internet Directory』およびパブリック・インタフェースを参照してください。アプリケーションに追加のjarファイルが必要な場合、それらのファイルもアップロードできます。

次のディレクトリにファイルを配置します。

$MW_HOME/user_projects/domains/DOMAIN_NAME/servers/MANAGED_SERVER_NAME/tmp/_WL_user/DIP_VERSION_NUMBER/RANDOM_CHARACTERS/APP-INF/lib/

A.3 データ・エントリ・プロビジョニング・プラグイン

データ・エントリ・プラグインの形式には、次の2つがあります。

- プレデータ・エントリ・プラグイン

- ポストデータ・エントリ・プラグイン

これらのプラグインのいずれかを使用する場合、oracle.idm.provisioning.plugin.IdataEntryPluginインタフェースを実装する必要があります。このインタフェースには、3つのメソッドがあります。次に例を示します。

/**
* The applications can perform a post data entry operation by
* implementing this method.
*
* @param appCtx the application context
* @param idmUser the IdmUser object
* @param baseUserAttr Base user properties
* @param appUserAttr App user properties
* @throws PluginException when an exception occurs.
*/
public PluginStatus process(ApplicationContext appCtx,
IdmUser idmUser, ModPropertySet baseUserAttr,
ModPropertySet appUserAttr)throws PluginException;
/**
* Returns the Modified Base User properties
*
* @return ModPropertySet modified base user properties.
*/
public ModPropertySet getBaseAttrMods();

/**
* Returns the Modified App User properties
*
* @return ModPropertySet modified app user properties.
*/
public ModPropertySet getAppAttrMods();

通常、プラグインを実装する開発者は、データ検証またはポリシー評価にこれらのメソッドを使用します。ポリシー評価の場合、ベース・ユーザー属性が評価の決定に使用されます。

アプリケーション・コンテキスト・オブジェクトには、次の情報が含まれます。

- LDAPディレクトリ・コンテキスト
アプリケーションでディレクトリ操作を実行する場合、アプリケーション・オブジェクトからLDAPコンテキストを取得できます。このLDAPコンテキストは、プラグインでクローズしないよう注意してください。

- プラグイン・コール・モード
プラグインは、Oracleプロビジョニング・コンソール、Oracle Directory Integration and Provisioningサーバー、またはプロビジョニングAPIを起動するその他の環境からコールされます。コール元の環境がOracle Directory Integration and Provisioningの場合、プロビジョニング・サービスがプラグインをコールします。可能な値はINTERACTIVE_MODEとAUTOMATIC_MODEの2つです。1番目のモードは、Oracle Delegated Administration Servicesとクライアント・アプリケーション間の対話を通じてプラグインが起動されたことを示します。2番目は、ユーザー操作の発生しないOracle Directory Integration and Provisioningによってプラグインが起動されたことを示します。

- クライアント・ロケール
プラグインでは、特にOracle Delegated Administration Servicesから起動された場合などに、クライアント・ロケールの特定が必要になる可能性があります。

- プラグイン・コール操作
ユーザーの作成操作と変更操作の両方で、データ・エントリ・プラグインを使用できます。これらのプラグインを同じクラスに実装することも可能です。このような場合、プラグインでどの操作を起動するかを決定する必要があります。アプリケーション・コンテキスト・オブジェクトでは、OP_CREATEおよびOP_MODIFYという値を使用して操作を識別します。

- プラグイン起動ポイント
データ・エントリ・プラグインは、通常、ユーザーをアプリケーションにプロビジョニングする必要があるかどうかを決定する際に使用します。プレデータ・エントリ・プラグインまたはポストデータ・エントリ・プラグインにより、ポリシー評価とデータ検証を実行できます。2つのプラグインのいずれか、または両方を選択できます。両方選択する場合、2つのプラグインを同じクラスに実装することが可能です。アプリケーション・コンテキスト・オブジェクトを使用して、実際に起動するプラグインを指定します。これには、PRE_DATA_ENTRYおよびPOST_DATA_ENTYという値を使用します。

- コールバック・コンテキスト
操作にプレ・プラグインとポスト・プラグインの両方を使用し、プレ・プラグインでポスト・プラグインと情報を共有する場合、プレデータ・エントリ・プラグインのアプリケーション・コンテキスト・オブジェクトにコールバック・コンテキストを設定できます。これにより、ポストデータ・エントリ・プラグインでは、このコールバック・コンテキストを取得して使用できます。

- ロギング
アプリケーション・コンテキスト・オブジェクトで提供されるログ・メソッドを使用して、プラグインの情報を記録できます。

コール順序は、次のようになります。

1. Oracle Internet Directoryの構成情報オブジェクトに基づいて、プラグイン・オブジェクトをダウンロードしてインスタンス化します。

2. プラグインに渡されるアプリケーション・コンテキスト・オブジェクトを構成します。

3. process method()をコールします。

4. getBaseAttrMods()をコールして、process()で変更されるベース・ユーザー属性を取得します。

5. getBaseAttrMods()により戻されたベース・ユーザー属性を、プラグイン実行ステータスに応じたベース・ユーザー属性にマージします。実行ステータスはsuccessまたはfailureのどちらかです。プラグインの実装元は有効なプラグイン実行ステータス・オブジェクトを戻す必要があります。nullが返された場合、実行ステータスは失敗とみなされます。ベース・ユーザーのマージは、プラグイン実行ステータスが成功の場合のみ行われます。

6. プラグインのgetAppAttrMods()をコールします。このメソッドは、process()で変更されるアプリケーション・ユーザー属性を取得します。

7. プラグインにより戻されるユーザー・プロビジョニング・ステータスに応じて、getAppAttrMods()から戻されたアプリケーション・ユーザー属性と元のアプリケーション・ユーザー属性をマージします。

A.3.1 プレデータ・エントリ・プロビジョニング・プラグイン

プレデータ・エントリ・プラグインは、アプリケーション属性の値を生成します。アプリケーション登録時に指定された属性のデフォルト値が、現在のベース・ユーザー属性とともにこのプラグインに渡されます。Oracle Delegated Administration Servicesなどの対話的な起動環境の場合、戻り値はUIに表示されます。

プレデータ・エントリ・プラグインでは、ユーザーをアプリケーションにプロビジョニングするかどうかを決定できます。プラグインは、ベース・ユーザー属性を調査して決定を行います。プラグインは、作成操作および変更操作中に起動されます。2つの操作を1つのプラグイン・クラスでサポートするか、操作ごとに1つのクラスを割り当てることが可能です。

アプリケーションで作成操作と変更操作にプレデータ・エントリ・プラグインを使用する場合、Oracle Internet Directoryのアプリケーション・コンテナの下に2つの構成エントリを作成する必要があります。最初のエントリは、作成操作用です。

dn: cn=PRE_DATA_ENTRY_CREATE, cn=Plugins, cn=FILES, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: oracle.myapp.provisioning.UserCreatePlugin
orclODIPPluginAddInfo: Pre Data Entry Plugin for CREATE operation

2番目のエントリは、変更操作用です。

dn: cn=PRE_DATA_ENTRY_MODIFY, cn=Plugins, cn=FILES, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: oracle.myapp.provisioning.UserModifyPlugin
orclODIPPluginAddInfo: Pre Data Entry Plugin for MODIFY operation

この例では、作成プラグインと変更プラグインで別々のクラスを使用しています。

A.3.2 ポストデータ・エントリ・プロビジョニング・プラグイン

ポストデータ・エントリ・プラグインは、ユーザーがUIに入力したデータを検証します。また、導出される属性値を生成します。いずれかのアプリケーションでプラグインが失敗すると、UIの処理は停止します。ユーザー・エントリをディレクトリに作成するには、すべてのアプリケーションでデータ検証に成功する必要があります。ただし、非UI環境や自動ルーティング処理の場合、プラグインを実装する開発者は、プラグインのコール・モード(INTERACTIVE_MODEまたはAUTOMATIC_MODE)に基づいてエラーを生成するか処理を継続するかを決定できます。

プレデータ・エントリ・プラグインと同様に、ポストデータ・エントリ・プラグインも、作成操作および変更操作中に起動されます。アプリケーションでは、2つの操作を1つのプラグイン・クラスに実装するか、操作ごとに個別のクラスに実装することが可能です。

作成操作と変更操作にポストデータ・エントリ・プラグインを使用する場合、Oracle Internet Directoryのアプリケーション・コンテナの下に2つの構成エントリを作成する必要があります。最初のエントリは、作成操作用です。

dn: cn=POST_DATA_ENTRY_CREATE, cn=Plugins, cn=FILES, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: oracle.myapp.provisioning.UserMgmtPlugin
orclODIPPluginAddInfo: Post Data Entry Plugin for CREATE and MODIFY
operations

2番目のエントリは、変更操作用です。

dn: cn=POST_DATA_ENTRY_MODIFY, cn=Plugins, cn=FILES, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: oracle.myapp.provisioning.UserMgmtPlugin
orclODIPPluginAddInfo: Post Data Entry Plugin for MODIFY and CREATE operation

この例でも、作成プラグインと変更プラグインで別々のクラスを使用しています。

A.4 データ・アクセス・プロビジョニング・プラグイン

データ・アクセス・プラグインの主な目的は、ディレクトリにあるユーザーのアプリケーション固有の情報を管理することです。このプラグインを使用して、情報を作成および取得できます。

データ・アクセス・プラグインは、ユーザーが作成されると、Oracle Delegated Administration Services、Oracle Directory Integration and Provisioningまたはバルク・プロビジョニング・ツールのいずれかによって起動され、アプリケーションに対するプロビジョニングをリクエストします。

データ・アクセス・プラグインは、変更操作および削除操作中にも起動されます。このプラグインで、アプリケーション情報を更新または削除できます。

データ・アクセス・プラグインを使用する場合、oracle.idm.provisioning.plugin.IDataAccessPluginインタフェースを実装します。このインタフェースは、次のとおりです。

/**
* The applications can create/modify/delete the user footprint by
* implementing this method.
*
* @param appCtx the application context
* @param idmUser IdmUser object
* @param baseUserAttr Base user properties
* @param appUserAttr App user properties
*
* @return PluginStatus a plugin status object, which must contain
* the either <codE>IdmUser.PROVISION_SUCCESS</CODE> or
* <codE>IdmUser.PROVISION_FAILURE</CODE> provisioning status
*
* @throws PluginException when an exception occurs.
*/
public PluginStatus process(ApplicationContext appCtx,
IdmUser idmUser, ModPropertySet baseUserAttr,
ModPropertySet ppUserAttr) throws PluginException;

/**
* The applications can return their user footprint by
* implementing this method. Use <CODE>
* oracle.ldap.util.VarPropertySet </CODE>
* as the return object
*
* <PRE>
*  For Ex.
*   PropertySet retPropertySet =  null;
*   retPropertySet = new VarPropertySet();
*
*   //Fetch the App data and add it to retPropertySet
*   retPropertySet.addProperty("name", "value");
*   ..
*   return retPropertySet;
* </PRE>
*
* @throws PluginException when an exception occurs.
*/
public PropertySet getAppUserData(ApplicationContext appCtx,
IdmUser user, String reqAttrs[]) throws PluginException;

アプリケーションのユーザー情報を管理する場合、ディレクトリのアプリケーション・コンテナの下にプラグイン構成エントリを作成する必要があります。このエントリの例は、次のとおりです。

dn: cn=DATA_ACCESS, cn=Plugins, cn=FILES, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: oracle.myapp.provisioning.UserDataAccPlugin
orclODIPPluginAddInfo: Data Access Plugin

A.5 イベント配信プロビジョニング・プラグイン

イベント配信プラグインの主な用途は、Oracle Directory Integration and Provisioningサーバーによって通知されるイベントを使用することです。イベントは、Oracle Directory Integration and Provisioningサーバーによってプラグインに配信されます。イベント型と、アプリケーション・リポジトリで実行されるアクションに基づいて、必要な操作をプラグインで実行します。このプラグインのインタフェース定義は、次のとおりです。

/* $Header: IEventPlugin.java 09-jun-2005.12:45:53  *
/* Copyright (c) 2004, 2005, Oracle. All rights reserved.  */
/*
DESCRIPTION
All of the plug-in interfaces must extend this common interface.
PRIVATE CLASSES
None
NOTES
None
*/
package oracle.idm.provisioning.plugin;
/**
* This is the base interface
*/
public interface IEventPlugin
{
/**
* The applications can perform the initialization logic in this method.
*
* @param Object For now it is the provisioning Profile that is passed.
*        look at oracle.ldap.odip.engine.ProvProfile for more details.
*
*
* @throws PluginException when an exception occurs.
*/
public void initialize(Object profile) throws PluginException;
/**
* The applications can perform the termination logic in this method.
*
* @param void Provisioning Profile Object is sent.
*             refer to oracle.ldap.odip.engine.ProvProfile for more details
* @throws PluginException when an exception occurs.
*/
public void terminate(Object profile) throws PluginException;
/**
* Set Additional Info.
* Since we pass on the complete profile, there is no requirement to set
* the additiona
* @param addInfo Plugin additional info
*/
//public void setAddInfo(Object addInfo);
}

/* $Header: IEventsFromOID.java 09-jun-2005.12:45:53  */
/* Copyright (c) 2004, 2005, Oracle. All rights reserved.  */
/*
DESCRIPTION
Applications interested in receiving changes from OID should
implement this   interface.
PRIVATE CLASSES
<None>
NOTES
*/
package oracle.idm.provisioning.plugin;
import oracle.idm.provisioning.event.Event;
import oracle.idm.provisioning.event.EventStatus;

/**
* Applications interested in receiving changes from OID should implement this
* interface.  The applications register with the OID for the changes occurring
* at OID. The DIP engine would instantiate an object of this class and invoke
* the initialize(), sendEventsToApp(), and truncate() method in the same
* sequence. The initialize method would provide the appropriate information
* from the profile in the form of a java.util.Hashtable object.
* The property names, that is, the hash table key that could be used by the
* interface implementer is defined as constants in this interface.
*
* @version $Header: IEventsFromOID.java 09-jun-2005.12:45:53  $
*/
public interface IEventsFromOID extends IEventPlugin
{

/**
* Initialize. The application would provide any initialization logic
* through method. The DIP engine after instantiating a class that
* implements this interface will first invoke this method.
*
* @param prop A HashMap that would contain necessary information exposed
* to the applications
* @throws EventInitializationException the applications must throw this
* exception in case of error.
*/
public void initialize(Object provProfile)
throws EventPluginInitException;

/**
* OID Events are deliverd to the application through this method.
*
* @param evts an array of LDAPEvent objects returned by the DIP engine
* @return the application logc must process these events and return the
* status of the processed events
* @throws EventDeliveryException the applications must throw this exception
* in case of any error.
*/
public EventStatus[] sendEventsToApp(Event [] evts)
throws EventDeliveryException;
}

/* $Header: IEventsToOID.java 09-jun-2005.12:45:53 $ */
/* Copyright (c) 2004, 2005, Oracle. All rights reserved.  */

/*
DESCRIPTION
Applications interested in sending changes to OID should implement this
interface.
*/
package oracle.idm.provisioning.plugin;
import oracle.idm.provisioning.event.Event;
import oracle.idm.provisioning.event.EventStatus;

/**
* Applications interested in sending changes to OID should implement this
* interface.  The applications must register with the OID for the sending
* changes at their  end to DIP. The DIP engine would instantiate an object
* of this class and invoke the initialize(), sendEventsFromApp(), and
* truncate() method in the same sequence. The initialize method would
* provide the appropriate information from the profile in the form of
* a java.util.Hashtable object. The property names, that is, the hash table key
* that could be used by the interface implementer is defined as
* constants in this interface.
*
*/
public interface IEventsToOID extends IEventPlugin
{
/**
* Initialize. The application would provide any initialization logic
* through method. The DIP engine after instantiating a class that
* implements this interface will first invoke this method.
*
* @param  prop ProvProfile
*              oracle.ldap.odip.engine.ProvProfile
* @throws EventPluginInitException the applications must throw this
* exception in case of error.
*/
public void initialize(Object profile) throws EventPluginInitException;

/**
* Application Events are deliverd to OID through this method.
*
* @return an array of Event objects returned to be processed by the
* DIP engine.
* @throws EventDeliveryException the applications must throw this exception
* in case of any error.
*/
public Event[] receiveEventsFromApp()
throws EventDeliveryException;

/**
* Application can let the DIP engine know whether there are more event to
* follow through this method
*
* @return ture if there are more events to be returned and false otherwise
* @throws PluginException the applications must throw this exception
* in case of any error.    */
public boolean hasMore() throws PluginException;

/**
* The status of the application events are intimated through this method.
* i.e the DIP engine after processing the events calls this method to set
* the event status.
*
* @param an array of Event status objects describing the processed event
* status by the DIP engine.
* @throws EventDeliveryException the applications must throw this exception
* in case of any error.
*/
public void setAppEventStatus(EventStatus[] evtStatus)
throws EventDeliveryException;
}

プラグインからのディレクトリ操作を実行するには、アプリケーション・コンテキストが必要です。イベント配信プラグインのinitialize()メソッドでProvProfile.getApplicationContext()を使用して、oracle.idm.provisioning.plugin.ApplicationContextのインスタンスを取得できます。このapplicationContextを使用すると、任意のプラグイン・メソッドで任意のディレクトリ操作を実行できます。

A.6 プロビジョニング・プラグインのリターン・ステータス

各プロビジョニング・プラグインは、適切なクラスのオブジェクトを戻します。

IDataEntryPluginおよびIDataAccessPluginsはoracle.idm.provisioning.plugin.PluginStatusクラスのオブジェクトを戻します。EventDeliveryPlugins(IEventFromOIDおよびIEventToOID)は、oracle.idm.provisioning.event.EventStatusクラスのオブジェクトの配列を戻します。

戻されたオブジェクトは、successまたはfailureどちらかの実行ステータスを示します。オブジェクトはユーザー・プロビジョニング・ステータスも戻します。

A.7 プロビジョニング・プラグインの構成テンプレート

次に示すLDIFテンプレートは、Oracle Internet Directory 11gリリース1(11.1.1)でアプリケーション・プラグインを指定するために使用されます。アプリケーションのディレクトリ・エントリを作成し、プラグインを実装するクラスを含むJARファイルをアップロードする必要があります。

dn: cn=Plugins, cn=APPTYPE, cn=Applications, cn=Provisioning,
cn=Directory Integration Platform,cn=Products,cn=OracleContext
changetype: add
add: orclODIPPluginExecData
orclODIPPluginExecData: full_path_name_of_the_JAR_file
objectclass: orclODIPPluginContainer

dn: cn=PRE_DATA_ENTRY_CREATE, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning, cn=Directory Integration Platform, cn=Products,
cn=OracleContext
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Pre Data Entry Plugin for CREATE operation

dn: cn=PRE_DATA_ENTRY_MODIFY, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Pre Data Entry Plugin for MODIFY operation

dn: cn=POST_DATA_ENTRY_CREATE, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Post Data Entry Plugin for CREATE and modify operations

dn: cn=POST_DATA_ENTRY_MODIFY, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Post Data Entry Plugin for MODIFY and CREATE operation

dn: cn=DATA_ACCESS, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning,  cn=Directory Integration Platform, cn=Products,
cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Data Access Plugin

dn: cn=EVENT_DELIVERY_OUT, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning, cn=Directory Integration Platform, cn=Products, cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Event Delivery Plugin for Outbound

dn: cn=EVENT_DELIVERY_IN, cn=Plugins, cn=APPTYPE, cn=Applications,
cn=Provisioning, cn=Directory Integration Platform, cn=Products, cn=OracleContext
changetype: add
objectClass: orclODIPPlugin
orclStatus: ENABLE
orclODIPPluginExecName: Name_of_the_class_that_implements_the_plug-in
orclODIPPluginAddInfo: Event Delivery Plugin for Inbound

A.8 プロビジョニング・プラグインのサンプル・コード

/* Copyright (c) 2004, Oracle. All rights reserved. */
/**
DESCRIPTION
Sample PRE DATA Entry Plugin for CREATE operation that
validates the attribute.
PRIVATE CLASSES
None.
NOTES
This class implements the PRE_DATA_ENTRY_CREATE plugin ONLY
MODIFIED (MM/DD/YY)
12/15/04 \226 Creation
*/
package oracle.ldap.idm;

import java.util.*;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import oracle.ldap.util.*;
import oracle.idm.provisioning.plugin.*;
/**
* This class implements the PRE_DATA_ENTRY_CREATE plugin ONLY
*
*/
public class SamplePreDataEntryCreatePlugin implements IDataEntryPlugin
{
public ModPropertySet mpBaseUser = null;
public ModPropertySet mpAppUser = null;

public PluginStatus process(ApplicationContext appCtx,IdmUser idmuser,
ModPropertySet baseUserAttr, ModPropertySet appUserAttr)
throws PluginException
{
PluginStatus retPluginStatus = null;
String retProvStatus = null;
String retProvStatusMsg = null;

LDIFRecord lRec = null;
LDIFAttribute lAttr = null;
String val = null;
if(null == baseUserAttr.getModPropertyValue(\223departmentNumber\224))
{
mpBaseUser = new ModPropertySet();
mpBaseUser.addProperty("departmentNumber","ST");
appCtx.log(\223Base user attribute \226 departmentNumber missing\224 +
\223Setting default - ST\224);
}
else if ( baseUserAttr.getModPropertyValue(\223departmentNumber\224)
.notIn(\223ST\224, \223APPS\224, \224CRM\224) )
{
throw new PluginException(\223Invalid department Number\224);
}
if((null == appUserAttr) ||
null == appUserAttr.getModPropertyValue(\223emailQouta\224))
{
mpAppUser = new ModPropertySet();
mpAppUser.addProperty("emailQouta","50M");
appCtx.log(\223Application user attribute - email Qouta missing \224 +
\223Setting default - 50M\224);
}
return new PluginStatus(PluginStatus.SUCCESS, null, null);
}

public ModPropertySet getBaseAttrMods()
{
return mpBaseUser;
}

public ModPropertySet getAppAttrMods()
{
return mpAppUser;
}
}

/* Copyright (c) 2004, Oracle. All rights reserved. */
/**
DESCRIPTION
Sample POST DATA Entry Plugin for CREATE operation. Implementing a
policy check to provision only those users who belong to \223SALES\224.
PRIVATE CLASSES
None.
NOTES
This class implements the POST_DATA_ENTRY_CREATE plugin ONLY
MODIFIED (MM/DD/YY)
12/15/04 \226 Creation
*/
package oracle.ldap.idm;

import java.util.*;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import oracle.ldap.util.*;
import oracle.idm.provisioning.plugin.*;
/**
* This class implements the POST_DATA_ENTRY_CREATE plugin ONLY
*
*/
public class SamplePostDataEntryCreatePlugin implements IDataEntryPlugin
{
public ModPropertySet mpBaseUser = null;
public ModPropertySet mpAppUser = null;

public PluginStatus process(ApplicationContext appCtx,IdmUser idmuser,
ModPropertySet baseUserAttr, ModPropertySet appUserAttr)
throws PluginException
{
PluginStatus retPluginStatus = null;
String retProvStatus = null;
String retProvStatusMsg = null;

if(null == baseUserAttr.getModPropertyValue(\223deptartmentNumber\224))
{
mpBaseUser = new ModPropertySet();
mpBaseUser.addProperty("deptartmentNumber ","SALES");
appCtx.log("Base user attribute \221c\222 is missing");

retProvStatus = IdmUser.PROVISION_ REQUIRED;
retProvStatusMsg =  "Provision policy: Only \221SALES\222\224.
}
else if (baseUserAttr.getModPropertyValue(\223deptartmentNumber\224)
.equals(\223SALES\224))
{
retProvStatus = IdmUser.PROVISION_ REQUIRED;
retProvStatusMsg =  "Provision policy: Only \221SALES\222\224.
}
else
{
// do not provision those users who do not belong to SALES.
retProvStatus = IdmUser.PROVISION_NOT_REQUIRED;
retProvStatusMsg =
"Do not provision the person who is not from \221SALES\222";
}

return new PluginStatus(PluginStatus. SUCCESS, retProvStatusMsg,
retProvStatus);
}

public ModPropertySet getBaseAttrMods()
{
return mpBaseUser;
}

public ModPropertySet getAppAttrMods()
{
return mpAppUser;
}
}

/* Copyright (c) 2004, Oracle. All rights reserved. */
/**
DESCRIPTION
Sample DATA Access Plugin.
NOTES
This class implements the DATA_ACCESS plugin
MODIFIED (MM/DD/YY)
12/15/04 \226 Creation
*/
package oracle.ldap.idm;

import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import oracle.ldap.util.*;
import oracle.idm.provisioning.plugin.*;
/**
* This class implements the DATA_ACCESS plugin ONLY
*
*/
public class SampleDataAccessPlugin implements IDataAccessPlugin
{
public PluginStatus process(ApplicationContext appCtx,IdmUser idmuser,
ModPropertySet baseUserAttr,ModPropertySet appUserAttr)
throws PluginException
{
try {
DirContext dirCtx = appCtx.getDirCtx();
if ( appCtx.getCallOp().equals(ApplicationContext.OP_CREATE )
{
// Use the directory context and create the entry.
}
elseif ( appCtx.getCallOp().equals(ApplicationContext.OP_MODIFY)
{
// Use the directory context and modify the entry.
}
} catch (Exception e) {
throw new PluginException(e);
}
return new PluginStatus(PluginStatus.SUCCESS, null, null);
}

public PropertySet getAppUserData(ApplicationContext appCtx,
IdmUser idmuser, String [] reqAttrs) throws PluginException
{
VarPropertySet vpSet = null;
DirContext dirCtx = appCtx.getDirCtx();

try {
Attributes attrs= dirCtx.getAttributes(\223myAppContainer\224);
vpSet = new VarPropertySet(); // Populate the VarPropertySet from attrs
} catch(Exception ne) {
throw new PluginException(e);
}
return vpSet;   }
}

B DSML構文

Directory Services Mark-up Language(DSML)はOracle Fusion Middleware 11gリリース1(11.1.1)では推奨されません。今後のリリースでサポートされない可能性があります。

この付録では、次の項目について説明します。

- 第B.1項「DSMLの機能」

- 第B.2項「DSMLの利点」

- 第B.3項「DSML構文」

- 第B.4項「DSMLで使用可能なツール」

B.1 DSMLの機能

ディレクトリ・サービスは、分散コンピューティングの主要部分を形成します。XMLは、インターネット・アプリケーションの標準的なマークアップ言語になりつつあります。ディレクトリ・サービスがインターネットで普及するにつれ、ディレクトリ情報をXMLデータで表現することの必要性が急速に高まっています。この機能を使用すると、LDAPディレクトリ・サーバーとの情報交換が必要な、LDAPを認識しないアプリケーションの種類の増加に対応できます。

Directory Services Markup Language(DSML)は、LDAP情報および操作のXML表現を定義します。LDAP Data Interchange Format(LDIF)は、ディレクトリ情報、またはディレクトリ・エントリに適用する一連の変更の伝達に使用します。前者は属性値レコード、後者は変更レコードと呼ばれます。

B.2 DSMLの利点

Oracle Internet Directoryおよびインターネット・アプリケーションでDSMLを使用すると、異なるソースのデータを柔軟に統合できるようになります。また、DSMLを使用すると、LDAPを使用しないアプリケーションでLDAPベースのアプリケーションと通信でき、Oracle Internet Directoryクライアント・ツールによって生成されたデータの操作やファイアウォールを経由したディレクトリへのアクセスが容易になります。

DSMLはWeb上での配信に最適化されたXMLに基づいています。XMLの構造化データは均一で、アプリケーションやベンダーから独立しているため、多くの新しいフラット・ファイル・タイプの同期コネクタを作成できます。XML形式にすると、ディレクトリ・データが中間層で使用可能になり、より有効な検索を実行できるようになりました。

B.3 DSML構文

DSMLバージョン1のドキュメントはディレクトリ・エントリまたはディレクトリ・スキーマ(あるいはその両方)を記述します。各ディレクトリ・エントリには識別名(DN)という一意の名前があります。ディレクトリ・エントリにはディレクトリ属性といういくつかのプロパティと値のペアがあります。すべてのディレクトリ・エントリは複数のオブジェクト・クラスのメンバーです。エントリのオブジェクト・クラスは、エントリが取ることのできるディレクトリ属性を制約します。このような制約については、ディレクトリ・スキーマに記述されています。これは同じDSMLドキュメントに含まれる場合も、別のドキュメントに含まれる場合もあります。

次の項では、DSMLのトップレベルの構造およびディレクトリ・エントリとスキーマ・エントリの表現方法の概要を説明します。

B.3.1 トップレベルの構造

DSMLのトップレベルでの文書要素の型はdsmlです。次の型の子要素を持ちます。

directory-entries
directory-schema

また、子要素directory-entriesは、型entryの子要素を持ちます。同様に、子要素directory-schemaは型classおよびattribute-typeの子要素を持ちます。

トップレベルでのDSML文書の構造は次のとおりです。

<!- a document with directory & schema entries -->
<dsml:directory-entries>
<dsml:entry dn="...">...</dsml:entry>
.
.
.
</dsml:directory-entries>
.
.
.
<dsml:directory-schema>
<dsml:class id="..." ...>...</dsml:class>
<dsml:attribute-type id="..." ...>...</dsml:attribute-type>
.
.
.
</dsml:directory-schema>
</dsml:dsml>

B.3.2 ディレクトリ・エントリ

要素型entryは、DSML文書のディレクトリ・エントリを表します。entry要素には、エントリのディレクトリ属性を表す要素が含まれます。エントリの識別名は、XML属性dnで指定します。

次に、ディレクトリ・エントリを記述するXMLエントリを示します。

<dsml:entry dn="uid=Heman, c=in, dc=oracle, dc=com">
<dsml:objectclass>
<dsml:oc-value>top</dsml:oc-value>
<dsml:oc-value ref="#person">person</dsml:oc-value>
<dsml:oc-value>organizationalPerson</dsml:oc-value>
<dsml:oc-value>inetOrgPerson</dsml:oc-value>
</dsml:objectclass>
<dsml:attr name="sn">
<dsml:value>Siva</dsml:value></dsml:attr>
<dsml:attr name="uid">
<dsml:value>Heman</dsml:value></dsml:attr>
<dsml:attr name="mail">
<dsml:attr name="givenname">
<dsml:value>Siva V. Kumar</dsml:value></dsml:attr>
<dsml:attr name="cn">
<dsml:value>SVK@example.com</dsml:value></dsml:attr>
<dsml:value>Siva Kumar</dsml:value></dsml:attr>

oc-value's refは、オブジェクト・クラスを定義するクラス要素へのURI参照です。この例の場合は、personオブジェクト・クラスを定義する要素へのURI [9]参照です。子要素objectclassおよびattrは、ディレクトリ・エントリのオブジェクト・クラスおよび属性を指定するために使用します。

B.3.3 スキーマ・エントリ

要素型classは、DSML文書のスキーマ・エントリを表します。class要素は、参照を容易にするためにXML属性idを取ります。

たとえば、personオブジェクト・クラスのオブジェクト・クラス定義は次のようになります。

<dsml:class id="person" superior="#top"  type="structural">
<dsml:name>person</dsml:name>
<dsml:description>...</dsml:description>
<dsml:object-identifier>2.5.6.6</object-identifier>
<dsml:attribute ref="#sn" required="true"/>
<dsml:attribute ref="#cn" required="true"/>
<dsml:attribute ref="#userPassword" required="false"/>
<dsml:attribute ref="#telephoneNumber" required="false"/>
<dsml:attribute ref="#seeAlso" required="false"/>
<dsml:attribute ref="#description" required="false"/>
</dsml:class>

ディレクトリ属性も同様に記述されます。たとえば、cn属性の属性定義は次のようになります。

<dsml:attribute-type id="cn">
<dsml:name>cn</dsml:name>
<dsml:description>...</dsml:description>
<dsml:object-identifier>2.5.4.3</object-identifier>
<dsml:syntax>1.3.6.1.4.1.1466.115.121.1.44</dsml:syntax>
</dsml:attribute-type>

B.4 DSMLで使用可能なツール

XMLフレームワークを使用すると、LDAP以外のアプリケーションを使用してディレクトリ・データにアクセスできます。XMLフレームワークはアクセス・ポイントを広範囲に定義し、次のツールを提供します。

- ldapadd

- ldapaddmt

- ldapsearch

関連項目:

構文および使用方法の詳細は、『Oracle Fusion Middleware Oracle Identity Managementリファレンス』のOracle Internet Directoryのサーバー管理ツールに関する項を参照してください。

クライアント・ツールldifwriteは、ディレクトリ・データおよびスキーマのLDIFファイルを生成します。これらのLDIFファイルをXMLに変換すると、XMLファイルをアプリケーション・サーバーに格納し、このXMLファイルに対して問合せを行うことができます。LDAPサーバーに対してLDAP操作を実行する場合と比べ、問合せとレスポンスにかかる時間が短縮されます。

C Netscape LDAP SDK APIからOracle LDAP SDK APIへの移行

Oracle Internet Directory SDK C APIの詳細は、第8章「C APIリファレンス」で説明されています。この付録では、コードを移行する際に重要な、Netscape LDAP SDKとOracle Internet Directory LDAP SDKとの違いを説明します。

C.1 機能

Oracle Internet Directory LDAP SDKの次の機能は、NetscapeのSDK機能と異なります。

- Netscape SDKでは、参照を処理するために、クライアントはLDAPリバインド・コールバックを登録する必要があります。Oracle LDAP SDKでは自動的に処理されます。

- LDAP構造へのアクセス方法が異なります。Netscape LDAP SDKのLDAPハンドルは不透明型です。このハンドル内の個々のフィールドにアクセスするには、アクセサリ機能が必要です。Oracle Internet Directory LDAP SDKでは、LDAP構造が公開されており、クライアントは構造内の個々のフィールドを変更できます。

- Oracle LDAP SDKでは、ldap_init()ではなくldap_open()を使用します。

- Oracle LDAP SDKでは、SSL接続の初期化には異なるファンクション・コールおよびプロシージャが必要です。SSL用のOracle Internet Directoryファンクション・コールの詳細は、第8章「C APIリファレンス」を参照してください。

- Oracle Internet Directory C APIは、ライブラリおよびその他のファイルなどのOracle環境に依存します。Oracle Application ServerまたはOracle Databaseをインストールし、アプリケーションを作成する前に、環境変数$ORACLE_HOMEを適切な場所に設定する必要があります。

- LDAP SDKユーザーは、メモリーをクリアするcalloc()などの割当て機能を使用して、LDAPMod structure()を割り当てる必要があります。

- Oracle Internet Directory APIはスレッド・セーフではありません。

C.2 ファンクション

次のファンクションはNetscape LDAP SDKでは使用できますが、Oracle LDAP SDKでは使用できません。

- Oracle LDAP SDKには、ldap_ber_free()ファンクションはありません。かわりに、ber_free()を使用します。

- Oracle LDAP SDKには、ldエラーおよび一致した文字列を取得するためのldap_get_lderrno()ファンクションはありません。LDAP.ld_matchedおよびLDAP.ld_errorフィールドにアクセスすることで、この情報を直接取得できます。ユーザーがアクセスする必要のあるLDAP構造のフィールドは、この2つのみです。

C.3 マクロ

- Oracle LDAP SDKにはLDAPS_PORTは定義されていません。かわりに、LDAP_SSL_PORTを使用します。

- Oracle LDAP SDKにはLDAP_AFFECT_MULTIPLE_DSAは定義されていません。これはNestcape固有のマクロです。

索引

A  C  D  E  F  H  I  J  L  N  O  P  R  S  T  W

A

操作の中止, 8.2.10

アクセス制御, 2.2.4, 2.2.4.2, 2.2.4.2

認可, 2.2.4.2

アクセス制御情報項目(ACI), 2.2.4.2

属性, 2.2.4.2

ディレクティブ

形式, 2.2.4.2

アクセス制御リスト(ACL), 2.2.4.2 アクセス制御リスト(ACL), 2.2.4.2 ACI.「アクセス制御情報(ACI)」を参照 ACL.「アクセス制御リスト(ACL)」を参照 匿名認証, 2.2.4.1.1, 2.2.4.1.1 アプリケーション・コンテキスト

プロビジョニング・プラグイン, A.5

アプリケーション, 作成

C APIを使用, 8.4

属性

タイプ, 2.2.2

値, 2.2.2

認証, 2.2.4, 2.2.4.1, 2.2.4.1

匿名, 2.2.4.1.1, 2.2.4.1.2

証明書ベース, 2.2.4.1.3

モード, SSL, 8.1.1, 8.1.1

一方向SSL, 2.2.4.1.3

オプション, 2.2.4.1

パスワード・ベース, 2.2.4.1.2

SSL, 2.2.4.1.3, 2.2.4.1.3, 8.1.1

認証なし, 8.1.1

一方向, 8.1.1

双方向, 8.1.1

厳密, 2.2.4.1.3 ディレクトリ・サーバー

有効化, 2.5

有効化, DBMS_LDAPを使用, 2.5.2

有効化, C APIを使用, 2.5.1

ディレクトリ, 8.2.5 双方向SSL, 2.2.4.1.3 認可, 2.2.4, 2.2.4.2 認可ID, 2.2.4.1

C

C API

ファンクション

abandon, 8.2.10.1

abandon_ext, 8.2.10.1

add, 8.2.9.7, 8.2.9.7

add_ext_s, 8.2.9.7

add_s, 8.2.9.7

compare, 8.2.9.4

compare_ext, 8.2.9.4

compare_ext_s, 8.2.9.4

compare_s, 8.2.9.4

count_entries, 8.2.14.1

count_references, 8.2.14.1

count_values, 8.2.14.3

count_values_len, 8.2.14.3

delete, 8.2.9.8

delete_ext, 8.2.9.8

delete_ext_s, 8.2.9.8

delete_s, 8.2.9.8

dn2ufn, 8.2.14.4

err2string, 8.2.12.1

explode_dn, 8.2.14.4

explode_rdn, 8.2.14.4

extended_operation, 8.2.9.9

extended_operation_s, 8.2.9.9

first_attribute, 8.2.14.2

first_entry, 8.2.14.1

first_message, 8.2.13.1

first_reference, 8.2.14.1

get_dn, 8.2.14.4

get_entry_controls, 8.2.14.5

get_option, 8.2.3.1

get_values, 8.2.14.3

get_values_len, 8.2.14.3

init_sslコール, 8.1.1.1

modify, 8.2.9.5

modify_ext, 8.2.9.5

modify_ext_s, 8.2.9.5

modify_s, 8.2.9.5

msgid, 8.2.11.1

msgtype, 8.2.11.1

next_attribute, 8.2.14.2

next_entry, 8.2.14.1

next_message, 8.2.13.1

next_reference, 8.2.14.1

parse_extended_result, 8.2.12.1

parse_reference, 8.2.14.6

parse_result, 8.2.12.1

parse_sasl_bind_result, 8.2.12.1

rename, 8.2.9.6

rename_s, 8.2.9.6

result, 8.2.11.1

sasl_bind, 8.2.5.1

sasl_bind_s, 8.2.5.1

search_st, 8.2.9.1

set_option, 8.2.3.1

simple_bind, 8.2.5.1

simple_bind_s, 8.2.5.1

unbind_ext, 8.2.8.1

unbind_s, 8.2.8.1

value_free, 8.2.14.3

value_free_len, 8.2.14.3

使用例, 8.3 概要, 8.2.1 SSLを使用する使用方法, 8.3.1, 8.3.1 SSLを使用しない使用方法, 8.3.2, 8.3.2 認証局, 2.2.4.1.3 証明書ベースの認証, 2.2.4.1.3 証明書，2.2.4.1.3 エントリの子, リスト表示, 8.2.9.3 コンポーネント

Oracle Identity and Access Management SDK, 1.3.2

CONNECT_BYコントロール, 3.5.1 コントロール, 使用, 3.4.2, 3.4.5, 8.2.7

D

LDAP情報モデル, 2.2.2

データ

整合性, 2.2.4, 2.2.4.3, 2.2.4.3

プライバシ, 2.2.4, 2.2.4.4, 2.2.4.4

データ型の概要, 9.3 DBMS_LDAPパッケージ

使用した検索, 2.6

DBMS_LDAP_UTL

データ型, 11.4

ファンクション・リターン・コード, 11.3

グループ関連サブプログラム

概要, 11.1

create_group_handleファンクション, 11.2.2.1

get_group_dnファンクション, 11.2.2.4

get_group_propertiesファンクション, 11.2.2.3

set_group_handle_propertiesファンクション, 11.2.2.2

その他のサブプログラム

概要, 11.1

check_interface_versionファンクション, 11.2.5.10

create_mod_propertysetファンクション, 11.2.5.6

get_property_namesファンクション, 11.2.5.2

get_property_valuesファンクション, 11.2.5.3

get_property_values_lenファンクション, 11.2.5.4

normalize_dn_with_caseファンクション, 11.2.5.1

populate_mod_propertysetファンクション, 11.2.5.7

free_handleプロシージャ, 11.2.5.9

free_mod_propertysetプロシージャ, 11.2.5.8

free_propertyset_collectionプロシージャ, 11.2.5.5

サブスクライバ関連サブプログラム

概要, 11.1

create_subscriber_handleファンクション, 11.2.3.1

get_subscriber_dnファンクション, 11.2.3.3

get_subscriber_propertiesファンクション, 11.2.3.2

ユーザー関連サブプログラム

概要, 11.1

authenticate_userファンクション, 11.2.1.1

check_group_membershipファンクション, 11.2.1.8

create_user_handleファンクション, 11.2.1.2

get_group_membershipファンクション, 11.2.1.10

get_user_dnファンクション, 11.2.1.7

get_user_extended_propertiesファンクション, 11.2.1.6

get_user_propertiesファンクション, 11.2.1.4

locate_subscriber_for_userファンクション, 11.2.1.9

set_user_handle_propertiesファンクション, 11.2.1.3, 11.2.1.3

set_user_propertiesファンクション, 11.2.1.5

DBMS_LDAP_UTL PL/SQLリファレンス, 11 依存性と制限事項, 8.5

C API, 8.5

DES40暗号化, 2.2.4.4 ディレクティブ, 2.2.4.2 ディレクトリ情報ツリー, 2.2.1 ディレクトリ情報ツリー(DIT), 2.2.1 ディレクトリ操作

プロビジョニング・プラグイン, A.5

ディレクトリ・サーバー検出, 4.6 識別名, 2.2.1

コンポーネント, 2.2.1

形式, 2.2.1

DN，「識別名」を参照 ドキュメント, 関連, Preface 動的パスワード・ベリファイア

コントロール, 3.4.2, 3.4.5

作成, 3.4.1

パラメータ, 3.4.2, 3.4.2

E

暗号化

DES40, 2.2.4.4

Oracle Internet Directoryで使用可能なレベル, 2.2.4.4

RC4_40, 2.2.4.4

エントリ

識別名, 2.2.1

識別名を使用して位置を識別

ネーミング, 2.2.1

読取り, 8.2.9.2

エラー

処理と結果の解析, 8.2.11.1

例外の概要, 9.2

F

フィルタ, 2.6.3

書式, 識別名, 2.2.1

H

ヘッダー・ファイルとライブラリ, 必要, 8.4

階層検索, 3.5

LDAPの歴史, 2.1

I

整合性, データ, 2.2.4.3

インタフェース・コール, SSL, 8.1.1.1

J

Java, 1.3.1, 2.3.4

Java APIリファレンス

クラスの説明

Propertyクラス, 5.3

PropertySetクラス, 5.3

PropertySetCollectionクラス, 5.3

Oracle Internet DirectoryのJava API, 10 JAZN

「Oracle Application Server Java Authentication and Authorization Service」を参照

JNDI, 1.3.1, 2.3.4 JNDIの場所, 10

L

LDAP

機能モデル, 2.2.3

歴史, 2.1

情報モデル, 2.2.2

メッセージ, 結果の取得と確認, 8.2.11

ネーミング・モデル, 2.2.1

操作, 実行, 8.2.9

セキュリティ・モデル, 2.2.4

セッション・ハンドル・オプション, 8.2.3

C API, 2.5

セッション

初期化, 2.4

バージョン2 C API, 8.1 LDAP API, 1.3.3.3 LDAP機能モデル, 2.2.3 LDAPモデル, 2.2

LDAPネーミング・モデル, 2.2.1

LDAPセキュリティ・モデル, 2.2.4 LDAPバインド操作, 2.2.4.1 ログイン名

検索, 5.9

N

ネーミング・エントリ, 2.2.1

O

一方向SSL認証, 2.2.4.1.3, 8.1.1

OpenLDAP Community, Preface

操作属性

ACI, 2.2.4.2

Oracle Application Server Java Authentication and Authorization Service

定義, 1.1

Oracleの拡張機能

アプリケーション

削除ロジック, 1.3.3.2

実行時のロジック, 1.3.3.2

停止ロジック, 1.3.3.2

起動とブートストラップに関するロジック, 1.3.3.2

グループ管理機能, 4.4 プログラム抽象化

Java言語, 5, 6

PL/SQL言語, 6.2

Java言語のプログラム抽象化, 5, 6 ユーザー管理機能, 5, 6 SSLをサポートするOracleの拡張機能, 8.1 Oracle Identity and Access Management

既存のアプリケーションの変更, 1.2

Oracle Identity Management

アプリケーションの統合

サポートされているサービス, 1.1

Oracle SSLコール・インタフェース, 8.1 Oracle SSL拡張機能, 8.1.1 Oracle SSL関連ライブラリ, 8.5 Oracleシステム・ライブラリ, 8.5 Oracleウォレット, 8.1.1.2 Oracle Wallet Manager, 8.1.1.2

ウォレットを作成するために必要, 8.5

Oracleの拡張機能

LDAPと統合されたアプリケーションのイメージ, 1.3.3.1

LDAPモデルの概要, 2.2

P

パスワード・ベースの認証, 2.2.4.1.2

パスワード

ポリシー, 2.2.4.5

権限, 2.2.4, 2.2.4.2 PL/SQL API, 9

C APIの一部を含む, 2.3.3

データ型の概要, 9.3

例外の概要, 9.2

ファンクション

add_s, 9.4.27, 9.4.27

ber_free, 9.4.35

bind_s, 9.4.3, 9.4.3

compare_s, 9.4.5, 9.4.5

count_entries, 9.4.10, 9.4.10

count_values, 9.4.29, 9.4.29

count_values_len, 9.4.30, 9.4.30

create_mod_array, 9.4.19, 9.4.19

dbms_ldap.init, 9.4.1

delete_s, 9.4.16, 9.4.16

err2string, 9.4.18, 9.4.18

explode_dn, 9.4.32, 9.4.32

first_attribute, 9.4.11, 9.4.11

first_entry, 9.4.8, 9.4.8

get_dn, 9.4.13, 9.4.13

get_values, 9.4.14, 9.4.14

get_values_len, 9.4.15, 9.4.15

init, 9.4.1, 9.4.1

modify_s, 9.4.26, 9.4.26

modrdn2_s, 9.4.17, 9.4.17

msgfree, 9.4.34

next_attribute, 9.4.12, 9.4.12

next_entry, 9.4.9, 9.4.9

open_ssl, 9.4.33, 9.4.33, 9.4.34, 9.4.35, 9.4.35

rename_s, 9.4.31, 9.4.31

search_s, 9.4.6, 9.4.6

search_st, 9.4.7, 9.4.7

simple_bind_s, 9.4.2, 9.4.2

unbind_s, 9.4.4, 9.4.4

データベースへのロード, 2.3.3 プロシージャ

free_mod_array, 9.4.28

populate_mod_array(バイナリ・バージョン), 9.4.21

populate_mod_array(文字列バージョン), 9.4.20

サブプログラム, 9.4, 9.4 概要, 9.1, 9.1 プラグイン

プロビジョニング・インタフェース, A

プライバシ, データ, 2.2.4, 2.2.4.4, 2.2.4.4 権限, 2.2.4, 2.2.4.2 プロシージャ, PL/SQL

free_mod_array, 9.4.28

populate_mod_array(バイナリ・バージョン), 9.4.21

populate_mod_array(文字列バージョン), 9.4.20

プロビジョニング・インタフェース・プラグイン, A プロビジョニング・プラグイン

ディレクトリ操作, A.5

アプリケーション・コンテキストの取得, A.5

R

RC4_40暗号化, 2.2.4.4

RDN，「相対識別名」を参照

関連ドキュメント, Preface

相対識別名, 2.2.1

結果, リストの参照, 8.2.13

RFC 1823, 8.5

S

C APIの使用例, 8.3, 8.3

SDKコンポーネント, 1.3.2

検索

階層, 3.5

結果

解析, 8.2.14

有効範囲, 2.6.2 検索関連操作, フロー, 2.6.1 セキュリティ, Oracle Internet Directory環境, 2.2.4 サービス位置レコード, 4.6 セッション

クローズ, 8.2.8

DBMS_LDAPを使用した終了の有効化, 2.7.2

初期化

DBMS_LDAPを使用, 2.4.2

C APIを使用, 2.4.1

セッション固有のユーザー・アイデンティティ, 2.2.4.1 簡易認証, 2.2.4.1.2, 2.2.4.1.2 Smith, Mark, はじめに, はじめに SSL

認証モード, 8.1.1

デフォルト・ポート, 2.2.4.1.3

ハンドシェイク, 8.1.1.1

インタフェース・コール, 8.1.1.1, 8.1.1.1

認証なし, 2.2.4.1.3

一方向認証, 2.2.4.1.3

Oracleの拡張機能, 8.1, 8.1.1

暗号化と復号化, 8.1.1

双方向認証, 2.2.4.1.3 ウォレット, 8.1.1.2 SSOログイン名

検索, 5.9

厳密認証, 2.2.4.1.3

T

TCP/IPソケット・ライブラリ, 8.5

双方向認証, SSL, 8.1.1

属性の型, 2.2.2

W

ウォレット

SSL, 8.1.1.2

サポート, 8.1.1.2

Copyright © 1999, 2013, Oracle and/or its affiliates. All rights reserved.