zoukankan      html  css  js  c++  java
  • SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking

    Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式。Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分。比如一些像邮件或者工资这样敏感的数据,涉及PII的,我们可以运用这个功能。运用这个功能的步骤,首先先定义一组人(database role)可以拥有看数据的权限,然后GRANT UNMASK权限给这个角色组。微软提供了4种类型的masking给我们选择:default,email,random和custom string。default是字符类型替换为xxxx,数字替换为0,时间变成1990-01-01。email适用于email类型,除了第一个字符、@符号和.com其他的都替换成x。

    注意的地方:

    1) SELECT INTO、INSERT INTO和用数据库的IMPORT/EXPORT功能会把mask也带入到新生成的表或者目标表里面

    2)加了mask的数据在备份好的文件中也是被masked的

    3)加了MASK的字段并不能阻止被有更新权限的用户更新

    4)兼容模式必须是130(SQL SERVER 2016)

    CREATE TABLE dbo.DMMTest
    (
        strcol1 nvarchar(500) MASKED WITH (FUNCTION = 'default()') NULL,
        intcol1 int MASKED WITH (FUNCTION = 'default()') NULL,
        dttmcol1 datetime MASKED WITH (FUNCTION = 'default()') NULL,
        bincol1 varbinary(100) MASKED WITH (FUNCTION = 'default()') NULL,
        emailcol1 nvarchar(200) MASKED WITH (FUNCTION = 'email()') NULL,
        randomcol1 int MASKED WITH (FUNCTION = 'random(3,10)') NULL
    )
    
    insert dbo.DMMTest
    (
        strcol1,
        intcol1,
        dttmcol1,
        bincol1,
        emailcol1,
        randomcol1
    )
    values(
    'abcdefghijklmn',
    123456789,
    getdate(),
    0x123456789,
    'jerrychen@cjj.com',
    123456789
    )

     如果用一个没有被GRANT UNMASK的用户看到的数据是这样的

    查看哪些字段加了mask

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

    GROUP BY 其实发生在mask之前,也是用真实的数据

    结果如下

    参考:

    Dynamic Data Masking

  • 相关阅读:
    Elasticsearch 结构化搜索
    KMP 算法
    ElasticSearch 配置
    C++ 入门
    Spark 基础操作
    HBase 与 MapReduce 集成
    iOS面试相关
    iOS开发值得学习的Demo
    Mac系统安装MyEclipse
    linux安装tomcat
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/6159544.html
Copyright © 2011-2022 走看看