Как написать простейший код, работающий с LDAP-каталогом, с использованием пакета DBMS_LDAP
Наверно вам уже приходилось сталкиваться с ситуацией, когда надо напрямую из БД Oracle обратиться за данными, находящимися в LDAP-каталоге.
Для этого существует прекрасный стандартный пакет DBMS_LDAP.
Ниже приведу пример кода, где мы хотим получить cn пользователя, зная его DN.
Declare
ldap_session DBMS_LDAP.session:=null;
ErrorMsg VARCHAR2(4000);
-- значение атрибута
my_attr_value varchar2(256);
entry_dn varchar2(256);
my_vals DBMS_LDAP.STRING_COLLECTION;
my_ber_elmt DBMS_LDAP.ber_element;
my_attrs DBMS_LDAP.STRING_COLLECTION;
my_attr_name varchar2(256);
my_message DBMS_LDAP.message;
my_entry DBMS_LDAP.message;
ret_val PLS_INTEGER:=-1;
-- distinguished name пользователя
userDN varchar2(2000):='uid=iivanov,ou=People,dc=maxcrc,dc=com';
BEGIN
my_attrs(1):='cn';
-- создание LDAP session handle (адрес
сервера, порт)
ldap_session := DBMS_LDAP.init('asusnote','389');
-- админ, его пароль
ret_val := DBMS_LDAP.simple_bind_s(ldap_session,'cn=Manager,dc=maxcrc,dc=com','secret');
-- ищем пользователя
ret_val := DBMS_LDAP.search_s(ldap_session,
userDN,
DBMS_LDAP.SCOPE_BASE,
'objectclass=inetorgperson',
my_attrs,
0,
my_message);
dbms_output.put_line('Debug :: ret_Val expected is 0, found = '|| ret_val);
dbms_output.put_line('Debug :: if ret_Val != 0 then ckeck dbms_ldap package
for error code');
-- получить значение атрибута из результатов поиска
my_entry :=
DBMS_LDAP.first_entry(ldap_session, my_message);
my_attr_name :=
DBMS_LDAP.first_attribute(ldap_session,my_entry,my_ber_elmt);
my_vals := DBMS_LDAP.get_values (ldap_session, my_entry, my_attr_name);
my_attr_value := my_vals(0);
dbms_output.put_line('Debug :: '|| my_attr_name || ' = ' || my_attr_value);
EXCEPTION
WHEN others THEN
ErrorMsg := SQLERRM;
dbms_output.put_line('Error :: ' || ErrorMsg);
END;
Комментариев нет:
Отправить комментарий