Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

SQL Server 安全基础入门指南

SQL Server 安全基础入门指南

Mar 5, 2025

如今,各组织会收集并生成海量的敏感数据,其中许多数据存储在 SQL Server 数据库中,因此SQL Server security 的管理对于保护关键应用程序和服务至关重要。实施强有力的 Microsoft SQL Server 安全措施,能够帮助组织抵御网络威胁,并遵守诸如GDPR、HIPAA 和 PCI DSS 等法规。本指南涵盖 SQL Server 安全基础,包括认证、授权、加密、审计,以及保护 SQL Server 的最佳实践。

本指南为强化 SQL Server 安全性提供了坚实的基础。它涵盖需要了解的所有关键领域,包括平台与网络安全、认证与授权、数据加密、审计以及应用程序安全。还将探讨关键趋势,帮助您在威胁环境不断变化的情况下,持续保护 SQL Server 数据库。

SQL Server 安全基础

了解 SQL Server 安全威胁

对手会利用 MS SQL Server 安全中的漏洞,例如 弱口令 或权限配置错误。攻击者可能会提升权限以获得更深层次的访问,从而威胁 SQL Server 数据库安全。SQL 注入攻击仍是主要关注点,它可实现未授权访问、数据篡改或删除。

另一个主要攻击途径是 SQL 注入攻击——事实上,它们被评为对 Web 应用程序最关键的安全风险之一。这种策略通过将恶意 SQL 代码注入到应用程序查询中来实现,并可能使恶意行为者能够访问、修改或删除重要数据。

SQL Server 安全框架

为落实 SQL Server 安全管理,Microsoft 采用分层的安全模型:

  • 可保护对象(Securables): 需要保护的数据库对象,例如表、视图和存储过程。
  • 主体(Principals): 请求访问的实体(用户、登录、应用程序)。
  • 权限: 在服务器级、数据库级和对象级,通过基于角色的访问控制(RBAC)进行管理,用于定义允许对可保护对象(Securables)执行的操作。

主体访问可保护资源(securables)的能力由不同类型的权限所决定:

  • 分配给某个可保护资源(securable)的权限定义了可以在其上执行哪些操作,例如 SELECT、INSERT 或 EXECUTE。
  • 授予某个主体的权限会限制该主体可以访问哪些可保护资源(securables),以及可以执行哪些操作。最佳实践是使用基于角色的访问控制(RBAC)来分配权限,而不是直接分配。本文稍后将更详细地讨论 RBAC。

权限可以通过分层模型继承:服务器级别 > 数据库级别 > 对象级别。这使得能够对数据库系统的不同部分的访问进行更精细的控制。

对 SQL Server 进行审计以进行变更跟踪与合规

了解更多

平台与网络安全

减少攻击面对于保护 SQL Server 至关重要。最佳实践包括:

  • 应用 SQL Server 审计 策略以监控未经授权的访问尝试。
  • 禁用未使用的服务、示例数据库和默认账户。
  • 通过行级安全(row-level security)和最小特权原则限制服务器级访问。
  • 通过实施数据脱敏技术来隐藏敏感信息。

物理安全最佳实践

安全始于物理防护。每一台 SQL Server 都应部署在数据中心中,在该数据中心里,出入可通过钥匙卡、PIN 或生物识别等认证机制进行保障。该区域应配备摄像头进行监控,并应记录对服务器机房的所有访问。

现场的 SQL Server 备份应保存在带锁且防火、防水的存储柜中;另外的副本应保存在异地的另一个受访问控制的设施或可信的云存储中。

操作系统与网络防护

为了进一步降低 SQL Server 的攻击面,请启用自动更新并及时安装补丁。使用内部防火墙对关键服务器进行分段配置,仅允许必要端口(例如 TCP 1433)。此外,请务必:

  • 禁用任何不必要的服务以及未使用的网络协议。
  • 删除在生产环境中不需要的示例数据库和组件。
  • 禁用或移除未使用的默认帐户和服务
  • 限制对 SQL Server 的远程访问。
  • 使用 SQL Server Configuration Manager 等工具,确保安全设置正确。

基于云的 SQL Server 安全

