保护 SQL Server 数据库免受域管理员的攻击

3
我继承了一个SQL Server服务器,上面有很多数据库,并且使用Windows身份验证创建/维护已建立的数据库。服务器本身有许多其他服务,需要用户作为管理员登录以进行维护。
现在我需要在服务器上创建一个新的数据库,只有公司内部的一些人(包括IT)才能访问。因此,我在寻找最佳入手点。
我希望继续为这些人提供对该服务器上所有其他内容所需的管理员级别访问权限,但限制他们对SQL Server选项的访问,以便更好地管理和保护数据库。可能最好的方法是取消Windows身份验证方法,并分配数据库/创建机会给这些用户,同时保护不应访问的新数据库吗?是否正确从Windows身份验证方法偏离?
3个回答

4
在服务器上创建第二个实例的主要原因之一是为了安全起见。通过创建第二个实例,您基本上重新启动了安全性。因此,这是您可以考虑为新数据库选择的选项,即创建第二个实例并将“安全”数据库放置在其中。
还有一些事情需要考虑。
首先,是的,您应该尽可能地取消安全性并提供给任何给定用户/组所需的最低安全性。这是一个最佳实践。永远不要在没有明确理由的情况下授予dbo或sysadmin权限,即使有理由如此,也要彻底质疑以确保没有其他解决问题的方法。永远不要授予比绝对所需的权限更多的权限。
其次,如果管理员真的想进入实例,则几乎不可能让该实例所在服务器的管理员无法进入。我之所以说“几乎”不可能,是因为可能存在我不知道的方法。在服务器管理员或域管理员级别上,您必须假设他们可以信任不会试图闯入。您可能无法阻止他们进入。
最后但同样重要的是,如果您可以将实例从需要用户登录为管理员来维护的服务器中移出。这首先是一个安全噩梦(如上所述),其次,您的SQL服务器将在自己的服务器上运行得更好。我甚至听到过专家的建议,说您永远不应该远程登录SQL Server实例所在的服务器。如果必须远程登录,请不要在远程登录时复制文件。通常来说,在服务器上进行的操作越少,SQL就越快乐。

我肯定考虑了第二个实例,并省略了一些细节,以防止我的问题更加混乱。在这种情况下,要添加的数据库将是财务性质的,并且报告将跨越它们可以访问的数据库进行连接。我知道我可以使用备用用户名在同一实例上跨越数据库轻松完成此操作,但对于第二个实例并不确定。我认为我被迫在单个实例中工作,只是为了保持清醒。我目前的想法是更改管理员密码,然后强制远程访问作为他们的用户名,并使用这些名称作为特定数据库的权限。 - digital alchemist
单实例路径肯定是可行的,但可能不够安全。您仍然可以通过使用一些受保护的联机服务器来工作两个实例路径。由于只有有限数量的人可以进入新实例,因此只有这个有限数量的人才能访问联机服务器。缺点是跨实例查询可能较慢,并且需要更好地管理。 - Kenneth Fisher

1
你可以通过从SQL Server登录中删除BUILTIN\Administrators组来取消域管理员访问SQL Server的权限。
我不建议放弃Windows身份验证,因为这会创建一整套新的安全问题,您必须处理。

谢谢。我正在更仔细地研究那些用户需要访问其他功能的管理员角色的各种原因。从那里开始,我可能会让他们使用特定的用户/帐户远程登录,并根据他们的用户授予SQL权限。 - digital alchemist

0

域管理员可以:

  • 将自己添加到任何具有对 SQL Server 访问权限的组(本地或域)中
  • 更改服务帐户策略并使用该帐户登录
    • 如果 SQL Server 使用内置帐户,则更改为使用服务帐户
  • 使用任何具有 SQL Server 访问权限的用户帐户
    • 更改密码以允许此操作
  • 在域中做任何事情。完全没有限制。

SQL Server 始终启用 Windows 身份验证,因此始终可供域管理员使用。

如果它非常敏感,则需要放在单独的域或独立环境中。


我认为我面临的是“厨房里太多厨师”的情况,需要首先从这个角度来解决它。 - digital alchemist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接