2011/01/13

Database Encryption in SQL Server 2008

Microsoft SQL Server 2008 提供三種不同的加解密方式:

  • Cell-Level encryption
    微軟由SQL Server 2005開始提供Cell-Level Encryption的功能。讓使用者可以針對Cell-Level 或是 Column-Level 的資料進行加密及解密的動作。
  • Full Database-Level encryption
    SQL Server 2008 Enterprise Edition,則提供TDE (Transparent Database Encryption),可以針對Database-Level提供加密及解密的功能。
  • File-Level encryption
    則指的是利用Windows 本身的功能,例如:Encrytpting File System (EFS)或是BitLockerTM Driven Encryption,對Database的實體檔案(*.mdf, *.ldf)進行加密及解密的功能,以保持資料的安全性。
Why we use TDE ?

微軟在Microsoft SQL Server 20008 提供Transparent database encryption (DTE),為了解決部份在Cell-Level Encryption 所遇到的問題。

如果你使用Cell-Level Encryption 有下列幾個問題:

  • 欄位的資料型態必須改變,一般而言會換成 varbinary
  • 搜尋時,無法使用範圍查詢或是等號查詢。
  • 應用系統必須使用SQL Server所建立的物件來進行資料的維護 (因為必須在SQL Server 上進行加、解密的動作),例如使用Stored Procedure, 或是 View。
  • 甚至,你無法使用Index, PK, FK…等功能。

若你使用 DTE 進行整個資料庫的加密,則不會有上述的這些問題。所有的動作與未加密之前相同,也不需要再去變動應用程式的程式碼。

Hot to enable Transparent  Database Encryption (TDE)

要啟動TDE功能,首先你必須要擁有可以建立database master key 及在master 資料建立憑證的權限。同時,你也必須擁有要加密的某一資料庫的控制權。

依據下列的動作來建啟用 TDE,:
首先在master 資料庫:

  1. 建立 master key
       1: CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'KevinTsui'


  2. 建立 Certficate


    CREATE CERTIFICATE swKey WITH SUBJECT = 'Systemweb's PWP Certificate'


  3. 備份 Certificate


    BACKUP CERTIFICATE swKey TO FILE = 'path_to_file'
        WITH PRIVATE KEY (
            FILE = 'path_to_private_key_file'
            ENCRYPTOIN BY PASSWORD = 'cert password');

在要加密的資料庫中:



  1. 建立資料庫加密使用的Key – database encryption key (DEK)
    這把Key 必須使用server certificate 來產生 (非database certificate)


    CREATE DATABASE ENCRYPTION KEY
        WITH ALGORITHM = AES_256
        ENCRYPTION BY SERVER CERTIFICATE swKey

  2. 啟用TDE。(會在背景執行資料庫加密的動作)


    ALTER DATABASE myDatabase
        SET ENCRYPTION ON

  3. 檢視資料庫加密的狀況,以確定資料庫已經完成加密 (需要VIEW SERVER STATE權限)


    SELECT db_name(database_id), encryption_state 
    FROM sys.dm_database_encryption_keys






Summary

原本我以為TDE,可以解決我的需求。我的需求是不希望客戶動到我們公司建立的資料,甚至讀取資料內容。後來,發現TDE解決的是客戶端的問題,例如:資料庫本身的實體檔案或備份檔被盜取後,讓偷取者無法在另一台機器上無法正常的掛上去或是還原,以保證資料的安全性。


看來,想解決我的需求,還是得使用Cell-Level Encryption。

0 意見: