实现动态数据掩码
实现动态数据掩码
动态数据掩码是一种重要的数据保护技术,通过在数据呈现层进行数据混淆,可以有效限制敏感数据的曝光程度。本文将详细介绍动态数据掩码的实现方法、配置选项以及应用场景,帮助数据库管理员和技术人员更好地保护敏感数据。
动态数据掩码的作用是混淆数据,以限制其曝光程度。不需要查看敏感数据的用户可以查看包含数据的列,但不能查看实际数据本身。请注意,动态数据掩码是在呈现层工作的,而未屏蔽的数据始终对高权限用户可见。
动态数据掩码的优点是,它不需要对应用程序或数据库进行许多修改。你可以通过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导入和导出时,导出的数据文件将包含屏蔽的数据,而导入的数据库将包含非活动的已屏蔽数据。
若要详细了解动态数据掩码的工作原理,请参阅动态数据掩码。