【问题标题】:TSQL: access user data from LDAPTSQL:从 LDAP 访问用户数据
【发布时间】:2016-07-28 12:55:08
【问题描述】:

我有一个存储用户信息的 Active Directory (LDAP)。我正在尝试使用 TSQL 访问它,但我遇到了身份验证问题。

LDAP 看起来像这样(我编辑了数据):

用户具有以下属性:

现在,我正在尝试使用 OPENROWSET 通过 SQL Server 的 TSQL 查询从该用户那里获取信息,如下所示:

SELECT *
FROM 
OPENROWSET('ADSDSOObject','adsdatasource'; 'domain.com.io\test';'the_sha1_pass',
'SELECT  givenname
    FROM ''LDAP://domain.com.io/ou=Users,
      dc=domain,dc=com,dc=io'' WHERE givenname = ''Test''
      ')

但是当我执行它时,我得到以下错误:

服务器:消息 7399,级别 16,状态 1,第 1 行 OLE DB 提供程序' ADSDSOObject ' 报告错误。提供者表示用户 没有执行该操作的权限。

现在,我不知道我是否必须发送我尝试查询的用户的身份验证,或者我用于连接 LDAPAdmin 的凭据。如果我必须发送它,我应该发送已经加密的通行证还是不加密的通行证?

谢谢。

【问题讨论】:

  • 您的帐户是否有权浏览您正在查询的 OU?
  • @JasonB。不知道,怎么查?我正在使用 LDAPAdmin,我刚刚在该 OU 中创建了用户并给了它一个密码

标签: sql-server tsql active-directory ldap


【解决方案1】:

您可以通过删除用户名和密码来更改您的 OPENROWSET 查询,如下所示

SELECT * FROM OPENROWSET('ADSDSOObject','adsdatasource',
'SELECT givenname
    FROM ''LDAP://kodyaz.com/DC=kodyaz,DC=com'' WHERE givenname = ''KODYAZ''
      ')

或者,您可以尝试以下查询结构

SELECT * FROM OpenQuery(ADSI, 'SELECT * FROM ''LDAP://kodyaz.com/DC=kodyaz,DC=com'' WHERE objectCategory=''user'' AND givenname = ''KODYAZ'' ') 

我在 OpenQuery 命令中使用 givenname 参数在 WHERE 子句中添加了用户 objectCategory

在运行上面的 Select 语句之前,您可以add LDAP as linked server in SQL Server 参考教程中所示

EXEC sp_addlinkedserver 'ADSI', 'Active Directory Service Interfaces', 'ADSDSOObject', 'adsdatasource'

【讨论】:

  • 如果我尝试第一个查询,我会收到 7321 错误。如果我尝试第二个,我会得到相同的 7321 错误。我认为问题出在身份验证上,但我不知道应该在 ADSI 连接中使用什么用户、使用什么密码或如何从 LDAP 管理员授予权限
  • 我是我的域的成员,我看到我的域用户可以查询 LDAP 服务器,因为在链接服务器中,我将身份验证部分保留为 Windows 身份验证 SQL Server 连接的当前用户,并且当我将其更改为使用当前用户权限选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2014-01-01
相关资源
最近更新 更多