好的,所以我们在 SQL 中有一些表,它们通过活动目录中的 Guid 来识别用户。最初开发团队只想在 sql 中镜像用户群,但经理坚持我们将其保存在活动目录中。因此,无论如何,我们尝试执行的操作之一是从 SQL 中获取一个包含用户 Guid 和一些其他信息的表,并将其连接到一个从 openquery 到 AD 生成的表中。
问题是,如果用户从 AD 中删除,则打开的查询会呕吐。我假设这是因为我们试图导航到活动目录中不存在的条目,并且由于它不是实际的查询(本质上是索引),所以它爆炸了。这是我们用来拉取用户的 ldap 字符串
LDAP://<GUID=(guid here)>
或者更具体地说,类似
SELECT * from openquery(ADSI, '
SELECT displayName, mail
FROM LDAP://<GUID=(userGuid)>
')
现在,如果这是一个查询而不是索引,或者在这种情况下是一个“过滤器”,(objectGuid=x) 将简单地不返回任何结果而不是引发错误。但这里的问题是 objectGuid 不会作为 guid 返回到 SQL,它作为二进制 0x102938102938 或一些垃圾返回。现在,我想也许将 Guid 转换为十六进制,然后转换为二进制,然后尝试用它来查询 AD,但我什至不知道从哪里开始。
所以我想这里的最终问题是:我如何通过 guid 查询用户的活动目录,如果该 guid 不存在,它不会抛出错误?这样我可以将它加入到 sql 查询中吗?这需要在 T-SQL 中实现,而不是在使用 .net DirectoryServices 帮助器的代码中实现。
如果这看起来很分散,我很抱歉,我只是想把我们一直在处理的事情放在这里。任何意见表示赞赏,包括采取不同路线的建议。TIA