我即将完成这项工作。我需要在我们的 Intranet 上识别用户。我需要将该用户的 objectGUID
存储在 SQL Server 数据库表中,并能够再次检索该记录。我有几个不同的应用程序,PHP、ASP Classic 和 ASP.Net。我认为在 SQL Server 中执行 AD 查找可能是最简单的。
我可以使用本教程中的步骤连接到 AD http://sql.dzone.com/news/querying-active-directory-thro
我可以检索 objectGUID
和我需要的任何其他内容,但我不确定如何将 objectGUID
存储在数据库中或如何使用 objectGUID
。
我认为它是数据类型(128 长度字节数组?)并且需要转换,但我不确定如何转换。
从事件目录中选择一条记录并插入到一个表中显示数据类型inserted objectGUID as varbinary(256)
select *
into temp_table
from openquery(adsi, '
select givenName,
sn,
sAMAccountName,
objectGUID
from ''LDAP://dc=somedomain,dc=com''
where sAMAccountName = ''some_user''
')
为了测试,我尝试使用从上面的 temp_table 检索到的 objectGUID 查询 AD。
declare @qry varchar(8000)
declare @var varbinary(256)
set @var = (SELECT objectGUID from temp_table)
set @qry = 'select *
from openquery(ADSI, ''
select
givenName,
sn,
sAMAccountName
from ''''LDAP://DC=somedomain,DC=com''''
where objectGUID = ''''+@var+''''
ORDER BY displayName
'')'
exec(@qry)
不返回任何行...
最初我认为这是带引号的正确语法
where objectGUID = '+@var+'
但返回错误:数据类型的运算符无效。运算符等于 add,类型等于 varchar
所以也许我接近语法错误,或者仍然是数据类型问题?
提前致谢。
最佳答案
要在单个查询中从 AD 检索数据,当您询问特定对象 GUID 或多个 GUID 时,有一种方法可以使用 where
子句而不是 from LDAP://<GUID=your guid>
表达式(在查询单个GUID的情况下非常方便)。
您查询的 where 子句中的 Active Directory 对象的 GUID 必须具有字符串形式,其中 GUID 的以十六进制表示法表示的每个字节前面都有反斜杠符号:
\1B\C1\93\F8\25\32\72\4E\8B\48\48\62\BB\44\49\7A
例如,您的 GUID:F893C11B-3225-4E72-8B48-4862BB44497A
.首先,您必须将其转换为 binary(16)
输入(长度为 16 的字节数组),然后转换为十六进制字符串,最后插入反斜杠,如上例所示:
declare @g uniqueidentifier = 'F893C11B-3225-4E72-8B48-4862BB44497A';
declare @gs nvarchar(max);
set @gs = CONVERT(nvarchar(max), CONVERT(binary(16), @g), 2);
declare @c int = 16;
while @c > 0
begin
set @c = @c - 1;
set @gs = STUFF(@gs, (2 * @c) + 1, 0, '\');
end;
declare @q nvarchar(max) =
'select * from openquery(AD,
'' select cn from ''''LDAP://DC=domain,DC=com''''
where objectGUID = ''''' + @gs + '''''
'')';
exec(@q);
以上代码创建以下查询:
select * from openquery(AD, 'select cn from ''LDAP://DC=domain,DC=com'' where objectGUID = ''\1B\C1\93\F8\25\32\72\4E\8B\48\48\62\BB\44\49\7A'' ')
关于sql-server - 在 SQL Server 中存储和检索 Active Directory 对象 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27114839/