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

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

我们商店中的代码必须查询 SQL Server 2008 服务器,确定主机所属的 Active Directory 域,并在 SQL 中根据此信息创建 Windows 登录主体。在 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”注册表项不再存在)。有人知道是否有一个注册表项可以可靠地报告 Windows 2008 服务器所属的 Active Directory 域吗?更好的是,是否有一种完全不同的更有意义的方法来处理这个问题?谢谢。

答案1

首先确保机器位于域中,而不是工作组的一部分。

然后您可以在这里找到“域”键:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

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

如果您正在寻找另一种不使用注册表的方式来执行此操作,请考虑使用 SQLCLR 项目或可能使用 PowerShell 脚本域.获取计算机域().NET 方法。

答案2

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

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)

相关内容