zoukankan      html  css  js  c++  java
  • 动态数据掩码

    动态数据掩码(Dynamic Data Masking,简称为DDM)能够防止把敏感数据暴露给未经授权的用户。DDM作用于数据表的字段上,在查询结果中隐藏敏感数据。启用DDM不会修改表中的数据,只是把查询结果对未经授权的用户屏蔽,使未授权用户看到的查询结果是被掩码的,例如,第二列是号码列,前7个数字被掩码,只暴露后三位数字:

    动态数据屏蔽在 SQL Server 2016 (13.x) 和 Azure SQL Database中开始提供,使用 Transact-SQL 命令进行配置。

    一,定义动态数据掩码规则

    对于数据表的列定义屏蔽规则,有4种掩码函数:

    • Default:对于字符串类型,使用XXXX来做掩码;对于数值类型,使用0值来做掩码;对于date和time类型,使用01.01.1900 00:00:00.0000000来做掩码;对于binary类型,使用0来做掩码。
    • Email:作用于字符串类型,首字符、@和 .com 不做掩码,其他字符替换为XXXX来做掩码。
    • Random:作用于数值类型,使用随机值来替换原始数字作为掩码
    • Custom String:作用于字符串类型,把中间的字符替换为掩码,两端的字符显示出来。对于prefix和 suffix中间的字符,使用padding来扩展,如果原始字符太短,不能掩码,那么prefix和suffix中间的字符不会暴露。

    屏蔽函数的语法规则:

    MASKED WITH (FUNCTION = 'default()')
    MASKED WITH (FUNCTION = 'email()')
    MASKED WITH (FUNCTION = 'random(start, end)')
    MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)')

    启用DDM,有两种方式:

    方式1:在创建表时定义屏蔽规则

    Email varchar(100) MASKED WITH (FUNCTION = 'email()')

    方式2:向现有表添加屏蔽规则,通过ALTER TABLE命令修改列的定义:

    ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')

    二,权限控制

    一个用户只有被授予在该列上的UNMASK 权限,才可以查看该列的原始数据,否则,返回的是掩码之后的数据。

    1,创建和修改mask的权限

    在使用动态数据屏蔽来创建表时,不需任何特殊权限,只需要具有CREATE TABLE 权限以及对架构的 ALTER 权限。

    当需要添加、替换或删除对列的屏蔽时,需要 ALTER ANY MASK 权限以及对表的 ALTER 权限,可以将 ALTER ANY MASK 权限授予安全负责人。

    具有表的 SELECT 权限的用户可以查看表数据,列在被定义为“已屏蔽”后,将显示屏蔽后的数据。对于需要从定义了屏蔽的列中检索数据的用户,可授予其 UNMASK 权限,使其可以看到原始数据。

    针对数据库的 CONTROL 权限包括 ALTER ANY MASK 和 UNMASK 权限。

    2,更新mask列的权限

    在一列上创建mask不会阻止该列上的数据更新,如果用户有write权限,那么该用户即使没有该列上的UNMASK的权限,也可以修改该列的数据。为了避免该情况的发生,应该通过其他权限来控制用户对屏蔽列的修改。

    3,屏蔽复制

    使用 SELECT INTO 或 INSERT INTO ,把数据从一个屏蔽列复制到另一个表中,这会使得屏蔽数据复制到新表中。

    在执行SQL Server Import 和 Export时,也会把屏蔽复制到新的表中。

    4,授权查看屏蔽数据

    把UNMASK  的权限授权给用户,那么该用户就可以查看屏蔽列的原始值:

    GRANT UNMASK TO TestUser;  
    EXECUTE AS USER = 'TestUser';  
    SELECT * FROM Membership;  
    REVERT;   
      
    -- Removing the UNMASK permission  
    REVOKE UNMASK TO TestUser; 

    三,屏蔽列操作

    用户可以对屏蔽列进行查询、增加、修改和删除操作。

    1,查询屏蔽列

    查看数据库中已经创建的屏蔽列:

    SELECT tbl.name AS table_name
        ,c.name AS column_name
        ,c.is_masked
        ,c.masking_function  
    FROM sys.masked_columns AS c  
    INNER JOIN sys.tables AS tbl   
        ON c.[object_id] = tbl.[object_id]  
    WHERE is_masked = 1

    2,增加屏蔽列

    对现有表增加屏蔽列

    ALTER TABLE Membership  
    ALTER COLUMN LastName ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)'); 

    3,修改屏蔽列

    对现有的屏蔽列进行修改

    ALTER TABLE Membership  
    ALTER COLUMN LastName varchar(100) MASKED WITH (FUNCTION = 'default()');  

    4,删除屏蔽列

    把列上的屏蔽删除,删除掩码规则,不会删除该列的值:

    ALTER TABLE Membership   
    ALTER COLUMN LastName DROP MASKED; 

    参考文档:

    Dynamic Data Masking

  • 相关阅读:
    mysql 权限问题
    触发器作用
    带有循环功能的存储过程
    带有条件判断的存储过程
    数据存储 三大范式-----------待续
    存储过程自 带条件判断的存储过程
    线程异步更新UI
    TextBox只能输入数字
    C#中无边框窗体移动或拖控件移动窗体
    classloader原理
  • 原文地址:https://www.cnblogs.com/ljhdo/p/11760799.html
Copyright © 2011-2022 走看看