保护数据

已完成

现在已配置网络和标识访问并确保其安全,接下来让我们考虑如何保护数据,而无论数据是静止的、动态的还是正在被用户和管理员查看。

数据加密

加密连接由 Azure SQL 数据库强制执行,并可选择另外指定入站传输层安全性 (TLS) 所需的的最低版本(>1.0、>1.1 或 >1.2)。 建议在客户端上强制加密以避免服务器协商,而不是信任服务器证书为最佳做法。

透明数据加密

透明数据加密 (TDE) 为静态数据提供加密,并且默认情况下为 Azure SQL 数据库中的所有新数据库启用。 可以通过 Azure 门户中的开关为所有部署选项配置它,如下所示:

Screenshot of confirming TDE is on in the Azure portal.

在服务器级别,还可以选择使用服务托管密钥,或通过“客户管理的密钥”选项使用自带密钥 (BYOK)。 默认让 Azure 服务管理密钥。 Azure 可自动生成用于加密数据库的密钥,并管理密钥轮换。 你已经了解如何使用 Azure 门户执行此操作,但还可以使用 Azure PowerShell、Azure CLI、Transact-SQL (T-SQL) 或 REST API。

Screenshot of the TDE options server view.

具有 TDE 的客户管理的密钥

或者,可以使用 BYOK 并利用 Azure 密钥保管库。 使用客户管理的密钥的优点是:

  • 全面精细控制 TDE 保护器的使用和管理
  • TDE 保护器的使用透明性
  • 可以在组织中密钥和数据的管理方面实现职责分离
  • 密钥保管库管理员可以撤消密钥访问权限,以使加密的数据库不可访问
  • 集中管理 AKV 中的密钥
  • 获得最终客户的更高信任,因为 AKV 的设计可以避免 Microsoft 看到或提取加密密钥

还可以利用用户分配的托管标识 (UMI) 与客户管理的 TDE 密钥,从而:

  • 通过创建用户分配的托管标识并授予其对密钥保管库的访问权限,即使是在创建服务器或数据库之前,也可以预先授权密钥保管库访问 Azure SQL 逻辑服务器。
  • 允许创建启用了 TDE 和 CMK 的 Azure SQL 逻辑服务器。
  • 支持将相同的用户分配托管标识分配给多个服务器,从而无需为每个 Azure SQL 逻辑服务器单独启用系统分配的托管标识,并为其提供对密钥保管库的访问权限。
  • 提供在服务器创建时使用可用内置 Azure 策略强制实施 CMK 的功能。

已为使用 TDE 的客户管理的密钥引入了自动密钥轮换。 启用后,服务器会持续检查密钥保管库中是否存在要用作 TDE 保护程序的任何新版本密钥。 如果检测到新版本密钥,服务器上的 TDE 保护程序会在 60 分钟内自动轮换到最新的密钥版本。

Always Encrypted

你还可以利用 Azure SQL 支持的列级加密,就像在 SQL Server 中一样。 此过程涉及使用从未提供给数据库系统的密钥对敏感数据进行客户端加密。 此外,客户端驱动程序透明地加密查询参数并解密加密的结果。 加密数据目前支持相等比较,包括确定性加密支持的 JOINGROUP BYDISTINCT 运算符。

通过启用就地加密和更丰富的机密查询,具有安全 enclave 的 Always Encrypted 扩展了 Always Encrypted 的机密计算功能。 现可为 Azure SQL 数据库使用具有安全 enclave 的 Always Encrypted 功能,但该功能尚不支持 Azure SQL 托管实例。

动态数据屏蔽

有时,你需要屏蔽或修改某些数据,使非特权用户看不到这些数据,但他们仍然可以执行包含该数据的查询。 就像在 SQL Server 中一样,此功能也受支持。 但 Azure 门户中提供其他功能和视图,可用于查看要屏蔽的字段的建议。

Screenshot of Dynamic Data Masking recommendations in the Azure portal.

让我们来看一个示例,其中的数据包含姓名和电子邮件地址和等敏感信息。 可以通过在 SQL 数据库配置窗格中的“安全性”下选择“动态数据掩码”菜单,或使用以下 T-SQL 命令,将掩码应用到 Azure 门户中的以下列:

ALTER TABLE Data.Membership ALTER COLUMN FirstName
ADD MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)')

ALTER TABLE Data.Membership ALTER COLUMN Email
ADD MASKED WITH (FUNCTION = 'email()')

ALTER TABLE Data.Membership ALTER COLUMN DiscountCode 
ADD MASKED WITH (FUNCTION = 'random(1, 100)')
 
GRANT UNMASK to DataOfficers

从上述命令可以看出,可使用多种方法通过函数应用掩码。

例如,如果某些用户被分配了 DataOfficers 等角色(仅用作示例,并非正式角色),则他们可能需要能够查看屏蔽的数据。 可以使用以下 T-SQL 命令为其授予 UNMASK 权限:

GRANT UNMASK TO DataOfficers

根据执行查询的用户,结果如下所示:

Screenshot of an example of users with unmask access.

通过引入精细动态数据掩码权限,可以在数据库级别、架构级别、表级别或列级别授予或撤销数据库用户、Microsoft Entra 标识、Microsoft Entra 组或数据库角色的 UNMASK 权限。

数据保护任务

要设置和配置数据保护,你应该:

  • 确保应用程序强制连接加密,并使用与应用程序、客户端和驱动程序兼容的最高 TLS 版本。
  • 评估并启用 TDE。 这是新数据库的默认设置,但如果进行迁移,则可能需要启用它。
  • 利用动态数据掩码
  • 要进行高级保护,可以配置具有安全 enclave 的 Always Encrypted 功能。

知识检查

1.

你如何管理哪些用户有权查看屏蔽的数据?

2.

对使用 Always Encrypted 加密的数据进行相等比较时,Azure SQL 目前支持哪些运算符?