保护本地资源的安全措施不一定适用于已迁移到云端的资源。像 Azure SQL 和 Amazon RDS 这样的云解决方案,需要专门的 Microsoft SQL Server 安全措施。例如,Azure Defender for SQL 提供托管服务,例如漏洞评估以及 SQL Server 审计功能。

  • Azure Defender for SQL 是一种全面的安全解决方案,用于保护 Azure 云环境中的 SQL 数据库,提供先进的威胁防护和漏洞评估。
  • Amazon RDS 提供强大的安全功能,用于保护托管在 AWS 上的 SQL 数据库,例如身份和访问管理(IAM)以及自动备份与快照。
  • Google Cloud SQL 提供多种安全功能来保护 SQL 数据库,包括身份验证与访问控制、加密以及网络安全。

身份验证与授权

身份验证模式

保护 SQL Server 还需要对尝试访问数据库资源的主体进行有效的身份验证。SQL Server 支持以下身份验证选项:

  • Windows 身份验证 是推荐选项。它更适用于 SQL Server 的安全管理,因为它利用了 Active Directory 策略。而且由于它依赖于 Active Directory (AD) 来对用户进行身份验证,您可以获得 AD 密码策略 以及其他安全控制。
  • SQL Server 身份验证通过在数据库服务器上存储用户名和密码来工作。在无法使用 Active Directory 的情况下,可以使用该方法。
  • 为进一步保护 SQL Server,请使用以下方式实施多因素身份验证(MFA):
  • 一次性密码(OTP)
  • 生物识别认证
  • 硬件安全密钥
  • Contained Database Users 是特定于数据库的用户,不依赖 SQL Server 登录。相反,它们的凭据存储在数据库本身中。这样既能提升可移植性,又能在服务器之间迁移数据库时简化用户管理。

Role-Based Access Management

如前所述,最佳实践建议使用 RBAC,而不是直接向用户和应用程序分配权限。使用 RBAC 能显著降低管理开销,同时提高准确性和透明度。

在 RBAC 中,权限授予给角色,用户会继承其所被分配到的角色所拥有的权限。预定义的 SQL Server 角色包括:

  • Server roles 适用于 SQL Server 实例级别。它们用于委派管理任务,例如管理登录、配置服务器设置以及执行备份。内置角色包括 sysadmin、serveradmin 和 securityadmin。
  • 数据库角色 用于在特定数据库中定义访问权限。诸如 db_owner、db_datareader 和 db_datawriter 之类的预定义角色有助于分离职责并限制过度的权限。
  • 应用程序角色 是专门的数据库角色,会向应用程序而非个人用户授予特定权限。通过将对数据的访问限制为仅通过预定的应用程序实现,从而增强安全性。
  • 组织还可以定义符合自身特定需求的自定义角色。

增强身份验证

由于如今密码很容易被泄露,你不应仅依赖密码来保护宝贵数据。多因素身份验证(Multifactor authentication,MFA)通过在授予访问权限之前要求多种形式的验证来增强安全性。选项包括:

  • 通过短信或电子邮件发送的一次性验证码(OTP)
  • 诸如指纹或人脸识别等生物特征
  • 诸如 YubiKey 或 FIDO2 之类的硬件安全密钥

数据加密与保护

SQL Server 中的加密

组织必须假设敏感数据迟早会在某个时刻被暴露。加密有助于确保被盗数据对未经授权的人员仍然不可读。

下面是 SQL Server 提供的一些加密方式:

  • Transparent Data Encryption (TDE) — 对数据库文件进行实时加密,从而在物理层面保护已存储的数据。TDE 使用存储在 SQL Server 主数据库(master database)中的数据库加密密钥(DEK),对整个数据库进行加密,包括备份在内。
  • Always Encrypted — 通过在应用层对数据进行加密,旨在保护诸如信用卡信息和社会保障号码等高度敏感数据。加密密钥存储在 SQL Server 之外,以防止即使是数据库管理员等具有高度特权的用户也能够查看敏感信息。
  • Windows Data Protection API (DPAPI) — 使用基于 Windows 的加密功能来加密 SQL Server 凭据、密钥以及其他敏感信息。

Dynamic Data Masking (DDM)

与加密不同,加密会将整段数据转换为无法读取的格式,并且需要密钥才能解密;而 DDM 会在向非特权用户显示信息时,遮蔽部分敏感数据,同时保留原始数据不变。例如,DDM 可以在实时情况下对社会安全号码、信用卡详情和电子邮件地址进行遮蔽。

Column-Level Encryption (CLE)

与 DDM 类似,CLE 也提供有针对性的数据保护。不过,它是通过对数据库表中的特定列进行加密来实现的,而不是对选定的数据进行遮蔽。因此,与 CLE 相比,DDM 对性能的影响更小。

Row-Level Security (RLS)

