所以我们可以使用 Windows 登录或混合模式,但是我们可以将 SQL Server 配置为仅使用内部登录并阻止所有 Windows 登录吗?
添加所有潜在的 Windows 登录并将其设置为受限权限作为预防性(或反应性)过程的唯一解决方案是什么?
所以我们可以使用 Windows 登录或混合模式,但是我们可以将 SQL Server 配置为仅使用内部登录并阻止所有 Windows 登录吗?
添加所有潜在的 Windows 登录并将其设置为受限权限作为预防性(或反应性)过程的唯一解决方案是什么?
据我所知,无法在 SQL Server 2008 + R2 上禁用 Windows 身份验证:
http://msdn.microsoft.com/en-us/library/ms144284%28v=sql.105%29.aspx
唯一可以访问的 Windows 帐户是那些显式添加为登录名的帐户(或者是具有登录名的组的成员)。
它不能完全禁用,原因有两个:
安装时,会为
NT AUTHORITY\SYSTEM
、NT SERVICE\SQLSERVERAGENT
(或包含 SQL 代理服务帐户NT SERVICE\MSSQLSERVER
的组)和(或包含 SQL 数据库引擎服务帐户的组)提供登录名。这些是sysadmin
SQL Server 正常运行所需的级别登录。虽然快速测试显示删除所有这三个登录名只会阻止 SQL 代理重新启动(数据库引擎正常运行),但我确信还有其他函数依赖于其他两个登录名......它们是默认创建的是有原因的,所以我不会惹他们。(仅供参考,如果您自己对此进行测试:SSMS 中登录的 Drop & Create 脚本选项不会为服务器角色成员资格编写脚本。)
在单用户模式下,
sysadmin
无论是否创建了“包含”这些用户的登录名,都会自动授予本地管理员权限。当您将钥匙锁在车内时,这是一个衣架。正如另一个答案中提到的,只有明确创建的 Windows 登录才能访问连接(我原来的评论不正确)——删除所有用户创建的 Windows 登录足以阻止访问。
如果您需要更进一步并防止创建Windows 登录,这是一个起点(基于策略的管理,至少在 2008 年,不支持防止这种情况发生):
当然,任何有足够权限的人都可以打败这个,但这是一个单独的问题......