SQL Server 2019动态数据掩码default()函数运行异常问题咨询
操作问题说明
你操作中存在两处错误:
- 副本表创建逻辑错误:你执行的
SELECT INTO语句的源表写为了还未创建的[Person].[PersonMasked],如果是首次执行该语句,会直接报对象不存在错误,正确的源表应为原生的[AdventureWorks2014].[Person].[Person]。 - 加掩码语句错误修改字段长度,这是触发8152报错的直接原因:原
Person.Person表的FirstName字段定义为NVARCHAR(50),你在执行ALTER COLUMN添加掩码时手动指定了NVARCHAR(10),当表中存在长度超过10个字符的FirstName值时,就会触发字符串截断错误。
正确的添加掩码语句无需修改原有字段的类型和长度,写法如下:
ALTER TABLE [AdventureWorks2014].[Person].[PersonMasked] ALTER COLUMN FirstName ADD MASKED WITH (FUNCTION = 'default()');
SSMS查看掩码函数的方法
SQL Server动态数据掩码用到的default()等函数为系统内置功能,不属于用户定义函数,无法在SSMS的「可编程性-函数」目录中直接查看源码,你可以通过以下两种方式查看已配置的掩码规则:
- 可视化查看:在SSMS中右键点击
Person.PersonMasked表,选择「设计」,选中FirstName列后,在下方的「列属性」面板中找到「动态数据掩码」选项,即可看到当前绑定的掩码函数。 - 系统视图查询:执行以下语句即可查询指定表的所有掩码配置:
SELECT SCHEMA_NAME(t.schema_id) AS 架构名, t.name AS 表名, c.name AS 列名, c.masking_function AS 掩码函数 FROM sys.masked_columns c INNER JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = 'PersonMasked' AND SCHEMA_NAME(t.schema_id) = 'Person';
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

