如何获取 Sql Server 安装的 NT 服务帐户的 SID

Niv*_*aik 5 sql-server-2008 security sql-server

我正在使用 WMI 来获取服务器本地组的成员以及成员的 SID。WQL 查询适用于本地用户、本地组、AD 域用户和 AD 域组的成员。但是,当脚本查看恰好与 SQL Server 相关的成员时,它在它认为应该查看的类中找不到对象,因此我没有得到成员的 SID。例如,以下是为碰巧与 SQL Server 相关的组成员动态构造的一些查询:

select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLBrowser'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MsDtsServer100'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$SQLEXPRESS'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSSQL$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSOLAP$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='ReportServer$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$EPROVISIONAPP'
Run Code Online (Sandbox Code Playgroud)

上面的查询不返回任何结果,即使这些成员的 PartComponent 告诉我该成员来自 Win32_SystemAccount 类,并且域是“NT 服务”。

在服务器上,如果我查看本地用户和组 -> 组,并查看组的属性,比如“SQLServerSqlAgentUser$myservername$SQLEXPRESS”,它有一个成员“NT SERVICE\SQLAgent$SQLEXPRESS (S-1- 5-80-592940576-165..."。我看不到 SID 的全部值。

我无法弄清楚 Microsoft 如何提取此类成员的 SID,以及从何处获取这些成员。

有任何想法吗?

Pol*_*usB 0

这不会给您 SID,但您至少可以获得运行服务的 Windows 帐户名。

DECLARE @engine varchar(100), @agent varchar(100)

EXECUTE master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',N'SYSTEM\CurrentControlSet\Services\MSSQLSERVER',N'ObjectName',@engine OUTPUT,N'no_output'
EXECUTE master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',N'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT',N'ObjectName',@agent OUTPUT,N'no_output'
SELECT serverproperty('ServerName'),@engine as EngineServiceAccount,@agent as AgentServiceAccount
Run Code Online (Sandbox Code Playgroud)