正如SQL Server最佳实践所述,“ Windows身份验证模式比SQL身份验证更安全 ”。现在我想知道:有没有一种方法可以保护SQL Server免受具有Windows管理员权限的用户的侵害?
正如SQL Server最佳实践所述,“ Windows身份验证模式比SQL身份验证更安全 ”。现在我想知道:有没有一种方法可以保护SQL Server免受具有Windows管理员权限的用户的侵害?
Answers:
没有。
如果用户是盒子的Windows管理员,请假定他们拥有盒子上的所有内容(包括SQL Server)。使用Windows管理员权限,通过假冒其他人(包括NT AUTHORITY\SYSTEM
,实际上在所有本地SQL Server实例上都具有管理员权限)来绕过您应用的任何有针对性的保护(例如,标识用户名的登录触发器)都是很简单的。审计也无济于事,因为他们可以轻松地将其关闭,但是您应该以防万一。
如果您不信任某人,请不要给他们Windows管理员权限。
不,不可能完全阻止本地管理员sysadmin
访问SQL Server实例。
如果实例以单用户模式重新启动sysadmin
,则即使可能没有显式登录,SQL Server也会进行硬编码以允许本地管理员特权。存在这个原因是出于恢复目的,因为可以将自己锁定在实例之外。
也就是说,在实例以多用户模式运行(没有服务中断)时限制访问并不那么困难。正如Aaron所提到的,本地管理员可以模拟NT AUTHORITY\SYSTEM
,默认情况下,该模拟sysadmin
在SQL Server 2008中创建了-level登录名。当服务器运行时,可以利用它来恢复sysadmin
访问。(注意:在SQL Server 2012中,此登录名不再是sysadmin
。。)我不知道此登录名的确切用途(大概是升级/热修复/等),但是我认为禁用它是安全的,除非在这些事件。如果没有其他无法模仿的登录名,则足以拒绝访问。同样,仅当实例正在运行时,才不会中断。
在SQL 2008和2012中,默认情况下,Windows管理员没有默认访问SQL Server的权限。为了使Windows管理员(即域管理员或本地管理员)可以访问,需要显式授予他们的登录名访问权限或授予他们属于的组访问权限以及SQL Server本身的权限。在设置实例时,要求您指定一个Active Directory登录名或组作为管理员,但是该登录名/组可以是您域中的任何人。
在SQL 2005中,存在一个BUILTIN\Administrators
具有sysadmin访问权限的组。该组将允许本地管理员sysadmin访问SQL Server。可以从SQL Server中删除该组,并认为这样做是最佳做法。
话虽这么说,没有办法防止Windows(本地或域)影响SQL Server所在的服务器。这意味着管理员仍然可以影响服务和操作系统级别的配置,更改目录安全性以及其他操作系统级别的任务。毕竟,这就是为什么他们是Windows管理员。
通常,您应该信任SQL Server和Windows的管理员。尽管Windows管理员无法在SQL Server本身内执行任务或访问数据(默认情况下),但他们仍控制着SQL Server所在的环境。您需要注意分配给那些角色的人员。