oracle 读取ldap数据,实现Oracle对ldap数据的各类操作

在Oracle下实现对ldap数据的操作

当然,大前提是ldap和数据库之间的网络是要通的。

Oracle连接ldap的步骤:

首先用dbms_ldap.init(host, port)进行初始化。

该函数返回一个dbms_ldap.session类型的句柄。

初始化后开始用用户名和密码去登录ldap:dbms_ldap.simple_bind_s(session, user, password);

这个函数中的session即前面init函数返回的值。

simple_bind_s这个函数又返回一个状态码,如果成功就返回0.

到这里,ldap的连接已经完成。

下面就是对ldap数据的操作了。

首先是添加:dbms_ldap.add_s();

Oracle对ldap数据的添加过程如下:

1、定义一个要添加的数据集

l_array dbms_ldap.mod_array;

l_array := dbms_ldap.create_mod_array(5);--5是指数组个数

2、指定要增加的属性及属性的值

l_add_vals dbms_ldap.string_collection;

产品属性

l_add_vals(1) := '2009-01-01';

dbms_ldap.populate_mod_array(l_array, dbms_ldap.mod_add, 'activedate', l_add_vals);

l_add_vals(1) := '2019-01-01';

dbms_ldap.populate_mod_array(l_array, dbms_ldap.mod_add, 'inactivedate', l_add_vals);

公共属性

l_add_vals(1) := 'top';

l_add_vals(2) := 'subproduct';

dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'objectclass', l_add_vals);

相当于把所有的这些值都push到l_array这个堆栈里面去了,最后再统一地对堆栈里面的数据进行一次性处理:

dbms_ldap.add_s(l_session, l_userdn, l_array);

l_userdn是指定要添加的节点dn。

我们要在“11040320102052544C21B7F8”这个机顶盒下,增加82303601这个产品,则就应该如下:

'productid=82303601, stbid=11040320102052544C21B7F8,cn=Subscriber, l=ipauth,dc=iptv,dc=com'

这样,如果之前ldap中没有这个节点的话就会增加这么一条,如果已经存在,则会报“already exist”这样的信息。

最后一步,断开与ldap的连接

dbms_ldap.unbind_s(l_session);

详细的操作过程

create or replace procedure w_proc_ldapadd(ldap_host   varchar2,

ldap_port   varchar2 default '389',

ldap_user   varchar2 default 'cn=manager',

ldap_passwd varchar2 default 'onewaveinc',

ldap_userdn varchar2,  --指定要增加的节点

active_date date  ,

inactive_date date

) as

/*Created by

*  注意:该存储过程对ldap操作的权限很大,需要谨慎操作

*/

l_ldap_host   varchar2(256) := ldap_host;

l_ldap_port    varchar2(256) := ldap_port;

l_ldap_user   varchar2(256) := ldap_user;

l_ldap_passwd varchar2(256) := ldap_passwd;

l_retval            pls_integer;

l_session        dbms_ldap.session;

l_add_vals    dbms_ldap.string_collection;

v_inactivedate varchar2(14) := to_char(inactive_date, 'yyyymmddhh24mi');

v_activedate varchar2(14) := to_char(active_date, 'yyyymmddhh24mi');

l_array    dbms_ldap.MOD_ARRAY;

begin

dbms_ldap.use_exception := true;

begin-- 连接ldap服务器

l_session := dbms_ldap.init(l_ldap_host, l_ldap_port);

l_retval  := dbms_ldap.simple_bind_s(l_session, l_ldap_user, l_ldap_passwd);

exception when others then

dbms_output.put_line('coerr');

return;

end;

--增加数据

l_array := dbms_ldap.create_mod_array(5);

l_add_vals(1) := v_inactivedate;

dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'inactivedate', l_add_vals);

l_add_vals(1) := v_activedate;

dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'activedate', l_add_vals);

l_add_vals(1) := 'top';

l_add_vals(2) := 'subproduct';

dbms_ldap.populate_mod_array(l_array, dbms_ldap.MOD_ADD, 'objectclass', l_add_vals);

l_retval := dbms_ldap.add_s(l_session, ldap_userdn, l_array);

dbms_ldap.free_mod_array(l_array); --释放数组

dbms_output.put_line(l_retval);

-- 断开与ldap的连接

l_retval := dbms_ldap.unbind_s(l_session);

end w_proc_ldapadd;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值