标签: dynamic-data-masking

带有“FOR JSON PATH”子句的 SQL Server 数据屏蔽错误

我正在使用 SQL Server Standard(64 位)14.0.1000.169 在 QA 服务器上使用屏蔽数据库。这是我的结构:

    CREATE TABLE [dbo].[Test](
         [Column1] [VARCHAR(64)] NULL,
         [Column2] [VARCHAR(64)] NULL
    )
    GO
    INSERT INTO [dbo].[Test]
    VALUES ('ABCDEFG', 'HIJKLMN')
Run Code Online (Sandbox Code Playgroud)

我用以下代码屏蔽了该列:

    ALTER TABLE [dbo].[Test]
    ALTER COLUMN [Column1] VARCHAR(64) MASKED WITH (FUNCTION = 'default()');
Run Code Online (Sandbox Code Playgroud)

当我使用非允许的用户执行以下查询时,它按预期工作:

    SELECT [Column1], [Column2]
    FROM [dbo].[Test]
    FOR JSON PATH
    -- RESULT: '[{"Column1":"xxxx", "Column2":"HIJKLMN"}]'
Run Code Online (Sandbox Code Playgroud)

但当同一个非允许用户将结果保存在变量中时(主要目标),它不起作用:

    DECLARE @var VARCHAR(64)
    SET @var = (SELECT [Column1], [Column2] FROM [dbo].[Test] FOR JSON PATH)
    SELECT @var --it should show a valid JSON...
    -- RESULT: 'xxxx' <-- JSON LOSES …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server for-xml-path for-json dynamic-data-masking

1
推荐指数
1
解决办法
368
查看次数