首頁  >  文章  >  資料庫  >  SQLServer動態遮罩的詳細介紹(程式碼範例)

SQLServer動態遮罩的詳細介紹(程式碼範例)

不言
不言轉載
2019-02-01 10:30:202711瀏覽

這篇文章帶給大家的內容是關於SQLServer動態遮罩的詳細介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

動態資料遮罩(DDM)是SQL Server 2016引進的新功能。目的就是限制沒有權限的人去看到一些隱私資訊。管理員使用者能夠決定哪些欄位是需要被遮罩的,那麼如何在不改變應用程式程式碼的基礎上遮罩?也要保證無論如何存取數據,都是一致的。

這是Azure SQL資料庫中首次引入的特性,它在雲端上接受使用者的測試,並已遷移到本地產品。我想很多其他的新特性也會遵循這條方式(雲--本地)。

要注意的是與我之前的行級資料安全一樣,這些都是資料安全相關內容(推薦課程:MySQL教學


##資料遮罩

首先建立一個在一些資料上有遮罩版的表。我將在表定義中開始的一個字段中添加一個掩碼。注意,這樣做的方式是在資料類型之後使用“mask with()”格式,但是在NULL和預設選項之前,要在圓括號內包含FUNCTION = ",它指定了我們的函數。在引號內,我們指定掩碼。CREATE TABLE語句如下

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權限來查看表中的資料。

CREATE USER mytest WITHOUT LOGIN
GRANT SELECT ON mytable TO mytest

現在我們可以用這個使用者查詢這個表,看看有什麼不同。

##我們可以看到第一列包含掩碼資料。只有x出現在資料的位置。這就實現了我想要的,即對非特權用戶隱藏資料。注意,磁碟上的資料沒有更改。資料只有在傳回給非特權使用者時才會被封鎖。

我可以在執行計劃的最後一部分看到這種情況。我需要授予用戶查看計劃的權限,但是當我這樣做時,我看到的是用戶的計劃,使用的是上面相同的查詢。

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

現在可以添加掩碼到另一列上面,例如郵件MyEmail列,可以使用郵件掩碼的格式,具體程式碼如下:

ALTER TABLE dbo.MyTable
 ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()')
GO
然後查詢結果如下:

#也可以對多個和列進行掩碼

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查詢第一個表格來看到這一點。 ###############移除遮罩#######程式碼如下:###
ALTER TABLE dbo.MySecondTable
  ALTER COLUMN MySSN DROP MASKED;
###一旦我這樣做,使用者將直接看到真實資料。 ###############MySSN欄位的資料是未屏蔽的,但MyEmail和MyID的資料還是屏蔽的###

總結

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

無論如何,這個特性對於尤其是需要資料脫密使用的系統來說無疑是有幫助的。當然17以後功能也有了長足的進步後面有機會我會繼續介紹。

以上是SQLServer動態遮罩的詳細介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除