行级安全根据用户的身份或角色来控制对数据库表中特定行的访问。它使用应用于表的安全策略来筛选行。筛选由安全谓词(predicate)控制——这些函数用于确定某一行应当对执行查询的用户可见还是可修改。有两种类型:用于读取操作的筛选谓词,以及用于写入操作的阻止谓词。

审计与监控

跟踪和分析数据库活动对于发现威胁并确保符合监管要求至关重要。SQL Server Audit 提供了一个内置框架,用于跟踪对数据库所执行的活动以及发生的变更。

SQL Server Audit 功能

SQL Server Audit 支持两种主要的审计级别:

  • 服务器级审计 可捕获整个 SQL Server 实例中的事件,例如登录、配置修改、权限更改以及失败的身份验证尝试。 因此,它有助于发现诸如 privilege escalation 之类的威胁。
  • 数据库级审计 关注特定数据库内的操作,例如数据修改、架构更改以及权限授予。

要在 SQL Server 中设置审计,管理员会定义审计策略,用于指定应记录哪些操作和事件。配置完成的审计应定期进行复核,并且必须实施日志保留策略,以防止过多的数据存储。

安全工具和实用程序

SQL Server Management Studio (SSMS) 包含内置的 Vulnerability Assessment 工具,可帮助发现安全弱点,包括过时的补丁、过高的权限以及过时的协议。此外,它还可以提供用于修复的可操作建议。

SQL Server Data Discovery & Classification 可自动发现数据库中可能敏感的数据,并推荐适当的分类标签,例如个人身份信息(PII)或金融记录。它还可以生成用于合规与审计目的的详细报告。

其他内置安全工具包括 Security Catalog Views 和 Functions,它们提供:

  • 对数据库安全设置和配置的全面可视化
  • 对用户权限和访问控制机制的深入洞察
  • 对与安全相关的元数据进行实时监控的能力

这些工具可以帮助管理员检测权限提升尝试、未经授权的用户账号创建以及配置错误的安全设置。

使用监控工具

对 SQL 环境进行定期监控对于发现可疑活动以及评估安全控制的有效性至关重要。以下最佳实践可帮助您充分发挥监控工作的价值:

  • 测量高峰时段和非高峰时段的正常性能水平。
  • 使用这些基线来识别可能表明威胁的偏差,并为向安全团队发出告警设定阈值。
  • 寻找可能表明新出现问题或需要优化的领域的模式。
  • 定期更新监控配置,以匹配不断变化的业务需求。

为进一步加强安全性,请在传统监控工具的基础上补充以下内容:

  • 数据访问控制器 ,有助于将未经授权的访问风险降至最低,并防止权限升级
  • 安全分析工具 ,通过使用机器学习和行为分析来检测异常的用户活动,例如异常的查询模式或过度的数据访问。

应用程序安全

安全的应用程序开发

如前所述,SQL 注入是对 Web 应用程序的主要威胁之一。以下是一些防御这些攻击的方法:

  • 使用参数化查询,将 SQL 代码与用户输入分开。
  • 在授予数据库权限时,务必严格遵循 principle of least privilege 这一原则。
  • 使用带参数化输入的存储过程来封装数据库查询。
  • 实施严格的输入校验,以尽量降低包含恶意 SQL 代码的风险。例如,数据类型限制可确保数值字段只接受数字,而日期字段只接受有效的日期格式。其他校验方法还包括白名单校验以及限制输入长度。

错误处理与信息泄露

配置错误消息时,需要把握恰当的平衡:既要提供足够的信息以便进行故障排查,又要避免包含可能帮助攻击者完善其利用尝试的细节。一个良好的策略是在开发环境中使用详细的错误消息,而在生产环境中使用通用消息。通用消息可以包含供内部团队查阅的错误代码,从而避免向用户显示敏感的系统信息。

客户端应用程序(例如 Web 和移动应用)由于用户可以直接访问它们,因此尤其容易受到攻击。以下最佳实践有助于提高安全性:

  • 始终使用 HTTPS(TLS 加密)来保护传输中的数据。
  • 在客户端侧存储敏感数据时,请使用安全的方法,例如加密的本地存储或安全 Cookie。
  • 请保持客户端侧的框架和库处于最新状态,以便及时应用安全补丁。
  • 禁用 JavaScript 控制台日志中的详细错误信息。
  • 使用 RBAC 来帮助确保访问权限的准确配置。

应用级角色

应用角色提供了一种在特定应用程序内控制和组织用户权限的方法。它们既能在简化管理的同时增强安全性和合规性。

