sql server 裡面的 dynamic Data Masking

來源:互聯網
上載者:User

標籤:

有時候啊,當我們存放在資料庫裡面的資料,需要明文存放,但是對於前台查詢出來的,又不太希望明文放出去的時候(比方說客戶的手機啊,郵箱啊)之類有點敏感的資訊,之前通常是儲存個明文,然後在前台展現的時候再特殊處理一下,然後就ok了。

而現在呢,在2016提供了data mask的功能,可以遮掩對應列的一些基礎資訊

事不宜遲,先做範例

 1 create table t2(ID int identity,Name nvarchar(50),PWD varchar(20),Phone varchar(50),Email varchar(200)) 2  3 go 4 insert into t2 (Name ,PWD ,Phone ,Email ) 5 select ‘張三‘,‘zhangsan‘,‘12433281924‘,‘[email protected]‘ 6 union all 7 select ‘李四‘,‘wojiaolisi‘,‘18734612309‘,‘[email protected]‘ 8 union all 9 select ‘王五‘,‘wangwu‘,‘15378198234‘,‘[email protected]‘10 union all11 select ‘sixgod‘,‘godsixzhao‘,‘00834123642‘,‘[email protected]‘12 13 select * from t214 15 ID          Name                                               PWD                  Phone                                              Email16 ----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------17 1           張三                                                 zhangsan             12433281924                                        zhangsan@qq.com18 2           李四                                                 wojiaolisi           18734612309                                        lisi@sohu.com19 3           王五                                                 wangwu               15378198234                                        wangwu@21cn.com20 4           sixgod                                             godsixzhao           00834123642                                        sixgod@qq.com
測試表搭建

 然後我們對這個表的某個列進行mask 的操作。比方說我們對密碼進行一個mask 可以使用以下語句

alter table t2 alter column PWD add masked with (function=‘default()‘)然後我建立來一個使用者Test1 然後只對他授予一個查詢的許可權。運行如下execute as login=‘Test1‘select * from t2ID          Name                                               PWD                  Phone                                              Email----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1           張三                                                 xxxx                 12433281924                                        zhangsan@qq.com2           李四                                                 xxxx                 18734612309                                        lisi@sohu.com3           王五                                                 xxxx                 15378198234                                        wangwu@21cn.com4           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 t2ID          Name                                               PWD                  Phone                                              Email----------- -------------------------------------------------- -------------------- -------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------7952        張三                                                 xxxx                 1243****1924                                       zXXX@XXXX.com7601        李四                                                 xxxx                 1873****2309                                       lXXX@XXXX.com5583        王五                                                 xxxx                 1537****8234                                       wXXX@XXXX.com3190        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 Userrevoke unmask from User

只要有unmask這個許可權,那麼就可以看到未經處理資料啦~~~
PS:可以查看那些列有mask 的哦

 

 

 

select object_name(object_id),name,masking_function    from sys.masked_columns(無列名)    name    masking_functiont2    ID    random(1000, 9999)t2    PWD    default()t2    Phone    partial(4, "****", 4)t2    Email    email()

 

sql server 裡面的 dynamic Data Masking

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.