将LDAP记录成员导入sql数据库?

时间:2015-01-07 17:08:40

标签: sql sql-server arrays ldap

我们希望将用户从LDAP导出到SQL中的表。

我可以从LDAP导入名称和其他信息但是我无法导入信息成员。

我知道这是一个数组但不确定如何在sql查询中获取它。

提前致谢。

2 个答案:

答案 0 :(得分:0)

由于您已拥有用户信息,因此可以将该信息存储到临时表中。对于每个用户,您可以查询组对象以获取组信息。 我有以下单个SamAccountName的代码。您需要将此代码包装在循环中以获取所有用户的组成员资格。

CREATE TABLE #tmp 
    (   GroupName varchar(100),
        Usercode varchar(100)   );
DECLARE @ldap varchar(40); -- LDAP server name
DECLARE @LdapUsername NVARCHAR(256);
DECLARE @Query nVARCHAR(max);
DECLARE @Path nVARCHAR(max);
DECLARE @Query1 nVARCHAR(max);



            SELECT @LdapUsername = 'hshah' -- SAMAccountName


            SET @Query = '
                SELECT @Path = distinguishedName
                FROM OPENQUERY(ADSI, ''
                    SELECT distinguishedName 
                    FROM ''''' + @ldap + '/ou=users,ou=Test,DC=domain,DC=local''''
                    WHERE 
                        objectClass = ''''user'''' AND
                        sAMAccountName = ''''' + @LdapUsername + '''''
                '')
            '
            EXEC SP_EXECUTESQL @Query, N'@Path NVARCHAR(1024) OUTPUT', @Path = @Path OUTPUT 

            SELECT @Path = REPLACE(@Path,'''','')


            SET @Query = '
                SELECT name AS LdapGroup, ''' + @LdapUsername +''' as Usercode
                FROM OPENQUERY(ADSI,''
                    SELECT name 
                    FROM ''''' + @ldap + '/OU=Groups,OU=Secured Objects,DC=domain,DC=local''''
                    WHERE 
                        objectClass=''''group'''' AND'
            SET @Query1 = '
                        member=''''' + @Path + '''''
                '')
                ORDER BY name
                '


            INSERT INTO #tmp
            EXEC (@Query + @Query1)   

答案 1 :(得分:0)

如果您准备使用框架,可以将Spring LDAP与JAVA一起使用并将所有记录作为对象(对象列表),然后您可以使用JDBC连接到数据库并根据表模式插入记录。

参考:http://docs.spring.io/spring-ldap/docs/2.0.2.RELEASE/reference/