所以我最近换了工作——我在我们的新 SQL Server 安装构建脚本中发现的一段代码如下。
IF EXISTS ( SELECT *
FROM [sys].[syslogins]
WHERE [name] = N'NT AUTHORITY\SYSTEM' )
BEGIN
DROP LOGIN [NT AUTHORITY\SYSTEM];
END
IF EXISTS ( SELECT *
FROM [sys].[syslogins]
WHERE [name] = N'NT SERVICE\SQLWriter' )
BEGIN
DROP LOGIN [NT SERVICE\SQLWriter];
END
IF EXISTS ( SELECT *
FROM [sys].[syslogins]
WHERE [name] = N'NT SERVICE\Winmgmt' )
BEGIN
DROP LOGIN [NT SERVICE\Winmgmt];
END
GO
默认情况下,这些帐户是在 SQL Server 安装过程中创建的。
是否建议删除上述登录名?这会导致任何副作用吗?这些登录名有什么用?
我阅读了我可以删除 NT SERVICE\SQLWriter 和 NT SERVICE\Winmgmt 登录吗?但这还不够具体——我可以看到他们需要什么,但其他的就很少了。他们需要系统管理员访问权限吗?等等
例如(取自配置 Windows 服务帐户和权限):
Local System 是一个非常高特权的内置帐户。它在本地系统上拥有广泛的权限,并充当网络上的计算机。帐户的实际名称是
NT AUTHORITY\SYSTEM
。
我应该怎么读这个?应该保留这些“高”特权吗?
在你投反对票之前,这里有一份正式文件,你可以出于正当理由参考这些帐户的脚本,如你所见:STIG Rule SV-53421r2_rule。这些控件是特定于 SQL Server 版本的,但在较新的版本中也有许多其他控件。如果您为受这些控制的组织工作,并且还遵守一些更严格的控制,例如撤销给予公共角色的默认 Grants,事情会很快变得复杂。
由于我在受这些控制的环境中有一些经验,我可以说您可以完全禁用/删除
NT SERVICE\SQLWriter
和NT SERVICE\Winmgmt
帐户,但您需要确保您的 SQL Server 服务在具有足够操作系统级别的适当服务帐户下运行权限,例如充分锁定的域服务帐户,或者更好的独立或组托管服务帐户。同样,需要谨慎对待操作系统权限,因为如果您没有执行足够的测试,这确实会冒险进入纸牌屋领域。至于
NT AUTHORITY\SYSTEM
账户,如果您要运行任何可用性组,这不是您想要删除的账户。事实上,STIG SV-93835r1_rule提到您应该只保留CONNECT SQL
默认授予的权限。如果您有可用性组,则此帐户还需要具有以下附加权限:这些限制可能非常痛苦,但您有正当理由需要限制它们的使用和权限集。如果您不符合这些准则,请帮自己一个忙并注释掉这些步骤。
希望有帮助!