下面是应用角色的通用示例:

  • 管理员 — 具有管理用户、设置和配置的完全访问权限。
  • 经理 — 可以查看报表并批准交易,但不能修改系统设置
  • 用户 — 可以创建和编辑内容,但不能删除记录

请务必跟踪角色、权限以及角色分配的变更。此外,还应进行定期的访问审查,检查用户是否仍然需要其被分配的角色。

SQL Server 安全最佳实践

例行安全审计

定期审计对于确保 SQL Server 环境安全至关重要。以下是需要重点审计的项目:

  • 对数据库架构的更改 — 不恰当的修改可能会引入安全风险或导致系统不稳定。
  • 服务器和数据库配置 — 请务必检查加密设置、身份验证模式以及访问控制。
  • 用户账户 — 及时移除未使用或不必要的用户账户,可最大限度降低安全暴露。
  • 登录失败尝试 — 频繁的登录失败尝试可能表明正在进行暴力破解攻击。

持续保持合规

当今的组织往往需要遵守各类法规。其中一些法规是针对特定行业的,例如医疗(HIPAA)、零售(PCI DSS)或金融(SOX)。还有一些(例如 GDPR)适用范围更为广泛。

确保您的审计实践符合适用于贵组织的监管要求,并确认在审计开始前已提前准备好所有所需文件。

SQL Server 安全性实践

真实场景案例研究

网络犯罪分子之所以经常攻击 SQL Server,是因为其中存储了宝贵的数据。尤其是,威胁行为者会主动扫描互联网,寻找开放了 TCP 端口 1433 的 SQL Server。通过利用这种错误配置,他们可以利用尚未修补的漏洞、发起 SQL 注入攻击,或采用暴力破解策略来获取对具有服务器及其数据库特权访问权限的账户的控制权。

由于存在许多不同类型的威胁,因此必须采用纵深防御(defense-in-depth)策略,在不同层级部署安全控制。这样一来,如果某一层被攻破,其他保护措施仍会保持到位,从而缓解威胁。例如,如果主要防火墙受到破坏,强身份验证、访问控制策略和加密将帮助保护您的数据。

安全评估工具

SQL Server Management Studio (SSMS) 是 Microsoft 用于管理 SQL Server 数据库的主要图形界面工具。它使管理员能够:

  • 管理登录、角色和权限。
  • 加密数据库。
  • 进行数据发现与分类。
  • 扫描数据库以识别潜在漏洞。

安全评估操作手册 帮助组织评估并提升数据库安全性。例如,Microsoft 提供了一份全面的操作手册,用于应对 Azure SQL Database 和 SQL Managed Instance 中常见的安全要求。组织可以根据其特定的 SQL Server 环境和安全需求,制定自己的安全评估操作手册。

事件响应与恢复

一旦发生安全漏洞/泄露,必须采取迅速且果断的行动以尽量减少损失。为做好准备,组织需要制定一份详细的事件响应与恢复计划,并定期演练、审查和更新。

务必让所有相关团队参与。例如,IT 需要采集受影响系统的取证镜像以及其他证据,以支持调查和潜在的法律行动。高级管理层和公关(PR)必须制定沟通计划,确保触达所有受影响的受众,包括员工、客户、投资者以及其他相关方。

从备份中恢复数据是恢复流程的关键环节。除了建立定期备份流程之外,你的团队还必须定期测试备份,以验证数据完整性,并确保恢复流程按预期工作。明确界定恢复时间目标(RTO)有助于衡量恢复工作的成功程度。

SQL Server 安全防护的未来趋势

安全专业人员和威胁行为者都将继续积极利用新兴技术来推进各自的目标。尤其是,攻击者将越来越多地利用人工智能和机器学习来创建更复杂的威胁,而防御者也将使用这些同样的技术来增强异常检测和预测式威胁分析。

另一个重要趋势是越来越多地采用云原生安全平台。它们为保护本地部署(on-premises)和云端部署(cloud-based)的 SQL Server 实例提供了统一的方法。最后,量子计算机可能攻破当前加密方法的潜在风险正在加速对抗量子(quantum-resistant)算法的研究。

Netwrix 如何提供帮助

要确保 SQL Server 环境安全,需要监控变更、跟踪访问并保持正确的配置。以下是一些可提升 SQL 安全性的 Netwrix 产品:

  • Netwrix Access Analyzer – 该工具可让您清晰了解 SQL Server 及其他 IT 系统中的变更与访问事件,从而帮助发现潜在的安全威胁。
  • Netwrix Auditor for SQL Server – 该工具可监控数据库活动、失败的登录以及权限变更,使您更容易识别可疑行为并确保符合性。
  • Netwrix Change Tracker – 该产品会记录 SQL Server 中的配置变更,帮助防止未经授权的修改,并维持安全最佳实践。

结论

保护 SQL Server 需要持续的警惕与不断的适应。为加强数据库安全,请着重实施分层防御策略,定期审计系统,并持续了解最新威胁及其应对措施。

同时请记住,安全是一个持续的过程,而不是一次性任务。通过安全博客、专业培训以及 Microsoft 的官方文档等资源,不断提升您的技能与知识。通过将安全置于优先位置并采用最佳实践,您可以在日益复杂的数字环境中显著降低风险,并保护关键数据资产。

Netwrix Auditor for SQL Server

常见问题

如何保护您的 SQL Server?

要针对威胁和漏洞正确保护 SQL Server 环境,需要采用纵深防御(defense-in-depth)策略,即多个层次的控制与解决方案协同工作。关键策略包括:确保服务器的物理安全;通过定期打补丁等最佳实践,并实施最小权限(least privilege)以限制访问来减少攻击面;对敏感数据进行加密等。

Microsoft SQL Server 安全吗?

与任何数据库系统一样,保护 SQL Server 需要正确的实施与维护。默认设置可能无法提供最佳安全性,因此管理员需要根据组织的具体要求对服务器进行谨慎配置。安全性还取决于遵循最佳实践,例如建立有效的补丁管理、强有力的 密码策略 以及可靠的监控与审计。

SQL Server 中的数据库安全是什么?

数据库安全涉及实施流程和控制措施,以防范诸如未经授权的数据访问和篡改等威胁。它需要多层次的安全功能,包括认证机制、访问权限管理,以及对静态数据和传输中数据进行加密。SQL Server 提供高级功能,例如动态数据脱敏(dynamic data masking)用于保护机密信息,以及行级安全(row-level security)用于在更细粒度的层面控制对数据的访问。

如何检查 SQL Server 数据库是否受信任?

TRUSTWORTHY 数据库属性用于指示 SQL Server 实例是否信任该数据库及其内容。默认情况下,该属性设置为 OFF,但可以通过 ALTER DATABASE 语句启用。若将其设置为 ON,则使用 EXECUTE AS 的数据库模块(例如存储过程或函数)被允许访问数据库之外的资源,例如服务器级权限。

要确定 SQL Server 数据库是否受信任,请在 SQL Server Management Studio 中查看此设置,或使用 T-SQL 查询。

SQL Server 中的安全性是什么?

SQL Server 安全性是一个用于保护数据和数据库资源的多层系统。它包括用于验证用户身份的身份验证,用于控制访问级别的授权,用于保护敏感数据的加密,以及用于监控活动的审计。安全模型的关键要素包括主体(如用户和应用程序)、可保护的对象(如数据库、表和存储过程)以及角色(如 sysadmin 和 db_owner)。

为实现更高级的数据保护,SQL Server 包含动态数据遮蔽(dynamic data masking)和行级安全(row-level security)等功能。

有哪些 5 个关键步骤可以帮助确保数据库安全?

以下是 5 项有助于确保数据库安全的最佳实践:

  1. 通过限制不必要的服务来加固 Windows Server。特别是,禁用 SQL Server Browser 服务。
  2. 使用加密来保护静态数据和传输中的数据。
  3. 根据最小特权原则严格限制服务账号的权限。
  4. 建立正常活动的基线,并监控可能表明威胁的异常情况。
  5. 通过清理查询并使用参数化语句来防范 SQL 注入。

SQL 中有哪些安全机制?

SQL Server 提供多种安全机制,用于保护数据并控制访问。例如包括动态数据屏蔽,用于实时保护敏感数据;用于对特定数据进行条件性访问的行级安全(row-level security,RLS)和列级安全(column-level security,CLS);以及用于加密静态数据的透明数据加密(Transparent Data Encryption,TDE)。

分享到

了解更多

关于作者

Asset Not Found

James Anderson

技术产品经理

James Anderson 是 Netwrix Access Analyzer 和 Netwrix Change Tracker 的技术产品经理。他拥有超过 15 年的软件与数据经验,包括担任首席数据工程师(Lead Data Engineer)、数据架构师(Data Architect)和数据库管理员(DBA)的经历。