在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

相关文章
相关标签/搜索