自從個資法2012年施行細則上路後,對於客戶資料的蒐集、處理及利用有著更多的保護規範,會處理到大量客戶(自然人)的資訊系統除了基本的網頁及功能權限外,也需要按照實際業務需要限制使用者可以查詢到的客戶資訊,其中有一種方式就是應用遮罩(Data Mask
),避免過多非必要的資訊存取。
曾看過幾家廠商的動態資料遮罩(DDM Dynamic Data Mask)
解決方案,有的透過AP伺服器與DB伺服器架設軟體或硬體的proxy來攔截封包進行遮罩;有的則是資訊系統處理資料底層或畫面呈現時進行遮罩(Data Mask
);來複習SQL Server 2016動態資料遮罩的新功能。
PCI DSS要求7
Requirement 7: Restrict access to cardholder data by business need to know
內容部分取自史丹利個人部落格 史丹利好熱
先建立測試資料庫、資料表及3筆2016總統候選人的測試資料。
CREATE DATABASE dbDynamicDataMask
GO
USE dbDynamicDataMask
GO
CREATE TABLE Customers(
ID varchar(11) primary key,
Name nvarchar(10),
Birthday date,
Marriage char(1),
Email varchar(50),
Tel varchar(20),
Salary numeric(13,2),
CreditCard varchar(19))
GO
INSERT INTO Customers
VALUES ('A123456789', N'朱立倫', '19610607', 0, 'a01@company.com', '02-77203699', 3000000, '3567-5678-9012-3456')
, ('B123456789', N'蔡英文', '19560831', 1, 'b02@company.com', '03-77203699', 2000000, '4567-1234-5678-9012')
, ('C123456789', N'宋楚瑜', '19420316', 1, 'c03@company.com', '04-77203699', 1000000, '5567-7890-1234-5678')
查詢未遮罩前的資料表:
先針對4個欄位(生日Date、婚姻char、電話char及薪水numeric)測試一下預設遮罩。
ALTER TABLE Customers ALTER COLUMN Birthday ADD MASKED WITH(FUNCTION='default()')
ALTER TABLE Customers ALTER COLUMN Marriage ADD MASKED WITH(FUNCTION='default()')
ALTER TABLE Customers ALTER COLUMN Tel ADD MASKED WITH(FUNCTION='default()')
ALTER TABLE Customers ALTER COLUMN Salary ADD MASKED WITH(FUNCTION='default()')
建立一個帳號來測試Select,測試完畢後回到原本登入帳號:
CREATE USER u WITHOUT LOGIN
GRANT SELECT ON Customers TO u
EXEC AS USER = 'u'
SELECT * FROM Customers
REVERT
整理以下三種資料型態的預設遮罩值。
可以用email()
或是Partial
來將姓名、信用卡或簽帳卡號遮罩,遮罩字元也可以依需要換成星號*或是圈○。
ALTER TABLE Customers ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
ALTER TABLE Customers ALTER COLUMN Name ADD MASKED WITH (FUNCTION = 'partial(1,"X",1)')
ALTER TABLE Customers ALTER COLUMN CreditCard ADD MASKED WITH (FUNCTION = 'partial(4,"-xxxx-xxxx-",4)')
EXEC AS USER = 'u'
SELECT * FROM Customers
REVERT
依據PA DSS Requirement 2: Protect stored cardholder data
2.2 Mask PAN when displayed (the first six and last four digits are the maximum number of digits to be displayed), such that only personnel with a legitimate business need can see the full PAN.
測試看看各種轉換函數能不能破解
EXEC AS USER = 'u'
SELECT
SUBSTRING(NAME,1,3) as NAME,
CONVERT(DATE,Birthday,112) as Birthday,
CAST(Salary AS numeric(10)) as Salary,
LEFT(CreditCard,16) as CreditCard
FROM Customers
REVERT
破解不了
權限管理
如果想設置使用者u取消遮罩
GRANT UNMASK TO u
EXEC ('SELECT * FROM Customers') AS USER = 'u'
恢復遮罩
REVOKE UNMASK TO u
SQL Server 2016 新功能搶先看 - 動態資料遮罩 / 多重 tempdb 資料檔
開始使用 SQL Database 動態資料遮罩 (Azure 入口網站)
維也納警車
2013.05攝於Vienna, Austria
您好~~我用相同語法,SQL 2014會出現錯誤:接近關鍵字 'with' 的語法不正確。如果這個陳述式是通用資料表運算式、xmlnamespaces 子句或變更追蹤內容子句,則前一個陳述式必須以分號結束。
ALTER TABLE [factory]
ALTER COLUMN [NAME] ADD MASKED WITH (FUNCTION = 'partial(1,"○",1,"○",1,"○")') ;
Hi~動態資料遮罩是SQL 2016推出的新功能,所以2014還不認識她,所以產生了語法錯誤。