6 PL/SQLでのAPI拡張機能の使用
DBMS_LDAP_UTL.authenticate_user()
ファンクションを使用してユーザーを管理および認証できます。次の各トピックでは、標準のディレクトリAPIにPL/SQLの拡張機能を使用して、ユーザーを管理および認証する方法について説明します。
ノート:
Oracleの拡張機能には、ユーザーを作成するPL/SQL APIは含まれません。標準APIに対するOracleの拡張機能の詳細は、「DBMS_LDAP_UTL PL/SQLリファレンス」を参照してください。
6.1 PL/SQL拡張機能のインストール
PL/SQL拡張機能は、Oracleデータベースのインストール時にDBMS_LDAP
パッケージとともにインストールされます。
スクリプト$ORACLE_HOME/rdbms/admin/catldap.sql
を実行する必要があります。
6.2 ディレクトリ・データにアクセスするためのユーザー・ハンドルを作成するプロセス・フロー
この章で説明する拡張機能のほとんどは、補助的なファンクションです。これらは、ユーザー、グループ、レルム、アプリケーションなど、特定のLDAPエンティティに関するデータにアクセスします。
多くの場合、これらのファンクションは、いずれかのエンティティに対する参照を標準的なAPIファンクションに渡す必要があります。そのために、APIの拡張機能はハンドルと呼ばれる不透明なデータ構造を使用します。次のステップは、拡張機能がユーザー・ハンドルを作成する方法を示しています。
-
LDAP接続を確立するか、接続のプールから接続を取得します。
-
ユーザーの入力からユーザー・ハンドルを作成します。この入力は、識別名、GUIDまたは単純なシングル・サインオン・ユーザーIDです。
-
LDAP接続ハンドル、ユーザー・ハンドルまたは資格証明を使用して、ユーザーを認証します。
-
ユーザー・ハンドルを解放します。
-
LDAP接続をクローズするか、接続プールに接続を戻します。
6.3 DBMS_LDAP_UTLパッケージを使用するプロセス・フロー
次のステップは、DBMS_LDAP_UTL
パッケージを使用して、ディレクトリからユーザー・プロパティを取得するハンドルを作成および使用する方法を示しています。
-
DBMS_LDAP_UTL.create_user_handle(user_hd, user_type, user_id)
を呼び出して、ユーザーの入力からユーザー・ハンドルを作成します。この入力は、識別名、GUIDまたは単純なシングル・サインオン・ユーザーIDです。 -
DBMS_LDAP_UTL.set_user_handle_properties(user_hd, property_type, property)
を呼び出して、レルムをユーザー・ハンドルと関連付けます。 -
DBMS_LDAP_UTL.get_user_properties(ld, user_handle, attrs, ptype, ret_pset_coll)
を呼び出して、ユーザー・エントリの属性を結果ハンドルに入れます。 -
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()を使用したユーザーの認証
ディレクトリに対してユーザーを認証するには、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 Formsなど)ではデータベースへの接続が有効でないかぎり、これを使用できません。