iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 11
1
Security

資料安全與簡單加密演算法見面會 系列 第 11

[Day11] 資料使用安全(SQL資料遮罩)

  • 分享至 

  • xImage
  •  

自從個資法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')

查詢未遮罩前的資料表:

http://ithelp.ithome.com.tw/upload/images/20161226/20103434sdJCIIwO7n.png

基本遮罩


先針對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

http://ithelp.ithome.com.tw/upload/images/20161226/20103434JdqMrqy2yK.png

整理以下三種資料型態的預設遮罩值。

  • Date/Datetime 1900-01-01( 之前看TechNet文章是2000-01-01:可能版本差異)
  • char x(up to 4)
  • numeric 0

特殊遮罩:


可以用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

http://ithelp.ithome.com.tw/upload/images/20161226/20103434xVL63kviPt.png

依據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

破解不了

http://ithelp.ithome.com.tw/upload/images/20161226/20103434SXX6gBIOkR.png

權限管理

如果想設置使用者u取消遮罩

GRANT UNMASK TO u
EXEC ('SELECT * FROM Customers') AS USER = 'u'

http://ithelp.ithome.com.tw/upload/images/20161226/20103434QCKyLN2ab8.png

恢復遮罩

REVOKE UNMASK TO u

http://ithelp.ithome.com.tw/upload/images/20161226/20103434fREToGMUe2.png

參考:


SQL Server 2016 新功能搶先看 - 動態資料遮罩 / 多重 tempdb 資料檔

開始使用 SQL Database 動態資料遮罩 (Azure 入口網站)

PCI DSS

個人資料保護法


維也納警車
http://ithelp.ithome.com.tw/upload/images/20161226/20103434VoUlDbqPZ4.jpg

2013.05攝於Vienna, Austria


上一篇
[Day10] 資料使用安全(限閱戶RLS)
下一篇
[Day12] 資料使用安全(SQL權限)
系列文
資料安全與簡單加密演算法見面會 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
gemch
iT邦新手 5 級 ‧ 2017-08-31 16:36:13

您好~~我用相同語法,SQL 2014會出現錯誤:接近關鍵字 'with' 的語法不正確。如果這個陳述式是通用資料表運算式、xmlnamespaces 子句或變更追蹤內容子句,則前一個陳述式必須以分號結束。

ALTER TABLE [factory]
ALTER COLUMN [NAME] ADD MASKED WITH (FUNCTION = 'partial(1,"○",1,"○",1,"○")') ;

Hi~動態資料遮罩是SQL 2016推出的新功能,所以2014還不認識她,所以產生了語法錯誤。

我要留言

立即登入留言