Oracle PL/SQL管理LDAP服务器(DBMS_LDAP包的使用)

本文详细介绍了如何使用Oracle的DBMS_LDAP包来管理LDAP服务器,包括初始化会话、简单登录、修改与添加记录、删除记录等功能,并提供了示例代码,展示了在PL/SQL中进行LDAP操作的完整流程。
摘要由CSDN通过智能技术生成

了解LDAP

LDAP是Light Directory Access Protocol轻量级目录访问协议的简称,LDAP与数据库有很大的区别,它的数据是树状的,而且每个节点的属性也比较固定。
LDAP协议中用dn表示一条记录的位置,dc表示一条记录所属区域,ou表示一条记录所属组织,cn表示一条记录的名称,uid表示一条记录的ID,其中dn是根据dc、ou、cn或uid的组合来表示的,对于某条记录dn是唯一的,但是dc、ou、cn及uid可以有多个,
例如,常见的用户表示:

dn:cn=张三,cn=users,dc=google,dc=cn
这条记录中dc和cn都有两个。

DBMS_LDAP包

PL/SQL中通过DBMS_LDAP包来管理LDAP服务器。
在默认情况下,DBMS_LDAP包并不载入,需要使用以下sql:

SQL> CONNECT / AS SYSDBA
SQL> @$ORACLE_HOME/rdbms/admin/catldap.sql

数据类型:

SESSION
用于保存LDAP会话的句柄,几乎所有DBMS_LDAP中的函数都需要此类型做参数。

MESSAGE
用于接收结果集. 用于所有关于记录属性和值的函数(如接收搜索函数返回的记录集合)。

MOD_ARRAY
用于modify_s() or add_s()操作的待修改或新增的数组。

TIMEVAL
用于设置LDAP API函数的超时时间。

BER_ELEMENT
保存BER 结构的句柄,用于引入消息的解码。

STRING_COLLECTION
可传给LDAP服务器的VARCHAR2字符串集合。

BINVAL_COLLECTION
RAW data集合,为二进制形式。

BERVAL_COLLECTION
BERVAL数据集合。

BLOB_COLLECTION
BLOB data集合。

函数:
1、init 
init() 用户初始化一个LDAP服务器会话。 本操作将会创建一个LDAP服务器的连接,成功后将返回一个SESSION。

FUNCTION init ( 
    hostname IN VARCHAR2, --服务器地址

    portnum IN PLS_INTEGER --连接端口
)
RETURN SESSION;

2、simple_bind_s

本函数根据特定的用户和密码登陆LDAP服务器,成功后返回PLS_INTEGER类型。

FUNCTION simple_bind_s ( 
    ld IN SESSION, --init返回的session

    dn IN VARCHAR2,--登陆用户的dn passwd IN VARCHAR2 --登陆用户的密码
)
RETURN PLS_INTEGER;

3、unbind_s

关闭LDAP会话。

FUNCTION unbind_s ( 
    ld IN OUT SESSION --init返回的session
)
RETURN PLS_INTEGER

4、create_mod_array

创建一个MOD_ARRAY,用于modify_s()或add_s()。执行成功返回MOD_ARRAY,失败返回NULL。

FUNCTION create_mod_array ( 
    num IN PLS_INTEGER --数组个数
)
RETURN MOD_ARRAY;

5、populate_mod_array
为MOD_ARRAY集合中的一个元素设置属性及操作方式。根据modval值类型的不同,过程有一下三钟方式:

PROCEDURE populate_mod_array (

    modptr IN DBMS_LDAP.MOD_ARRAY,--待操作的MOD_ARRAY

    mod_op IN PLS_INTEGER,--操作类型

    mod_type IN VARCHAR2, --属性

    modval IN DBMS_LDAP.STRING_COLLECTION --值(字符型)

);

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 --BERVAL类型

);

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 --BLOB类型
);

mod_op可为:
修改 dbms_ldap.MOD_REPLACE
增加 dbms_ldap.MOD_ADD
删除 dbms_ldap.MOD_DELETE

6、modify_s
修改一个已经存在的记录。

FUNCTION modify_s ( 
    ld IN DBMS_LDAP.SESSION, --session

    entrydn IN VARCHAR2, --待修改的记录dn

    modptr IN DBMS_LDAP.MOD_ARRAY --待修改的属性 MOD_ARRAY

)
RETURN PLS_INTEGER;

7、add_s
向LDAP服务器添加一条记录。

FUNCTION add_s ( 
    ld IN DBMS_LDAP.SESSION, --session

    entrydn IN VARCHAR2, --要新增的记录dn

    modptr IN DBMS_LDAP.MOD_ARRAY --属性MOD_ARRAY

)
RETURN PLS_INTEGER;

8、delete_s
删除一条记录。

FUNCTION delete_s ( 
    ld IN SESSION, --session

    entrydn IN VARCHAR2 --要删除的记录dn

)

9、free_mod_array
是否之前创建的MOD_ARRAY

PROCEDURE free_mod_array ( 
    modptr IN DBMS_LDAP.MOD_ARRAY --MOD_ARRAY
);

10、其他
其他函数起参照:
http://docs.huihoo.com/oracle/docs/B14099_19/idmanage.1012/b14087/dbmsldap_ref.htm

例程(LDAP服务器为ORACLE的OID)

这是一个相对完整的ORACLE应用服务用户管理例程,实现了用户的新增,密码初始化,解锁,禁用,启用及删除等操作。本程序可在PL/SQL Developer测试窗口中运行,若要使用本程序,需修改变量ldap_host,ldap_port,ldap_user,ldap_passwd,ldap_base的初始值。

隐藏行号 复制代码 PL/SQL代码
  1. DECLARE
  2.   retval      PLS_INTEGER; --返回
  3.   my_session  dbms_ldap.session;
  4.   my_dn       VARCHAR(256);
  5.   ldap_host   VARCHAR(256);
  6.   ldap_port   VARCHAR(256);
  7.   ldap_user   VARCHAR(256);
  8.   ldap_passwd VARCHAR(256);
  9.   ldap_base   VARCHAR(256);
  10.   mod_user    VARCHAR(256); --需要操作的用户帐号
  11.   mod_type    VARCHAR(1); --操作类型 0-初始化密码 1-解锁 2-禁用 3--启用  4-删除 5-新增 
  12.   mod_attr    VARCHAR(256);
  13.   my_array    dbms_ldap.mod_array;
  14.   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值