這篇文章帶給大家的內容是關於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出現在資料的位置。這就實現了我想要的,即對非特權用戶隱藏資料。注意,磁碟上的資料沒有更改。資料只有在傳回給非特權使用者時才會被封鎖。我可以在執行計劃的最後一部分看到這種情況。我需要授予用戶查看計劃的權限,但是當我這樣做時,我看到的是用戶的計劃,使用的是上面相同的查詢。
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)
正如我們所看到的,我從不同的行得到不同的掩碼,每個掩碼應用於特定行的資料。
允許使用者看到掩碼真實資料
ALTER TABLE dbo.MySecondTable ALTER COLUMN MySSN DROP MASKED;
動態資料屏蔽是一個很好的新特性,旨在更容易保護資料不受非特權使用者的影響。這可以在資料庫中實現,而不需要更改任何應用程式程式碼,從而允許您以最小的成本和工作量對應用程式使用者屏蔽敏感資料。我還要提醒您,這並不是真正的安全特性。儲存在磁碟和表中的資料不會以任何方式變更。這仍然是純文字數據,如果用戶能夠查詢系統,他們仍然可以潛在地查詢您的數據並發現其值。
無論如何,這個特性對於尤其是需要資料脫密使用的系統來說無疑是有幫助的。當然17以後功能也有了長足的進步後面有機會我會繼續介紹。
以上是SQLServer動態遮罩的詳細介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!