我们商店中的代码必须查询 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)