在SQL Server 2008中執行透明數據加密

 問題html

  安全是任何公司的一個主要考量。數據庫備份容易被偷並被恢復到另外一個SQL Server實例上。當咱們瀏覽SQL Server 2008的新特性時,咱們對一個叫作透明數據加密的特性很感興趣,咱們能夠用它來加密咱們的數據庫備份。你能爲咱們詳細介紹下應該怎樣使用這個新功能嗎?算法

  專家解答數據庫

  透明數據加密是SQL Server 2008的一個新特性,它執行數據庫級別的加密,補充了目前在SQL Server 2005中使用的記錄級別加密。它直接或經過恢復一個數據庫備份到另外一個SQL Server實例上來保護數據庫訪問。瀏覽器

  在這篇文章裏,咱們將看看怎樣執行透明數據加密來保護數據庫備份。讓咱們首先介紹下怎樣的數據庫備份是免受威脅的。默認狀況下,SQL Server備份是不加密的。讓咱們先在個人default實例上建立Northwind數據庫的一個徹底備份。安全


    BACKUP DATABASE Northwind 
    TO DISK = 'C:\Northwind_unencrypted.bak' 
    WITH INIT, STATS = 10服務器

  讓咱們在Northwind數據庫中查詢一條指定記錄。咱們將在以後使用這條記錄來查看咱們的數據庫備分內容。加密


    SELECT * FROM dbo.Customers 
    WHERE ContactName = 'Aria Cruz'spa

 

                       

  在記事本中打開數據庫備份並搜索「A r i a C r u z」(注意字母間的空格和「Aria」與「"Cruz」間的三個空格,由於這個是Unicode文本)。能夠看到這個文本數據是可讀的。  3d

 

 

由於你的本地備份是可讀的,因此它們易於受到威脅,由於它們能夠以清晰的文本形式讀取到。這使得別人只要看看你的數據庫備份就能夠從這些文件得到數據。更糟的是,任何人均可以將你的數據庫備份恢復到另外一個SQL Server實例上。咱們將簡要地介紹這個過程。code

  如今咱們在咱們的Northwind數據庫上執行透明數據加密,首先在服務器上創建加密。爲了作到這一點,咱們在主數據庫上建立數據庫主鑰。


    USE master 
    GO 
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mY_P@$$w0rd'

  而後,咱們建立基於服務器的證書,它將用於加密這個數據庫。


    CREATE CERTIFICATE NorthwindCert 
    WITH SUBJECT = 'My DEK Certificate for Northwind database'

  而後咱們將爲Northwind數據庫設置解密,經過使用咱們剛剛建立的證書建立一個數據庫加密密鑰和密碼。


    USE Northwind 
    GO 
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER CERTIFICATE NorthwindCert 
    GO

  由於有一些不一樣的選擇,因此加密算法選擇是你本身的。在建立數據庫加密密鑰以後,咱們將激活數據庫級別的加密。


    ALTER DATABASE Northwind 
    SET ENCRYPTION ON

  讓咱們備份這個加密的Northwind數據庫,可是此次使用一個不一樣的文件名。


    BACKUP DATABASE Northwind 
    TO DISK = 'C:\Northwind_encrypted.bak' 
    WITH INIT, STATS = 10

  加密備份花費的時間將比未加密的備份稍長一些。若是你打開這個加密數據庫備份並搜索咱們以前搜索的字符串「A r i a C r u z」,你將搜索不到它。你能夠滾動這個文本並注意到這個加密的數據與你在未加密備份中看到的不同。


  在另外一個SQL Server實例上恢復加密數據庫備份

  很容易恢復一個未加密的備份到另外一個SQL Server實例上。事實上,這就是爲何它易受威脅的緣由。你能夠嘗試恢復加密的數據庫備份爲Northwind_encrypted,而你將遇到一個錯誤。我在個人TEST實例上進行了嘗試。這個錯誤信息告訴你服務器證書找不到。儘管這個恢復失敗了,可是你仍然能夠在對象瀏覽器中看到Northwind_encrypted數據庫處於正在恢復狀態。

 

 

爲了在另外一個SQL Server實例上恢復加密的數據庫備份,首先咱們須要導出咱們在這個建立了加密數據庫備份的實例上建立的證書。爲了將這個證書導出到一個文件中,我將鏈接到個人default實例並運行這個查詢。


    USE master 
    GO 
    BACKUP CERTIFICATE NorthwindCert 
    TO FILE = 'C:\NorthwindCert_File.cer' 
    WITH PRIVATE KEY (FILE = 'C:\NorthwindCert_Key.pvk' , 
    ENCRYPTION BY PASSWORD = 'mY_P@$$w0rd' ) 
    GO

  而後,咱們將須要複製這個證書和私鑰文件到另外一個SQL Server實例上。由於我在同一個服務器上運行個人default和個人TEST實例,因此我在作這個導入操做時將直接指向這些文件。如今,在TEST實例上,首先建立一個主鑰來導入這個證書。


    USE master 
    GO 
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'EnKrYpt3d_P@$$w0rd' 
    GO

  這裏提供的密碼與你在default實例中用到的密碼是不一樣的,由於你將爲這個實例建立一個新的主鑰。在建立了一個主鑰以後,你能夠經過導入咱們以前建立的證書來建立一個證書。


    CREATE CERTIFICATE NorthwindCert 
    FROM FILE = 'C:\NorthwindCert_File.cer' 
    WITH PRIVATE KEY (FILE = 'C:\NorthwindCert_Key.pvk', 
    DECRYPTION BY PASSWORD = 'mY_P@$$w0rd'); 
    GO

  注意,這裏在DECRYPTION BY PASSWORD參數中指定的密碼是和咱們在導出這個證書到一個文件中所使用的同樣。這是由於咱們將在這個新實例上使用同一個證書來訪問加密的數據庫。在證書建立以後,咱們能夠在這個實例上恢復加密數據庫備份。你可能想刪除最初你在操做以前試圖恢復的加密數據庫。你如今能夠成功地恢復加密數據庫備份了。

  

  http://database.ctocio.com.cn/dbzjdysummary/356/8321856.shtml

相關文章
相關標籤/搜索