当前位置:Gxlcms > 数据库问题 > sql server 里面的 dynamic Data Masking

sql server 里面的 dynamic Data Masking

时间:2021-07-01 10:21:17 帮助过:2人阅读

测试表搭建

 然后我们对这个表的某个列进行mask 的操作。比方说我们对密码进行一个mask 可以使用以下语句

alter table t2 alter column PWD add masked with (function=default())

然后我创建来一个用户Test1 然后只对他授予一个查询的权限。运行如下

execute as login=Test1

select * from t2

ID          Name                                               PWD                  Phone                                              Email
----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1           张三                                                 xxxx                 12433281924                                        zhangsan@qq.com
2           李四                                                 xxxx                 18734612309                                        lisi@sohu.com
3           王五                                                 xxxx                 15378198234                                        wangwu@21cn.com
4           sixgod                                             xxxx                 00834123642                                        sixgod@qq.com

默认的方法,是将整个列的替换成XXXX来显示。(仅仅在查询的时候会变成这样,数据并没有真正修改成 XXXX)。这是一种mask 的方法。

2016提供给了4种mask 的方式,上面已经演示来一种,还有3种分别是 email(),ramdom(),Custom masking 这3种,下面就演示一下

alter table t2 alter column Email add masked with (function=Email())
alter table t2 alter column ID add masked with (function=Random(1000,9999))
alter table t2 alter column Phone add masked with (function=partial(4,"****",4))

select * from t2

ID          Name                                               PWD                  Phone                                              Email
----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7952        张三                                                 xxxx                 1243****1924                                       zXXX@XXXX.com
7601        李四                                                 xxxx                 1873****2309                                       lXXX@XXXX.com
5583        王五                                                 xxxx                 1537****8234                                       wXXX@XXXX.com
3190        sixgod                                             xxxx                 0083****3642                                       sXXX@XXXX.com

2、Email() 这个函数只显示email 的第一位以及 @,其他全部使用X来Mask
3、Random(1000,9999) 显示的值从1000~9999 之间生成的随机整数进行mask

4、partial 相当于自定义mask 模式,格式 (前缀保留位数,mask串,后缀保留位数) 这个格式进行创建

 

那是不是加来mask之后就无法看到原始数据呢?并不是的,是需要使用权限进行控制

grant unmask to User
revoke unmask from User

只要有unmask这个权限,那么就可以看到原始数据啦~~~
PS:可以查看那些列有mask 的哦

 

 

 

select object_name(object_id),name,masking_function
    from sys.masked_columns

(无列名)    name    masking_function
t2    ID    random(1000, 9999)
t2    PWD    default()
t2    Phone    partial(4, "****", 4)
t2    Email    email()

 

sql server 里面的 dynamic Data Masking

标签:

人气教程排行