在SQL中查询Windows 2008主机的Active Directory域

在我们的商店中有代码必须查询SQL Server 2008服务器,确定主机所属的Active Directory域,并在SQL中根据此信息创buildWindowslogin主体。 在Windows 2003服务器下,可以像这样通过SQL Server查询域名:

DECLARE @Domain nvarchar(255) EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', N'CachePrimaryDomain',@Domain OUTPUT SELECT @Domain AS Domain 

但是,这不再适用于Windows 2008(“CachePrimaryDomain”registry项不再存在)。 任何人都知道是否有一个可靠地报告Windows 2008服务器所属的Active Directory域的registry项? 更好的是,是否有一个完全不同的方式来处理这个更有意义? 谢谢。

首先确定机器是在一个域上,而不是工作组的一部分。

那么你可以在这里find“域名”键:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 

您可能需要使用T-SQLstring函数SUBSTRING和CHARINDEX,如果您只在“。”之前查找域的左半部分。

如果您正在寻找另一种方法来在没有registry的情况下执行此操作,请考虑使用Domain.GetComputerDomain(). NET方法的SQLCLR项目或潜在的PowerShell脚本。

感谢您的帮助,任何有兴趣的人都可以使用以下内容。

 DECLARE @strDomain VARCHAR(255), @strServer VARCHAR(255), @strSubject VARCHAR(255) EXECUTE master..xp_regread 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters', 'Domain', @strDomain output SELECT @strDomain select LEFT(@strDomain,charindex('.',@strDomain,1)-1)