对敏感数据执行合规性控制
在迁移数据库后实现合规性控制对于确保数据安全及符合相关法规非常重要。 迁移到新环境(例如 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 用户隐藏。 该用户可查看电话号码的最后四位数字,因为号码使用“partial”函数进行了屏蔽,列中除最后四位数以外的所有数字均被替换。 此屏蔽视为一项自定义功能。 除 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 导入和导出时,导出的数据文件将包含屏蔽的数据,而导入的数据库将包含非活动的已屏蔽数据。