SQL Server 是一种关系数据库管理系统(RDBMS),用于存储和管理应用程序、分析和报告的关键业务数据。 因为它通常包含敏感信息,例如客户记录、财务数据和知识产权,因此保护 SQL Server 对于保护组织免受数据泄露、未经授权的访问和合规性风险至关重要。
本文提供有关如何最好地保护 SQL Server 的指导。
网络安全
保护对 SQL Server 的网络访问有助于防止未经授权的连接,减少对攻击的暴露,并确保只有受信任的源才能访问数据库。
使用防火墙和 NSG 限制入站流量:通过 配置 Windows 防火墙进行数据库引擎访问来限制对 SQL Server 的网络访问。 对于 Azure 虚拟机(VM)中的 SQL Server,请使用 Azure 防火墙 和 网络安全组(NSG) 强制实施这些限制。
加密与 SQL Server 的连接:将 SQL Server 数据库引擎配置为使用证书加密连接。 这可确保传输中的数据不受窃听和篡改的保护。 有关详细信息,请参阅 加密到 SQL Server 数据库引擎的连接。
安全远程管理:对所有远程连接使用加密协议(如 TLS 1.3)。 有关详细信息,请参阅 配置 TLS 1.3。
使用严格加密连接到 SQL Server:SQL Server 2022 引入了
strict加密选项,这要求所有连接都使用加密。 这有助于确保传输中的所有数据都受到保护。 有关详细信息,请参阅 使用严格加密连接到 SQL Server。
标识管理
强标识和身份验证控制有助于确保只有经过授权的用户和应用程序才能访问 SQL Server 资源。
使用 Windows 身份验证或Microsoft Entra 身份验证:首选 Windows 身份验证或Microsoft Entra 身份验证而不是 SQL 身份验证,以便集中标识管理和更轻松地进行帐户生命周期控制。 有关详细信息,请参阅选择身份验证模式。
将组托管服务帐户(gMSA)用于服务:使用 gMSA 自动安全地管理服务帐户凭据。 有关详细信息,请参阅 Group-Managed 服务帐户概述。
强制实施强密码策略:如果使用 SQL 身份验证,则需要无法轻松猜测且不用于其他帐户的复杂密码。 定期更新密码并强制实施 Active Directory 策略。 有关详细信息,请参阅 强密码。
适当时使用包含的数据库用户:考虑需要数据库级身份验证的应用程序包含的数据库用户,而无需服务器级登录。 有关详细信息,请参阅包含的数据库用户。
特权访问
限制和监视特权访问有助于防止未经授权的更改,并减少被入侵帐户的影响。
授予所需的最低权限:分配每个用户或服务所需的最低权限级别。 定期查看和调整权限以保持最低权限。 有关详细信息,请参阅 数据库引擎权限入门。
单独的数据库管理员(DBA)和
sysadmin角色:避免向所有 DBA 授予sysadmin权限。 尽可能使用 CONTROL SERVER 权限,因为它尊重DENY权限并允许进行更精细的控制。 考虑职责分离,限制对虚拟机的访问、登录到作系统的能力、修改错误和审核日志的能力以及安装应用程序和/或功能的能力。 有关详细信息,请参阅权限(数据库引擎)。监视和审核特权活动:启用审核以跟踪特权帐户所做的更改,并定期查看可疑活动的日志。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)。
实现角色分离:将 Active Directory 用户放置在 AD 组中,将 AD 组映射到 SQL Server 角色,并向 SQL Server 角色授予应用程序所需的最低权限。 有关详细信息,请参阅 数据库引擎权限入门。
数据保护
保护静态和传输中的数据对于防止未经授权的泄露或篡改至关重要。
使用 Always Encrypted 加密敏感信息:使用具有安全 enclave 的 Always Encrypted 和 Always Encrypted 来保护 SQL Server 中的敏感数据。 首选随机加密,以增强安全性。 有关详细信息,请参阅 Always Encrypted。
对数据库文件使用透明数据加密(TDE):使 TDE 能够加密数据库、备份和 tempdb 文件,并在物理媒体遭到入侵时保护数据。 有关详细信息,请参阅透明数据加密 (TDE)。
使用动态数据掩码(DDM)屏蔽敏感数据:如果无法加密,请使用 DDM 在查询结果中模糊化敏感数据。 有关详细信息,请参阅 Dynamic Data Masking。
授予列级权限:通过授予或仅向授权用户授予
SELECTREFERENCESUPDATE权限来限制对敏感列的访问权限。 有关详细信息,请参阅 GRANT 权限。使用 Row-Level 安全性(RLS)限制数据访问:实现 RLS 以确保用户只看到与其相关的数据。 对于用户共享 SQL 帐户的中间层应用程序,使用
SESSION_CONTEXT。 有关详细信息,请参阅 Row-Level 安全性。结合使用安全功能以实现最大保护:将 Row-Level 安全性与 Always Encrypted 或动态数据掩码结合使用,以最大程度地提高组织的安全状况。 有关详细信息,请参阅 Row-Level 安全最佳做法。
日志记录和威胁检测
全面的日志记录和监视有助于检测威胁、调查事件并满足合规性要求。
启用和配置 SQL Server 审核:审核对服务器和数据库级别的敏感数据和配置的访问和更改。 考虑审核具有已对其应用安全措施的敏感数据的表和列。 定期查看审核日志,尤其是对于包含无法执行完整安全措施的敏感信息的表。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)。
在 SQL Server 中使用账本:启用账本以创建敏感数据更改的不可变记录,从而提供防篡改日志记录。 有关详细信息,请参阅配置账本数据库。
备份和恢复
可靠的备份和恢复过程可保护数据免受故障、灾难或攻击造成的丢失。
自动执行常规备份:计划数据库、系统配置和事务日志的自动备份。 使用 Azure 备份或本机 SQL Server 工具。 有关详细信息,请参阅 使用 SSMS 备份和还原 SQL Server 数据库 , 以及 Azure VM 上的 SQL Server 的备份和还原。
加密备份数据:使用透明数据加密保护备份文件(TDE)。
定期测试恢复过程:定期还原备份以验证恢复过程,并确保满足恢复时间和时间点目标。 有关详细信息,请参阅 从 VM 备份还原文件。
安全评估和威胁缓解
定期评估 SQL Server 环境有助于识别漏洞并提高安全状况。
限制启用的功能以减少攻击面:仅启用环境所需的 SQL Server 功能。 有关详细信息,请参阅外围应用配置。
运行漏洞评估:使用 SSMS 中的 SQL 漏洞评估 发现和修正潜在的数据库漏洞。 有关详细信息,请参阅 SQL 漏洞评估。
分类和标记敏感数据:使用 SQL 数据发现和分类来识别和标记敏感数据,以便更好地保护和符合性。 有关详细信息,请参阅 SQL 数据发现和分类。
查看和缓解常见威胁:遵循输入验证、修补和访问控制的建议做法,防范 SQL 注入、旁路攻击、暴力攻击、密码喷射和勒索软件。 有关详细信息,请参阅 SQL 注入 和 勒索软件攻击。
实现深层防御安全性:使用针对不同安全作用域的多个安全功能,为各种威胁提供全面的防护。 有关详细信息,请参阅 SQL Server 安全最佳做法。