APEX_LDAPを使用すると、Lightweight Directory Access Protocol (LDAP)認証に関連する様々な操作を実行できます。
AUTHENTICATEファンクションは、指定された検索ベース、ホストおよびポートを使用して、SIMPLE_BIND_Sコールを実行するためにユーザー名およびパスワードを使用できる場合、ブール値TRUEを戻します。
構文
APEX_LDAP.AUTHENTICATE(
p_username IN VARCHAR2 DEFAULT NULL,
p_password IN VARCHAR2 DEFAULT NULL,
p_search_base IN VARCHAR2,
p_host IN VARCHAR2,
p_port IN VARCHAR2 DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N')
RETURN BOOLEAN;
パラメータ
表17-1では、AUTHENTICATEファンクションで使用可能なパラメータについて説明します。
表17-1 AUTHENTICATEのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
|
|
|
LDAP検索ベース。たとえば、 |
|
|
LDAPサーバーのホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します(デフォルト)。 |
例
次の例に、APEX_LDAP.AUTHENTICATEファンクションを使用して、ユーザー資格証明をLDAPサーバーに対して検証する方法を示します。
IF APEX_LDAP.AUTHENTICATE(
p_username =>'firstname.lastname',
p_password =>'abcdef',
p_search_base => 'cn=user,l=amer,dc=my_company,dc=com',
p_host => 'our_ldap_sever.my_company.com',
p_port => 389) THEN
dbms_output.put_line('authenticated');
ELSE
dbms_output.put_line('authentication failed');
END IF;
GET_ALL_USER_ATTRIBUTESプロシージャは、指定した認証ベース、ホストおよびポートを使用して、p_username(および必要に応じてパスワード)によって指定されたユーザー名に対するuser_attributeの名前と値の2つのOUT配列を戻します。
構文
APEX_LDAP.GET_ALL_USER_ATTRIBUTES(
p_username IN VARCHAR2 DEFAULT NULL,
p_pass IN VARCHAR2 DEFAULT NULL,
p_auth_base IN VARCHAR2 DEFAULT NULL,
p_host IN VARCHAR2,
p_port IN VARCHAR2 DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N',
p_attributes OUT apex_application_global.vc_arr2,
p_attribute_values OUT apex_application_global.vc_arr2);
パラメータ
表17-2に、GET_ALL_USER_ATTRIBUTESプロシージャのパラメータを示します。
表17-2 GET_ALL_USER_ATTRIBUTESのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
|
|
|
LDAP検索ベース。たとえば、 |
|
|
LDAPサーバーのホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します(デフォルト)。 |
|
|
戻される属性名の配列。 |
|
|
p_attributesの各属性名に対応して戻される値の配列。 |
例
次の例に、APEX_LDAP.GET_ALL_USER_ATTRIBUTESプロシージャを使用して、ユーザーに関連付けられているすべての属性値を取得する方法を示します。
DECLARE
L_ATTRIBUTES apex_application_global.vc_arr2;
L_ATTRIBUTE_VALUES apex_application_global.vc_arr2;
BEGIN
APEX_LDAP.GET_ALL_USER_ATTRIBUTES(
p_username => 'firstname.lastname',
p_pass => 'abcdef',
p_auth_base => 'cn=user,l=amer,dc=my_company,dc=com',
p_host => 'our_ldap_sever.my_company.com',
p_port => '389',
p_attributes => L_ATTRIBUTES,
p_attribute_values => L_ATTRIBUTE_VALUES);
FOR i IN L_ATTRIBUTES.FIRST..L_ATTRIBUTES.LAST LOOP
htp.p('attribute name: '||L_ATTRIBUTES(i));
htp.p('attribute value: '||L_ATTRIBUTE_VALUES(i));
END LOOP;
END;
GET_USER_ATTRIBUTESプロシージャは、指定した認証ベース、ホストおよびポートを使用して、p_attributesによって指定された属性名に対応するp_username(および必要に応じてパスワード)によって指定されたユーザー名に対するuser_attribute値のOUT配列を戻します。
構文
APEX_LDAP.GET_USER_ATTRIBUTES(
p_username IN VARCHAR2 DEFAULT NULL,
p_pass IN VARCHAR2 DEFAULT NULL,
p_auth_base IN VARCHAR2,
p_host IN VARCHAR2,
p_port IN VARCHAR2 DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N',
p_attributes IN apex_application_global.vc_arr2,
p_attribute_values OUT apex_application_global.vc_arr2);
パラメータ
表17-3では、GET_USER_ATTRIBUTESプロシージャで使用可能なパラメータについて説明します。
表17-3 GET_USER_ATTRIBUTESのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
|
|
|
LDAP検索ベース。たとえば、 |
|
|
LDAPサーバーのホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します(デフォルト)。 |
|
|
戻される値の属性名の配列。 |
|
|
|
例
次の例に、APEX_LDAP.GET_USER_ATTRIBUTESプロシージャを使用して、ユーザーに関連付けられている特定の属性値を取得する方法を示します。
DECLARE
L_ATTRIBUTES apex_application_global.vc_arr2;
L_ATTRIBUTE_VALUES apex_application_global.vc_arr2;
BEGIN
L_ATTRIBUTES(1) := 'xxxxxxxxxx'; /* name of the employee number attribute */
APEX_LDAP.GET_USER_ATTRIBUTES(
p_username => 'firstname.lastname',
p_pass => NULL,
p_auth_base => 'cn=user,l=amer,dc=my_company,dc=com',
p_host => 'our_ldap_sever.my_company.com',
p_port => '389',
p_attributes => L_ATTRIBUTES,
p_attribute_values => L_ATTRIBUTE_VALUES);
END;
IS_MEMBERファンクションは、p_username(および必要に応じてパスワード)によって指定されたユーザーが、指定された認証ベース、ホストおよびポートを使用してp_groupおよびp_group_baseパラメータによって指定されたグループのメンバーである場合、ブール値TRUEを戻します。
構文
APEX_LDAP.IS_MEMBER(
p_username IN VARCHAR2,
p_pass IN VARCHAR2 DEFAULT NULL,
p_auth_base IN VARCHAR2,
p_host IN VARCHAR2,
p_port IN VARCHAR2 DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N',
p_group IN VARCHAR2,
p_group_base IN VARCHAR2)
RETURN BOOLEAN;
パラメータ
表17-4では、IS_MEMBERファンクションで使用可能なパラメータについて説明します。
表17-4 IS_MEMBERのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
|
|
|
LDAP検索ベース。たとえば、 |
|
|
LDAPサーバーのホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します。 |
|
|
メンバーシップを検索するグループ名。 |
|
|
検索を開始するベース。 |
例
次の例に、APEX_LDAP.IS_MEMBERファンクションを使用して、ユーザーがグループのメンバーであるかどうかをLDAPサーバーに対して検証する方法を示します。
DECLARE
L_VAL boolean;
BEGIN
L_VAL := APEX_LDAP.IS_MEMBER(
p_username =>'firstname.lastname',
p_pass =>'abcdef',
p_auth_base => 'cn=user,l=amer,dc=my_company,dc=com',
p_host => 'our_ldap_sever.my_company.com',
p_port => 389,
p_group => 'group_name',
p_group_base => 'group_base');
IF L_VAL THEN
htp.p('Is a member.');
ELSE
htp.p('Not a member.');
END IF;
END;
MEMBER_OFファンクションは、指定した認証ベース、ホストおよびポートを使用して、p_username(および必要に応じてパスワード)によって指定されたユーザー名が属するグループの配列を戻します。
構文
APEX_LDAP.MEMBER_OF(
p_username IN VARCHAR2 DEFAULT NULL,
p_pass IN VARCHAR2 DEFAULT NULL,
p_auth_base IN VARCHAR2,
p_host IN VARCHAR2,
p_port IN VARCHAR2 DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N')
RETURN apex_application_global.vc_arr2;
パラメータ
表17-5に、MEMBER_OFファンクションで使用可能なパラメータを示します。
表17-5 MEMBER_OFのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
|
|
|
LDAP検索ベース。たとえば、 |
|
|
LDAPサーバーのホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します(デフォルト)。 |
例
次の例に、APEX_LDAP.MEMBER_OFファンクションを使用して、指定したユーザー名で特定されたすべてのグループを取得する方法を示します。
DECLARE
L_MEMBERSHIP apex_application_global.vc_arr2;
BEGIN
L_MEMBERSHIP := APEX_LDAP.MEMBER_OF(
p_username => 'firstname.lastname',
p_pass => 'abcdef',
p_auth_base => 'cn=user,l=amer,dc=my_company,dc=com',
p_host => 'our_ldap_sever.my_company.com',
p_port => '389');
FOR i IN L_MEMBERSHIP.FIRST..L_MEMBERSHIP.LAST LOOP
htp.p('Member of: '||L_MEMBERSHIP(i));
END LOOP;
END;
MEMBER_OF2ファンクションは、指定した認証ベース、ホストおよびポートを使用して、p_username(および必要に応じてパスワード)によって指定されたユーザー名が属するグループのVARCHAR2コロン区切りリストを戻します。
構文
APEX_LDAP.MEMBER_OF2(
p_username IN VARCHAR2 DEFAULT NULL,
p_pass IN VARCHAR2 DEFAULT NULL,
p_auth_base IN VARCHAR2,
p_host IN VARCHAR2,
p_port IN VARCHAR2 DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N')
RETURN VARCHAR2;
パラメータ
表17-6では、MEMBER_OF2ファンクションで使用可能なパラメータについて説明します。
表17-6 MEMBER_OF2のパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
|
|
|
LDAP検索ベース。たとえば、 |
|
|
LDAPサーバーのホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します(デフォルト)。 |
例
次の例に、APEX_LDAP.MEMBER_OF2ファンクションを使用して、指定したユーザー名で特定されたすべてのグループを取得する方法を示します。
DECLARE
L_VAL varchar2(4000);
BEGIN
L_VAL := APEX_LDAP.MEMBER_OF2(
p_username => 'firstname.lastname',
p_pass => 'abcdef',
p_auth_base => 'cn=user,l=amer,dc=my_company,dc=com',
p_host => 'our_ldap_sever.my_company.com',
p_port => 389);
htp.p('Is Member of:'||L_VAL);
END;
APEX_LDAP.SEARCHファンクションは、LDAPリポジトリを検索します。結果は、表問合せで使用できるオブジェクト表の(dn, name, val)です。
構文
function search (
p_username IN VARCHAR2 DEFAULT NULL,
p_pass IN VARCHAR2 DEFAULT NULL,
p_auth_base IN VARCHAR2 DEFAULT NULL,
p_host IN VARCHAR2,
p_port IN NUMBER DEFAULT 389,
p_use_ssl IN VARCHAR2 DEFAULT 'N',
p_search_base IN VARCHAR2,
p_search_filter IN VARCHAR2,
p_scope IN BINARY_INTEGER DEFAULT SYS.DBMS_LDAP.SCOPE_SUBTREE,
p_timeout_sec IN BINARY_INTEGER DEFAULT 3,
p_attribute_names IN VARCHAR2 )
RETURN APEX_T_LDAP_ATTRIBUTES PIPELINED;
パラメータ
表17-7では、SEARCHファンクションで使用可能なパラメータについて説明します。
表17-7 SEARCHのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名(匿名バインドの場合は |
|
|
|
|
|
|
|
|
LDAPサーバー・ホスト名。 |
|
|
LDAPサーバーのポート番号。 |
|
|
LDAPサーバーへのバインドでSSLを使用する場合は'Y'を設定します。一方向認証(Oracleウォレットで構成されるLDAPサーバー証明書が必要)でSSLを使用する場合は'A'を設定します。SSLを使用しない場合は'N'を設定します(デフォルト)。 |
|
|
検索用のdnベース。 |
|
|
LDAP検索フィルタ式。 |
|
|
検索範囲(デフォルトはサブツリーに下降)。 |
|
|
検索のタイムアウト(デフォルトは3秒) |
|
|
戻り属性名のカンマ区切りのリスト |
例1
SELECT val group_dns
FROM table(apex_ldap.search (
p_host => 'ldap.example.com',
p_search_base => 'dc=example,dc=com',
p_search_filter => 'uid='||apex_escape.ldap_search_filter(:APP_USER),
p_attribute_names => 'memberof' ));
例2
SELECT dn, mail, dispname, phone
from ( select dn, name, val
from table(apex_ldap.search (
p_host => 'ldap.example.com',
p_search_base => 'dc=example,dc=com',
p_search_filter => '&(objectClass=person)(ou=Test)',
p_attribute_names => 'mail,displayname,telephonenumber' )))
pivot (min(val) for name in ( 'mail' mail,
'displayname' dispname,
'telephonenumber' phone ))