繁体   English   中英

如何以编程方式将“作为服务登录”授予虚拟帐户

[英]How to programatically grant “Log on as a service” to a virtual account

我正在遵循有关为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一样授予虚拟帐户登录即服务权限?

事实证明,虚拟服务帐户不需要明确授予“作为服务登录”权限。

问题在于登录名必须与使用它的服务的确切名称匹配。 因此,对于名为MyService的服务,登录名必须恰好是“ NT Service \\ MyService”。 不能是任意帐户名。

编辑:

从技术上讲,他们确实需要“作为服务登录”权限,但是默认情况下,这是NT Service\\ALL SERVICES权限授予的权限。 但是,该权限可能已被用户修改。

默认情况下,“作为服务登录”权限授予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()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM