你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure SQL 数据库和 Azure SQL 托管实例安全功能概述

适用于:Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

本文概述了保护使用 Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics 的应用程序的数据层的基本知识。 本文中所述的安全策略遵循分层防御深度方法,如下图所示,并从外部移动:

分层防御深度图。客户数据被包裹在网络安全层、访问管理和威胁和信息保护层中。

网络安全

Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics 为云和企业应用程序提供关系数据库服务。 为了帮助保护客户数据,防火墙会阻止对服务器的网络访问,除非显式基于 IP 地址或 Azure 虚拟网络流量源授予访问权限。

IP 防火墙规则

IP 防火墙规则基于每个请求的起始 IP 地址授予对数据库的访问权限。 有关详细信息,请参阅 Azure SQL 数据库和 Azure Synapse Analytics 防火墙规则概述

虚拟网络防火墙规则

虚拟网络服务终结点将虚拟网络连接扩展到 Azure 主干网,并使 Azure SQL 数据库能够识别作为流量来源的虚拟网络子网。 若要允许流量到达 Azure SQL 数据库,请使用 SQL 服务标记,以允许出站流量通过网络安全组。

  • 虚拟网络规则使 Azure SQL 数据库仅接受从虚拟网络中的所选子网发送的通信。
  • 使用防火墙规则控制访问不适用于 SQL 托管实例。 有关所需网络配置的详细信息,请参阅连接到托管实例

注意

使用防火墙规则控制访问不适用于 SQL 托管实例。 有关所需网络配置的详细信息,请参阅连接到托管实例

网络安全边界

Azure 网络安全外围围绕在虚拟网络外部部署的平台即服务 (PaaS) 资源创建逻辑网络边界。

  • Azure 网络安全外围可帮助控制对 Azure SQL 数据库的公用网络访问。
  • 使用 Azure 网络安全外围控制访问不适用于 Azure SQL 托管实例。

重要

具有网络安全外围的 Azure SQL 数据库目前以预览版提供。 预览版在没有服务级别协议的情况下提供,不建议用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

身份验证

身份验证是证明用户所声明身份的过程。 Azure SQL 数据库和 SQL 托管实例支持通过 Microsoft Entra ID(以前称为 Azure Active Directory)和 SQL 验证进行身份认证。 SQL 托管实例还支持对 Microsoft Entra 主体进行 Windows 身份验证

  • Microsoft Entra 身份验证

    Microsoft Entra 身份验证是一种使用 Microsoft Entra ID 中的标识连接到 Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics 的机制。 使用 Microsoft Entra 身份验证,管理员可在一个中心位置集中管理数据库用户以及其他 Azure 服务的标识和权限。 此功能可帮助消除机密和密码的使用。

    若要对 SQL 数据库使用 Microsoft Entra 身份验证,请创建名为 Microsoft Entra 管理员的服务器管理员。 有关详细信息,请参阅使用 Microsoft Entra 身份验证连接到 SQL 数据库。 Microsoft Entra 身份验证同时支持托管帐户和联合帐户。 联合帐户支持与 Microsoft Entra ID 联合的客户域的 Windows 用户和组。

    Microsoft Entra 支持多种不同的身份验证选项,包括多重身份验证集成 Windows 身份验证条件访问

  • Microsoft Entra 主体的 Windows 身份验证

    Microsoft Entra 主体的 Kerberos 身份验证可为 Azure SQL 托管实例启用 Windows 身份验证。 托管实例的 Windows 身份验证使客户能够将现有服务迁移到云,同时保持无缝的用户体验,并为基础设施现代化提供基础。

    若要为 Microsoft Entra 主体启用 Windows 身份验证,请将 Microsoft Entra 租户转换为独立的 Kerberos 领域并在客户域中创建传入信任。 了解如何使用 Microsoft Entra ID 和 Kerberos 为 Azure SQL 托管实例实现 Windows 身份验证

  • SQL 身份验证

    SQL 身份验证是指使用用户名和密码连接到 Azure SQL 数据库或 Azure SQL 托管实例时用户进行身份验证。 创建服务器时,必须使用用户名和密码指定 服务器管理员 登录名。 借助这些凭据,“服务器管理员”可以使用数据库所有者的身份向服务器或实例上的任何数据库进行身份验证。 之后,服务器管理员可以创建其他 SQL 登录名和用户,使用户能够使用用户名和密码进行连接。

授权和访问管理

授权是指控制对服务器和数据库的管理以及数据库中的数据、资源和命令的访问。 向 Azure SQL 数据库或 Azure SQL 托管实例中的数据库内的用户分配权限。 门户用户帐户的角色分配控制管理 Azure 中的数据库和服务器。 有关详细信息,请参阅 Azure 门户中 Azure 基于角色的访问控制

