您在此表上启用了动态数据屏蔽,但用户未被授予UNMASK权限。
您在输出中看到的是屏蔽后的数据,而不是真实值。
复现步骤:
CREATE TABLE dbo.Test
(
c integer
MASKED WITH (FUNCTION = 'default()')
NOT NULL
);
INSERT dbo.Test
(c)
VALUES
(123);
CREATE USER Bob WITHOUT LOGIN;
GRANT SELECT ON dbo.Test TO Bob;
EXECUTE AS USER = 'Bob';
SELECT
T.c,
c_vc = CONVERT(varchar(11), T.c)
FROM dbo.Test AS T
WHERE
T.c <> 0;
REVERT;
如果我们授予UNMASK权限,真实数据将变得可见:
GRANT UNMASK ON dbo.Test TO Bob;
EXECUTE AS USER = 'Bob';
SELECT
T.c,
c_vc = CONVERT(varchar(11), T.c)
FROM dbo.Test AS T
WHERE
T.c <> 0;
REVERT;
整理一下:
DROP USER Bob;
DROP TABLE dbo.Test;