【问题标题】:Dynamic Data Masking not applying for unprivileged users on Azure SQL DatabaseDynamic Data Masking 不适用于 Azure SQL 数据库上的非特权用户
【发布时间】:2018-04-17 12:28:05
【问题描述】:

我正在尝试在 Azure SQL Server 上配置 Dynamic Data Masking

但是,尽管我应用了掩码,非特权用户仍然可以访问未掩码的数据,即使他们不应该拥有权限。作为健全性检查,我在 SQL Express 本地数据库安装上尝试了相同的设置,但没有遇到任何问题。

我正在使用以下脚本:

SELECT @@VERSION AS 'Current database version';
GO

--Create a table Cars with masked tables for License plates and the names of the owner.
CREATE TABLE Cars (
    id int IDENTITY PRIMARY KEY,
    LicensePlate nvarchar(20) MASKED WITH(FUNCTION = 'partial(1, "****", 1)') NOT NULL,
    OwnerName nvarchar(40) MASKED WITH(FUNCTION = 'default()') NOT NULL
)
GO

-- Add some dummy queryable data
INSERT INTO Cars(LicensePlate, OwnerName) 
VALUES ('AAA111', 'Alice'), ('BBB222', 'Bob'),
       ('CCC333', 'Carol'), ('ABC123', 'David'),
       ('XYZ987', 'Emily')
GO

-- Look at all the data in plain form(as admin user)
SELECT * FROM Cars
GO

-- Create a regular user who has no privileges
CREATE USER regular_user WITHOUT LOGIN
GRANT SELECT ON Cars TO regular_user;

--Execute the same select query as the regular user and see nothing
EXECUTE AS USER = 'regular_user'
SELECT * FROM Cars
REVERT

Azure 数据库上的结果:

本地数据库结果:

根据 Microsoft 的说法,该功能应该具有普遍可用性,并且 Azure 门户似乎采用了配置。但非特权用户只能在 Azure 的情况下继续查询未屏蔽的数据。

【问题讨论】:

    标签: azure azure-sql-database


    【解决方案1】:

    有一项称为数据发现和分类的新功能(预览版)可能会导致这种现象,即 DDM 无法正确屏蔽非特权用户的内容。如果您已在同一数据库服务器上启用此功能,则可能会解释问题所在。
    顺便说一句,这很可能也解释了为什么在您的其他数据库上进行屏蔽可以按预期工作。 解决这个问题的方法正在进行中 - 只是完全部署的问题。 希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      请将数据库的兼容级别设置为140。

      ALTER DATABASE database_name   
      SET COMPATIBILITY_LEVEL =  140;
      

      在 Azure 上,您在兼容级别 12 上运行,类似于 SQL Server 2014。

      【讨论】:

      • 我已经执行了这个操作,但这似乎并没有改变任何东西,Azure SQL 仍然报告相同的版本并且屏蔽仍然不起作用。我想知道这是否相关:stackoverflow.com/questions/49157966/…
      • 让我试着得到一个答案,然后再回复你。
      • Good day Tich,(1) @@VERSION 与兼容级别不同。 @@VERSION 是您使用的实例版本(如果需要,可以使用服务器版本),而兼容性级别是数据库级别参数。为了获得数据库的兼容性级别,您可以执行查询“SELECT compatibility_level, name FROM sys.databases”。 (2) 即使您在 SQL Server 版本 2017 (@@VERSION = 14...) 上使用 COMPATIBILITY_LEVEL = 120,DDM 也应该可以工作!您也可以在本地数据库上对其进行测试...必须开始新评论以添加更多信息(我真的很讨厌 stackoverflow 界面)
      • 兼容性级别仅提供部分向后兼容性。您可以在 SQL Server 2017 中创建新数据库 -> 确认 compatibility_level = 140 -> 更改 COMPATIBILITY_LEVEL = 120 -> 确认 COMPATIBILITY_LEVEL = 120 -> 连接到新数据库并使用 DDM 执行脚本。它应该工作
      • 我已通过 Azure 支持打开支持票证上报了该问题。在尝试了现有数据库后,它在那里工作。这让我更加不解。试图从 Microsoft 支持人员那里得到明确的答复。
      【解决方案3】:

      Microsoft 支持人员已解决此问题。我已经联系了他们,他们帮助解决了这个问题,因为它比通过制作新服务器和新数据库配置的任何东西都更深。

      来自官方回复:

      原因是因为在服务器级别屏蔽功能被产品组设置为禁用,以缓解与启用“数据分类”和“屏蔽”相关的问题。此配置已在服务器级别更改,现在您将能够创建和屏蔽位于此服务器上的数据库。

      在数据屏蔽无法正常工作的一些小问题之后,我被要求运行以下查询:

      ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
      

      这会清除查询计划缓存并确保从缓存中清除未屏蔽的查询。

      如果任何其他用户遇到类似问题,我建议您通过 Microsoft 支持解决此问题。指出这个答案可能有助于加快速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-12
        • 2018-07-24
        • 1970-01-01
        • 1970-01-01
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 2015-04-09
        相关资源
        最近更新 更多