通过将用户帐户添加到 数据库角色 以及向这些角色分配数据库级权限来管理权限。 或者,向单个用户授予某些 对象级权限 。 有关详细信息,请参阅登录名和用户

此外,Azure SQL 托管实例还提供 服务器级角色 (固定或自定义)来管理实例的权限。 服务器级角色具有服务器范围的权限范围。 可以将服务器级主体添加到服务器级角色中。

最佳做法是根据需要创建自定义角色。 将用户添加到具有完成其作业功能所需的最低权限的角色中。 请勿直接将权限分配给用户。 服务器管理员帐户是内置db_owner角色的成员,该角色具有广泛的权限,只应授予少数具有管理职责的用户。 若要进一步限制用户可以执行的作范围,请使用 EXECUTE AS 指定所调用模块的执行上下文。 遵循这些最佳做法也是分离职责的基本步骤。

行级别安全性

Row-Level 安全性使你能够基于执行查询的用户的特征(例如组成员身份或执行上下文)来控制对数据库表中行的访问。 使用行级安全性来实现基于标签的自定义安全概念。 有关详细信息,请参阅行级别安全性

此图显示了 Row-Level 安全保护 SQL 数据库的各个行,防止用户通过客户端应用访问。

威胁防护

Azure SQL 数据库和 SQL 托管实例通过提供审核和威胁检测功能来保护客户数据。

Azure Monitor 日志和事件中心中的 SQL 审核

SQL 数据库和 SQL 托管实例审核可跟踪数据库活动,通过将数据库事件记录到客户所有的 Azure 存储帐户中的审核日志,帮助用户保持符合安全标准。 通过审核,可以监视正在进行的数据库活动,以及分析和调查历史活动,以确定潜在的威胁或可疑的滥用和安全违规行为。 有关详细信息,请参阅 SQL 数据库审核入门

高级威胁防护

高级威胁防护会分析日志,以检测异常行为和可能有害的访问或利用数据库尝试。 它会针对可疑活动(例如 SQL 注入、潜在的数据渗透和暴力攻击)或访问模式中的异常创建警报,以捕获特权升级和凭据泄露。 可以查看 来自 Microsoft Defender for Cloud 的警报,其中提供了可疑活动的详细信息,并提供进一步调查的建议以及缓解威胁的作。 可以根据需要为每个服务器启用高级威胁防护。 有关详细信息,请参阅 SQL 数据库高级威胁防护入门

图表显示 SQL 威胁检测监控外部攻击者和恶意内部人员对 Web 应用的 SQL 数据库的访问。

信息保护和加密

传输层安全性(传输中加密)

SQL 数据库、SQL 托管实例和 Azure Synapse Analytics 通过使用传输层安全性 (TLS) 加密动态数据来保护客户数据。 这些服务始终强制实施 TLS 加密连接,以确保在客户端和服务器之间的传输中加密所有数据。

具体而言,SQL 数据库、SQL 托管实例和 Azure Synapse Analytics 会将配置标志 ForceEncryption 设置为 Yes。 客户端和驱动程序必须支持加密连接才能连接到这些服务。 可连接的 TDS 协议的最低版本为 TDS 7.1。

最佳做法是,如果你有支持 TDS 8.0 的 SQL 驱动程序,请使用 严格连接加密

如果驱动程序不支持 TDS 8.0,请使用强制加密,并且不信任服务器证书。 例如,使用 ADO.NET 驱动程序时,请在连接字符串中使用 Encrypt=TrueTrustServerCertificate=False 来实现这一目标。 从 Azure 门户获取的连接字符串已使用这些值进行配置。

避免在生产环境中将参数 TrustServerCertificate 设置为 True 使用。 TrustServerCertificate=True 太宽松了,不能防范中间人攻击。 相反,如果客户端需要服务器证书中的其他域名,请使用 HostNameInCertificate 参数提供正确的域名进行验证。

例如,使用 ADO.NET 驱动程序通过自定义域名contoso-instance.123456.database.windows.net连接到托管实例contoso-instance.contoso.com时,请设置连接参数Encrypt=True并设置HostNameInCertificate=contoso-instance.123456.database.windows.net。 此配置允许驱动程序根据预期的 VNet 本地终结点域名验证服务器证书。

重要

某些非Microsoft驱动程序在默认情况下可能不会使用 TLS,或者可能依赖于较旧版本的 TLS(早于 1.2)才能正常运行。 在这种情况下,服务器仍允许连接到数据库。 但是,评估允许此类驱动程序和应用程序连接到 SQL 数据库的安全风险,尤其是在存储敏感数据时。

