我正在按照本指南使用Windows服务的虚拟帐户:https://technet.microsoft.com/library/dd548356%28v=ws.10%29.aspx?f=255&MSPPError=-2147217396
因此,这些类型的帐户不是手动创建的,而只是隐式使用。本指南未提及,但还需要将“作为服务登录”权限授予不存在的虚拟帐户。
例如,SQL Server Express 2014将虚拟帐户用于其服务,并将其作为用户NT Service\MSSQL$SQLEXPRESS
运行。安装后,您可以在“作为服务登录”帐户列表中找到帐户名称。
问题在于我不确定如何以编程方式将此权限授予虚拟帐户。我已经看过使用pinvoke使用LsaAddAccountRights
函数,但它需要指定帐户的SID。我不认为虚拟帐户 是SID。
我如何授予登录作为虚拟帐户的服务权限,这与Microsoft使用SQL Server Express的方式相同?
答案 0 :(得分:2)
事实证明,虚拟服务帐户并不明确需要"作为服务登录"权利被授予。
问题是登录名必须与使用它的服务的确切名称相匹配。因此,对于名为MyService的服务,登录名必须是" NT Service \ MyService"。它不能是任意帐户名称。
编辑:
从技术上讲,他们确实需要"作为服务登录"权限,但默认情况下会将其授予NT Service\ALL SERVICES
权限。但是,用户可能已经修改了此权限。
答案 1 :(得分:1)
默认情况下,"作为服务登录"权利被授予ALL SERVICES
,因此您的自我回答说您不需要明确添加每项服务。但是,如果已修改配置,则可能需要执行此操作。 (这可能是SQL安装程序这样做的原因。)
虚拟服务帐户执行具有SID,与服务名称的对应关系为1:1。如果需要,甚至还有一个命令行工具可以提前计算它们:
C:\>sc showsid xyzzy
NAME: xyzzy
SERVICE SID: S-1-5-80-1601682549-2674398373-2289982826-1892655095-2161370298
一旦安装了服务,我就无法提前找到一个API进行此计算(请注意,只有在服务成功启动时才需要登录权限,而不是为了安装它)您可以像查找任何其他SID一样查找SID,例如LookupAccountName()。