实现动态数据掩码
动态数据掩码 通过模糊处理数据来限制其暴露。 不需要查看敏感数据的用户可以查看包含数据的列,但不能查看实际数据本身。 动态数据掩码在呈现层工作,且未屏蔽的数据始终由高特权用户可见。
动态数据掩码的优点是,它不需要对应用程序或数据库进行许多修改。 可以通过 Azure 门户或使用 T-SQL 进行配置,如下所示。
在此示例中,对于仅具有SELECT表权限的DDMDemo用户,PhoneNumber和EmailAddress列都是隐藏的。 该用户可查看电话号码的最后四位数字,因为号码使用“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 导入和导出时,导出的数据文件包含掩码数据,导入的数据库将包含非活动掩码的数据。
若要详细了解动态数据掩码的工作原理,请参阅动态数据掩码。