实现敏感数据的符合性控制
迁移数据库后实现符合性控制非常重要,以确保数据保持安全且符合相关法规。 迁移到 Azure SQL 等新环境引入了新的安全功能和功能。
探索服务器和数据库审核
Azure SQL 审核跟踪数据库事件,将其记录在存储在 Azure 存储帐户、Log Analytics 工作区或事件中心的审核日志中。 此外,它还有助于维护法规合规性、对活动模式的分析,以及检测可能表示安全违规的偏差。
可以定义服务器级别和数据库级别的策略。 服务器策略自动涵盖了 Azure 中的新数据库和现有数据库。
- 启用服务器审核会触发数据库的审核,而不考虑其单独的审核设置。
- 可以在数据库级别启用审核,从而允许服务器和数据库策略同时共存。
- 对只读副本的审核会自动启用。
最好不要同时启用服务器审核和数据库审核,但以下情况除外。
需要特定数据库的存储帐户、保留期或 Log Analytics 工作区。
特定数据库需要审核,该数据库具有不同于服务器上的其他事件类型或类别的唯一事件类型或类别。
在所有其他情况下,建议仅启用服务器级审核,并对所有数据库禁用数据库级审核。
SQL 数据库的默认审核策略包括以下操作组:
操作组 | 定义 |
---|---|
BATCH_COMPLETED_GROUP | 对数据库执行的所有查询和存储过程进行审核。 |
SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP | 这表示主体已成功登录到数据库。 |
FAILED_DATABASE_AUTHENTICATION_GROUP | 这表示主体未能登录到数据库。 |
若要为 Azure SQL 服务器上的所有数据库启用审核,请在服务器主边栏选项卡的“安全”部分中选择“审核”。
在“审核”页上,可以设置审核日志目标,还可以选择是在与 Azure SQL 审核相同的日志目标上跟踪 Microsoft 支持部门工程师操作,还是选择其他日志目标。
通过运行以下查询,可以在 Log Analytics 工作区中查看 Microsoft 支持部门操作的审核日志:
AzureDiagnostics
| where Category == "DevOpsOperationsAudit"
重要
Azure SQL 数据库和 Azure SQL 托管实例的审核服务经过微调,以实现最佳性能。 但是,值得注意的是,在活动异常高或网络拥塞严重的情况下,某些审核的事件可能不会记录。
审核敏感标签
与数据分类结合使用时,还可以监视对敏感数据的访问。 Azure SQL 审核已得到增强,可在名为 data_sensitivity_information
审核日志中包括新字段。
通过记录查询返回的数据的敏感度标签,此字段提供了一种更轻松的方法来跟踪对分类列的访问。
审核包括跟踪和记录数据库引擎中发生的事件。 Azure SQL 审核简化了启用它所需的配置步骤,使得跟踪 SQL 数据库和 SQL 托管实例的数据库活动变得更加轻松。
动态数据掩码
动态数据掩码 通过模糊处理数据来限制其暴露。 它允许不需要访问敏感信息的用户查看列,但不允许实际数据。 动态数据掩码在呈现层工作,未屏蔽的数据仍对高特权用户可见。
动态数据掩码提供要求对应用程序或数据库进行最少修改的优势。 可以通过 Azure 门户或使用 T-SQL 方便地对其进行配置。
PhoneNumber 和 EmailAddress 列都隐藏在仅对表具有 SELECT
权限的 DDMDemo 用户中。 允许用户看到电话号码的最后四位数字,因为它使用 分部函数屏蔽, 替换列中最后四位数字。 此掩码被视为自定义函数。 除了 T-SQL 之外,如果使用 Azure SQL 数据库,还可以在 Azure 门户中创建动态掩码规则。
若要添加掩码规则,请在 Azure 门户中导航到数据库,然后在数据库主边栏选项卡的“安全”部分选择 动态数据掩码。
动态数据掩码支持以下可使用的屏蔽模式:
掩码函数 | 定义 | T-SQL 示例 |
---|---|---|
默认 | 对列中的数据进行屏蔽,而不向用户公开值的任何部分。 用户将看到字符串值显示为 XXXX,数值显示为 0,日期值显示为 01.01.1900。 | ALTER TABLE [Customer] ALTER COLUMN Address ADD MASKED WITH (FUNCTION = 'default()') |
信用卡 | 对除最后四个字符之外的所有字符进行屏蔽,允许用户查看最后四位数字。 此掩码对于需要查看信用卡号的最后四位数字但不需要查看整个号码的客户服务代理非常有用。 数据显示为信用卡号的一般格式 XXXX-XXXX-XXXX-1234。 | ALTER TABLE [Customer] ALTER COLUMN Address ADD MASKED WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)') |
电子邮件 | 仅屏蔽第一个字母和尾随域后缀;例如,“aXXX@XXXXXXX.com” | ALTER TABLE [Customer] ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()') |
数字 | 此屏蔽格式应用于数值列。 它将随机数字显示为屏蔽后的值而不是实际值。 对于每个查询,将显示不同的数字。 | ALTER TABLE [Customer] ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)') |
自定义字符串 | 此选项允许使用任意值屏蔽文本,并在屏蔽后的值之前或之后显示自定义数量的字符。 如果要屏蔽的值的长度等于或小于要显示的字符数,则仅显示掩码指定的字符数。 | ALTER TABLE [Customer] ALTER COLUMN [PhoneNumber] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') |
若要使用户能够从定义掩码的列检索未屏蔽的数据,需要显式授予 UNMASK
权限。
注释
可以根据结果使用推理来识别已屏蔽数据。 如果使用数据掩码,还应限制用户运行即席查询的功能。
因此,我们建议将动态数据掩码与其他安全功能(如审核、加密和行级别安全性)相结合,以增强敏感数据的保护。
用例
数据掩码是一项简单而轻量的功能,非常适合许多方案,包括:
对不能直接访问数据库的应用程序用户屏蔽数据。
限制用户组的私有信息。
向外部供应商提供屏蔽的数据,你需要保护敏感信息,同时仍保留数据中各项之间的关系。
使用缺少
UNMASK
权限的用户,将生产数据库的副本导出到较低环境进行开发。 导出的数据采用屏蔽格式。
导入和导出数据
使用 SELECT INTO
或 INSERT INTO
将数据从屏蔽的列复制到另一个表中会导致目标表中显示屏蔽的数据。
当没有 UNMASK
权限的用户运行 SQL Server 导入和导出时,导出的数据文件包含掩码数据,导入的数据库将包含非活动掩码的数据。