實戰三大資料保護新功能 SQL Server 2016更安全

本文將說明SQL Server 2016中三項與安全性有關的新功能:一律加密、資料列層級安全性及動態資料遮罩,讓企業即使將資料放在公有雲上也能擁有資料的所有權,並且可以管理資料存取權限,為資料建立遮罩避免外流。

微軟在新一代資料庫平台推出多項與保護企業資料安全相關的新功能,包含一律加密(Always Encrypted)、資料列層級安全性(Row-Level Security)和動態資料遮罩(Dynamic Data Masking)。

本文將介紹如何使用上述保護企業資料安全相關的新功能內建於SQL Server 2016(本文以社群技術預覽Community Technology Preview 3.3為例)資料庫引擎的新功能,達到幫助企業更輕鬆保護資料與安全控管的目的。

前置作業準備

本文使用微軟官方的範例資料庫與範例程式碼,若想要跟著一起做,可以到Microsoft Download Center下載AdventureWorks Sample Databases and Scripts for SQL Server 2016 CTP3(https://www.microsoft.com/en-us/download/details.aspx?id=49502),並將AdventureWorks2016CTP3資料 庫還原至SQL Server 2016執行個體,以及解壓縮範例程式碼,詳細步驟在此就不贅述。

什麼是一律加密(Always Encrypted)

過去要將存放於資料庫中的資料加密保存,不外乎是在應用程式端就先將資料經過編碼,以密碼的型態儲存到資料庫,或是利用資料庫引擎所提供的功能,在儲存至資料行時將之加密。

前者必須自行撰寫加密所使用的程式碼,以在資料儲存至資料庫前就先將資料加密,再撰寫解密所需的程式碼,於取出資料時解密成明文,新開發的系統這樣做沒問題,但是對於現有的應用程式而言,需要修改的程式可能會相當多,並且還得配合調整資料表結構,更遑論那些可能已經找不到原始程式碼的系統,此種作法便顯得窒礙難行。

後者則是使用資料庫引擎的資料行加密技術(例如對稱加密),在資料儲存或取出時就將資料加密,但遇到特權使用者或資料庫管理員擁有加密資料的權限,就無法保證資料不會被窺視,而且一不小心還可能影響資料庫的效能。

現在只要藉由SQL Server 2016的一律加密(Always Encrypted)這項新功能並安裝.NET Framework 4.6,資料在應用程式端傳送到SQL Server時,經由擴充ADO.NET函式庫將資料加密,只有應用程式擁有解開加密內容的金鑰,就不用擔心資料被系統管理員看到,即使是將資料存放在公有雲也比較不用擔心,至於查詢使用一律加密的資料行,應用程式也不需要自行解密,一樣交由擴充ADO.NET函式庫來處理(圖1)。


▲圖說。圖1 一律加密架構示意圖。(圖片來源:SQL Server 2016 Mission-Critical Performance Technical White Paper)

此外,一律加密要能運作,尚需要一律加密的金鑰(Always Encrypted Keys)才行,包含資料行主要金鑰(Column Master Keys)與資料行加密金鑰(Column Encrypted Keys),說明如下:

·資料行主要金鑰(Column Master Keys):資料行主要金鑰是用來保護資料行加密金鑰(Column Encrypted Keys),應儲存在受信任的金鑰存放區,例如Azure金鑰保存庫(Key Vault)服務。有關金鑰資訊可以透過sys.column_master_keys系統目錄檢視(System Catalog Views)來查看。

·資料行加密金鑰(Column Encrypted Keys):資料行加密金鑰用來加密存放在資料行中的機敏資料,建議將該金鑰備份至安全或受信任的金鑰存放區。有關金鑰資訊可以透過sys.column_encryption_keys、sys.column_encryption_key_values等系統目錄檢視來查看。

一律加密的金鑰(Always Encrypted Keys)除了可使用CREATE COLUMN MASTER KEY和CREATE COLUMN ENCRYPTION KEY等T-SQL陳述式來建立外(圖2)。


▲圖2 使用T-SQL建立資料行主要金鑰與資料行加密金鑰範例。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!