有关 TLS 和连接的详细信息,请参阅 TLS 注意事项

使用服务管理的密钥进行透明数据加密(静态加密)

SQL 数据库、SQL 托管实例和 Azure Synapse Analytics 的透明数据加密 (TDE) 进一步加强了安全性,帮助保护静态数据不受未经授权或脱机访问原始文件或备份的影响。 常见方案包括数据中心被盗或对硬件或媒体(如磁盘驱动器和备份磁带)的不安全处置。 TDE 使用 AES 加密算法加密整个数据库,这不需要应用程序开发人员对现有应用程序进行任何更改。

在 Azure 中,所有新创建的数据库都默认处于加密状态,且数据库加密密钥通过一个内置的服务器证书保护。 该服务管理证书维护和轮换,无需用户输入。 如果想要控制加密密钥,可以在 Azure Key Vault 中管理密钥。

使用客户管理的密钥进行透明数据加密(静态加密)

如果需要更好地控制加密密钥,透明数据加密(TDE)支持客户管理的密钥(CMK)。 此 CMK 与逻辑服务器关联,并包装该服务器内所有数据库的数据库加密密钥。 或者,可以在单个 数据库级别配置 CMK。 通过管理 CMK,可以控制密钥轮换、吊销和审核,这通常是合规性或严格的安全策略所必需的。

Always Encrypted 和具有安全隔离区的使用中的加密

显示 Always Encrypted 功能的基础知识的关系图。只有包含密钥的应用才能访问具有锁的 SQL 数据库。

Always Encrypted具有安全围笼的 Always Encrypted 是旨在保护存储在特定数据库列中的敏感数据免受访问(如信用卡号、国家/地区标识号或基于需要了解的数据)的功能。 此保护包括有权访问数据库以执行管理任务但无需业务访问加密列中的特定数据的数据库管理员或其他特权用户。 数据始终处于加密状态,这意味着加密数据只在有权访问加密密钥的客户端应用程序需要处理数据时才解密。 加密密钥从不暴露给 SQL 数据库或 SQL 托管实例,而且可以存储在 Windows 证书存储Azure Key Vault 中。

动态数据屏蔽

显示动态数据掩码的关系图。业务应用将数据发送到 SQL 数据库,该数据库在将数据发送回业务应用之前会屏蔽数据。

动态数据掩码功能通过对非特权用户屏蔽敏感数据来限制此类数据的泄漏。 动态数据掩码可自动发现 Azure SQL 数据库和 SQL 托管实例中潜在的敏感数据,提供可行的建议来掩码这些字段,对应用程序层造成的影响可忽略不计。 它的工作原理是在指定的数据库字段上进行查询时对结果集中的敏感数据进行模糊处理,而不会更改数据库中的数据。 有关详细信息,请参阅 SQL 数据库和 SQL 托管实例动态数据掩码入门

账本

Azure SQL 数据库和 SQL 托管实例中的账本功能提供对数据完整性的加密验证。 使用账本,您的数据具有防篡改能力。 你能够以加密方式向其他方(如审核员或其他业务参与方)证明你的数据未篡改。

账本使用防篡改技术记录不可变账本中的数据库更改,确保可以检测到任何未经授权的修改。 此功能特别适用于需要多方之间的法规符合性、可审核性和信任性的方案。 通过启用账本,可以验证数据的完整性,降低欺诈或数据作的风险。

安全管理

漏洞评估

漏洞评估是一项易于配置的服务,可以发现、跟踪和帮助修正潜在的数据库漏洞,旨在主动提高整体数据库安全性。 Microsoft Defender for SQL 产品/服务提供漏洞评估 (VA) 功能,该产品/服务是一个提供高级 SQL 安全功能的统一包。 可以通过中心Microsoft Defender for SQL 门户访问和管理漏洞评估。

数据发现和分类

数据发现和分类提供 Azure SQL 数据库和 SQL 托管实例中内置的基本功能,用于发现、分类和标记数据库中的敏感数据。 发现和分类最敏感的数据(业务、财务、医疗保健、个人数据等)在组织信息保护地位中发挥着关键作用。 它作为基础设施:

  • 各种安全方案,如监视(审核)并在敏感数据存在异常访问时发出警报。
  • 控制对包含高度敏感数据的数据库的访问并增强其安全性。
  • 帮助满足数据隐私标准和法规符合性要求。

有关详细信息,请参阅数据发现和分类入门

合规性

除了帮助应用程序满足各种安全要求的特性和功能外,Azure SQL 数据库还参与定期审核。 它已根据一些合规性标准进行认证。 有关详细信息,请参阅 Microsoft Azure 信任中心,你可在这里找到 SQL 数据库符合性认证的最新列表。