在授予用户访问数据库的权限时,需要考虑一些在可用性和安全性方面的优缺点。在这里,我们有两个选项用于对用户进行身份验证和授予权限。第一种是授予每个人 sa(系统管理员)帐户访问权限,然后通过保留可以根据需要授予或拒绝权限的用户列表手动限制权限。这也称为 SQL 身份验证方法。此方法存在重大安全漏洞,如下所示。第二个更好的选择是让 Active Directory (AD) 处理所有必要的身份验证和授权,也称为 Windows 身份验证。
使用 SQL 选项的主要安全问题是它违反了最小权限 (POLP) 原则,即只给用户他们需要的绝对必要的权限,而不是更多。通过使用 sa 帐户,您会出现严重的安全漏洞。违反 POLP 是因为当应用程序使用 sa 帐户时,它们可以访问整个数据库服务器。另一方面,Windows 身份验证遵循 POLP,仅授予对服务器上一个数据库的访问权限。
第二个问题是应用程序的每个实例都不需要拥有管理员密码。这意味着任何应用程序都是整个服务器的潜在攻击点。Windows 仅使用 Windows 凭据登录到 SQL Server。Windows 密码存储在存储库中,而不是 SQL 数据库实例本身,并且身份验证在 Windows 内部进行,而无需在应用程序上存储密码。
使用 SQL 方法产生的第三个安全问题涉及密码。如 Microsoft 网站和各种安全论坛上所述,SQL 方法不强制更改密码或加密,而是通过网络以明文形式发送。并且 SQL 方法在尝试失败后不会锁定,因此允许长时间尝试闯入。然而,Active Directory 使用 Kerberos 协议来加密密码,同时还采用密码更改系统并在尝试失败后锁定。
效率上也有缺点。由于您将要求用户每次想要访问数据库时都输入凭据,因此用户可能会忘记他们的凭据。
如果某个用户被删除,您将不得不从应用程序的每个实例中删除他的凭据。如果必须更新 sa 管理员密码,则必须更新 SQL 服务器的每个实例。这是耗时且不安全的,它留下了被解雇的用户保留对 SQL Server 的访问权限的可能性。使用 Windows 方法,这些问题都不会出现。一切都由 AD 集中和处理。
使用 SQL 方法的唯一优点在于它的灵活性。您可以从任何操作系统和网络访问它,甚至可以远程访问。一些较旧的遗留系统以及一些基于 Web 的应用程序可能只支持 sa 访问。
AD 方法还提供了节省时间的工具,例如组,以便更轻松地添加和删除用户,以及用户跟踪能力。
即使您设法纠正了 SQL 方法中的这些安全漏洞,您也将重新发明轮子。考虑到 Windows 身份验证提供的安全优势,包括密码策略和遵循 POLP,它是比 SQL 身份验证更好的选择。因此,强烈建议使用 Windows 身份验证选项。