Você pode reproduzir o problema aqui:
CREATE TABLE [dbo].[EmployeeDataMasking](
[RowId] [int] IDENTITY(1,1) NOT NULL,
[EmployeeId] [int] NULL,
[LastName] [varchar](50) MASKED WITH (FUNCTION = 'partial(2, "XXXX", 2)') NOT NULL,
[FirstName] [varchar](50) MASKED WITH (FUNCTION = 'partial(2, "XXXX", 2)') NOT NULL,
CONSTRAINT [PK_EmployeeDataMasking] PRIMARY KEY CLUSTERED
(
[RowId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY],
) ON [PRIMARY]
GO
Insert Into dbo.EmployeeDataMasking (EmployeeId, LastName, FirstName)
VALUES( 1,'Smithsonian','Daniel'),( 2,'Templeton','Ronald')
Select
EmployeeId,
LastName,
FirstName,
LastName + ', ' + FirstName
From dbo.EmployeeDataMasking
Observe que os campos LastName e FirstName são parcialmente mascarados (como esperado). No entanto, o campo de nome combinado contém a máscara padrão. Não sei se isso é considerado um bug. No entanto, eu acho que o campo combinado manteria a máscara dos dois campos que ele compreende. Pelo menos é o que eu preferiria, pois não sei como fornecer uma máscara para o campo combinado.
A documentação é vergonhosamente silenciosa em relação a qual é o comportamento quando a coluna mascarada faz parte de uma expressão.
É assim que a coluna mascarada é representada no plano de execução:
aqui
(3)
denota o tipo de função de mascaramento e corresponde aopartial
mascaramento.E é assim que a
LastName + ', ' + FirstName
expressão é representada:Como você pode ver, o comportamento é "computar, depois mascarar". O tipo de função de mascaramento neste caso é
(1)
, que corresponde aodefault
mascaramento. Este é o resultado do ajuste da função de mascaramento e modificação intencional .Com a abordagem "computar, depois mascarar", essa (ajuste de máscara) é a medida necessária aparentemente, porque de outra forma expressões simples envolvendo
LEFT
,RIGHT
ouSUBSTRING
funções podem desmascarar dados facilmente. E determinar se a expressão é "segura" ou não seria muito complexo provavelmente.Só posso adivinhar por que a abordagem é "computar, depois mascarar" e não "mascarar, depois calcular", mas acho que o último, sendo implementado, sofreria seus próprios problemas. Alguns, que consigo pensar, incluem possibilidade de erros aritméticos para tipos numéricos (como divisão por zero, por exemplo, se algo for dividido em coluna mascarada), ou possibilidade de desvio lógico (se houver uma expressão condicional que dependa de coluna).