以前在做資料遮罩時,幾乎都是要自己寫些程式才能實作出來,
現在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')
建立測試資料後,先針對生日欄位設定預設的遮罩功能
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了!
以上是基本的遮罩應用。
現在我們來做些進階應用,例如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
遮罩效果如下:
SQL Server 2016提供的遮罩方式是By User來進行控管的,
因此在實際應用上要針對不同的User來設定是否需要開啓或關閉遮罩。
GRANT UNMASK TO masktester
REVOKE UNMASK TO masktester