2018年10月17日 星期三

[SQL Server]SQL Server 2016支援的資料遮罩

以前在做資料遮罩時,幾乎都是要自己寫些程式才能實作出來,
現在SQL Server 2016就有提供遮罩的功能供大家使用,以下為用實例來為大家介紹用法:
首先先建立範例資料:
CREATE TABLE Cust(
  ID varchar(11) primary key,
        Name nvarchar(10),
  Birth date,
  Mail varchar(50),  
        Credit varchar(19))
GO

INSERT INTO Cust 
 VALUES ('A123456789', N'陳一', '19700101', 'aa@gmail.com', '1111-2222-3333-4444')
      , ('D234567890', N'蔡三', '19790202', 'bb@gmail.com', '5555-6666-7777-8888')
      , ('H987654321', N'老王', '19810303', 'cb@gmail.com', '9999-1111-2222-3333')
https://ithelp.ithome.com.tw/upload/images/20181012/20107408vphZuFEM0h.jpg
建立測試資料後,先針對生日欄位設定預設的遮罩功能
ALTER TABLE Cust ALTER COLUMN Birthday ADD MASKED WITH(FUNCTION='default()')
接著再建立使用者masktester,讓他有select的權限,再用他來查詢資料
CREATE USER masktester WITHOUT LOGIN
GRANT SELECT ON Cust TO masktester

EXEC AS USER = 'masktester'
SELECT * FROM Cust
查詢結果如下,原本的生日都變成1900-01-01了!
https://ithelp.ithome.com.tw/upload/images/20181012/201074084IIS50XEdd.jpg
以上是基本的遮罩應用。
現在我們來做些進階應用,例如Email信用卡卡號等重要資訊,
可用partial,email()等參數來進行客製化遮罩。
ALTER TABLE Cust ALTER COLUMN CreditCard ADD MASKED WITH (FUNCTION = 'partial(4,"-XXXX-XXXX-",4)')
ALTER TABLE Cust ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')

EXEC AS USER = 'masktester'
SELECT * FROM Cust
REVERT
遮罩效果如下:
https://ithelp.ithome.com.tw/upload/images/20181013/201074080MyklGXY06.jpg
SQL Server 2016提供的遮罩方式是By User來進行控管的,
因此在實際應用上要針對不同的User來設定是否需要開啓或關閉遮罩。
--關閉遮罩
GRANT UNMASK TO masktester
--恢復遮罩
REVOKE UNMASK TO masktester

沒有留言:

張貼留言

[SQL Server]主動通知SQL Server發生錯誤的機制

當SQL Server有特定錯誤發生時,管理人員也沒有時間經常去查看SQL Server錯誤檔, 於是有時特定錯誤可能很重要時,但卻沒有人被通知到,現在小弟實作一個主動通知的機制。 首先先新增警示,在這裡選擇想要被通知的錯誤訊息的等級或其它設定 接著在回應頁籤中,勾選執...