SQLServer動態掩碼的詳細介紹(代碼示例)

本篇文章給你們帶來的內容是關於SQLServer動態掩碼的詳細介紹(代碼示例),有必定的參考價值,有須要的朋友能夠參考一下,但願對你有所幫助。php

 

動態數據掩碼(DDM)是SQL Server 2016引入的一個新功能。目的就是限制沒有權限的人去看到一些隱私信息。管理員用戶可以決定哪些字段是須要被掩碼的,那麼如何在不改變應用程序代碼的基礎上掩碼?還要保證不管如何訪問數據,都是一致的。html

這是Azure SQL數據庫中首次引入的特性,它在雲上接受用戶的測試,並已遷移到本地產品。我想不少其餘的新特性也會遵循這條方式(雲--本地)。數據庫

須要注意的是與我以前的行級別數據安全同樣,這些都是數據安全相關內容(推薦課程:MySQL教程安全

列數據掩碼併發

首先建立一個在一些數據上帶有掩碼版的表。我將在表定義中開始的一個字段中添加一個掩碼。注意,這樣作的方式是在數據類型以後使用「mask with()」格式,可是在NULL和默認選項以前,要在圓括號內包含FUNCTION = ",它指定了咱們的函數。在引號內,咱們指定掩碼。CREATE TABLE語句以下dom

1函數

2測試

3spa

4code

5

6

7

8

9

10

11

CREATE TABLE MyTable

  ( MySSN VARCHAR (10) MASKED WITH (FUNCTION = 'default()') DEFAULT ('0000000000' )

 , MyName VARCHAR (200) DEFAULT ( ' ')

 , MyEmail VARCHAR (250) DEFAULT ( '')

 , MyInt int

)

GO

INSERT dbo. MyTable

 ( MySSN , MyName, MyEmail , MyInt)

VALUES

 ( '1234567890', 'Steve Jones', 'SomeSteve@SomeDomain.com', 10 )

若是建立者查詢這個表,就會看到一個普通的表。我獲得全部的數據,當它被插入時。這是由於我是一個有權限的用戶。同理那些具備dbo特權(db_owner或sysadmin角色)的用戶將不會看到屏蔽數據。如今建立一個正常的用戶沒有高權限的用戶。固然,我須要授予普通的SQL Server權限來查看錶中的數據。

1

2

CREATE USER mytest WITHOUT LOGIN

GRANT SELECT ON mytable TO mytest

如今咱們能夠用這個用戶查詢這個表,看一下有什麼不一樣。

咱們能夠看到第一列包含掩碼數據。只有x出如今數據的位置。這就實現了我想要的,即對非特權用戶隱藏數據。注意,磁盤上的數據沒有更改。數據只有在返回給非特權用戶時纔會被屏蔽。
我能夠在執行計劃的最後一部分看到這種狀況。我須要授予用戶查看計劃的權限,可是當我這樣作時,我看到的是用戶的計劃,使用的是上面相同的查詢。

我能夠在表上定義其餘類型的掩碼。有一個自定義的掩碼格式,容許控制顯示的內容,一個電子郵件地址的遮罩,和一個隨機的數字遮罩。咱們將在另外一篇文章中詳細討論這些問題。

如今能夠添加掩碼到另外一列上面,好比郵件MyEmail列,可使用郵件掩碼的格式,具體代碼以下:

1

2

3

ALTER TABLE dbo.MyTable

 ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()')

GO

而後查詢結果以下:

也能夠對多個和列進行掩碼

1

2

3

4

5

6

7

8

CREATE TABLE MySecondTable (

  MyEmail VARCHAR( 250) MASKED WITH (FUNCTION= 'email()')

, MySSN VARCHAR (10) MASKED WITH (FUNCTION ='default()')

, MyID INT MASKED WITH (FUNCTION ='random(1,4)')

)GOINSERT MySecondTable VALUES

   ( 'myname@mydomain.com', '1234567890', 100 )

 , ( 'abrother@mycorp.com' , '0123456789' , 555)

 , ( 'somesister@somecompany.org' , '9876543210' , 999)

查詢結果以下:

正如咱們所看到的,我從不一樣的行獲得不一樣的掩碼,每一個掩碼應用於特定行的數據。

容許用戶看到掩碼真實數據

SQL Server 2016中有一個新的DDM權限。這是UNMASK權限,它和其餘任何權限同樣被授予。讓咱們來看看這是如何工做的。我將建立一個具備與現有用戶相同權限的新用戶。而後我將查詢該表。

與以前類似的結果,而後咱們在給用受權打開掩碼。

如今咱們能夠看到數據的顯示方式與特權用戶的顯示方式相同。對於NewTester用戶,全部的數據都是「未屏蔽的」。
然而,這也有不利的一面。UNMASK權限在數據庫範圍內授予用戶。沒有按表或列劃分的粒度。若是用戶具備UNMASK,他們能夠查看存儲在數據庫中的表中具備SELECT權限的全部數據。咱們能夠經過使用Newtest查詢第一個表來看到這一點。

移除掩碼

代碼以下:

1

2

ALTER TABLE dbo.MySecondTable

  ALTER COLUMN MySSN DROP MASKED;

一旦我這樣作,用戶將直接看到真實數據。

MySSN列的數據是未屏蔽的,可是MyEmail和MyID的數據仍然是屏蔽的

總結

動態數據屏蔽是一個很好的新特性,旨在更容易地保護數據不受非特權用戶的影響。這能夠在數據庫中實現,而不須要更改任何應用程序代碼,從而容許您以最小的成本和工做量對應用程序用戶屏蔽敏感數據。我還要提醒您,這並非真正的安全特性。存儲在磁盤和表中的數據不會以任何方式更改。這仍然是純文本數據,若是用戶可以查詢系統,他們仍然能夠潛在地查詢您的數據並發現其值。

不管如何,這個特性對於尤爲是須要數據脫密使用的系統來講無疑是有幫助的。固然17之後功能也有了長足的進步後面有機會我會繼續介紹。

相關文章
相關標籤/搜索