原文出处:http://blog.csdn.net/kk185800961/article/details/53166616  (博主还有很多关于SQL的原创文章)

从 SQL Server 2014 开始,SQL Server 可在创建备份时加密数据。通过在创建备份时指定加密算法和加密程序(证书或非对称密钥),可创建加密的备份文件。


若要在备份期间加密,必须指定加密算法以及用于保护加密密钥的加密程序。支持以下加密选项:

加密算法:支持的加密算法包括:AES 128、AES 192、AES 256 和 Triple DES
加密程序:证书或非对称密钥


优点:

1. 加密数据库备份有助于保证数据安全:SQL Server 提供用于在创建备份时加密备份数据的选项。

2. 加密还可用于使用 TDE 加密的数据库。

3. 由 Microsoft Azure 的 SQL Server 托管备份 进行的备份支持加密,这样可提高站点外备份的安全性。

4. 此功能支持多个最高 AES 256 位的加密算法。这样可选择符合要求的算法。

5. 可将加密密钥与扩展密钥管理 (EKM) 提供程序集成。(仅支持位于扩展密钥管理 (EKM) 中的非对称密钥。)


限制:

1. 如果使用非对称密钥加密备份数据,则仅支持位于 EKM 提供程序中的非对称密钥。

2. SQL Server Express 和 SQL Server Web 不支持在备份期间进行加密。但是,支持从加密的备份还原到 SQL Server Express 或 SQL Server Web 的实例。

3. 旧版 SQL Server 无法读取加密的备份。

4. 加密的备份不支持追加到现有的备份集选项。

当前测试,证书加密备份,从另一个实例中还原。

use master  
go  
  
--创建主密钥  
create master key encryption by password = N'Hello@MyMasterKey'  
go  
  
--创建证书  
create certificate Mycertificate    
with subject = N'EnryptData certificate',    
start_date = N'20160101',    
expiry_date = N'20990101';    
go    
  
--证书加密备份数据库  
backup database [DemoDB]    
to disk = N'E:\TEST\DemoDB.bak'    
with    
    compression, stats = 10,   
    encryption     
    (    
    algorithm = aes_256,    
    server certificate = mycertificate    
    )  
go    
  
--备份主密钥  
backup master key   
to file = N'E:\TEST\master_SMK.key'     
encryption by password = N'Hello@MyMasterKey'  
go  
  
--备份证书和私钥  
backup certificate Mycertificate     
to file = N'E:\TEST\Mycertificate.cer' --用于加密的证书备份路径    
with private key (     
    file = N'E:\TEST\Mycertificate_saleskey.pvk' ,--用于解密证书私钥文件路径     
    encryption by password = N'Hello@Mycertificate' );--对私钥进行加密的密码    
go  

现在在另一个实例中,直接还原备份,结果失败!
USE [master]  
GO  
RESTORE DATABASE [DemoDB]  
FROM  DISK = N'E:\TEST\DemoDB.bak'   
WITH  FILE = 1,  
MOVE N'DemoDB' TO N'E:\TEST\DemoDB0.mdf',  
MOVE N'DemoDB1' TO N'E:\TEST\DemoDB01.ndf',    
MOVE N'DemoDB2' TO N'E:\TEST\DemoDB02.ndf',    
MOVE N'DemoDB_log' TO N'E:\TEST\DemoDB0_log.ldf',    
NOUNLOAD,  STATS = 5  
GO  
  
/*  
消息 33111,级别 16,状态 3,第 4 行  
找不到指纹为 '0xFC76058DC0D3DD4FEF179B862CE8BA168D59F007' 的服务器 证书。  
消息 3013,级别 16,状态 1,第 4 行  
RESTORE DATABASE 正在异常终止。  
*/  

先还原主密钥和证书,再还原数据库备份,正常!
--还原主密钥  
USE master  
GO  
RESTORE MASTER KEY  
FROM FILE = N'E:\TEST\master_SMK.key'  
DECRYPTION BY PASSWORD = N'Hello@MyMasterKey'  
ENCRYPTION BY PASSWORD = N'Hello@MyMasterKey' FORCE  
GO  
  
/*还原主密,两实例的服务启动账户必须相同,否则出现以下错误:  
  
消息 15317,级别 16,状态 2,第 22 行  
主密钥文件不存在或格式无效。  
The master key file does not exist or has invalid format  
*/  
  
  
--打开密钥  
OPEN MASTER KEY DECRYPTION BY PASSWORD = N'Hello@MyMasterKey'  
GO  
  
--还原证书  
CREATE CERTIFICATE Mycertificate     
FROM FILE = N'E:\TEST\Mycertificate.cer'     
WITH PRIVATE KEY (    
    FILE = N'E:\TEST\Mycertificate_saleskey.pvk',     
    DECRYPTION BY PASSWORD = 'Hello@Mycertificate');    
GO  
  
  
--  再还原数据库,正常!  
USE [master]  
GO  
RESTORE DATABASE [DemoDB]  
FROM  DISK = N'E:\TEST\DemoDB.bak'   
WITH  FILE = 1,  
MOVE N'DemoDB' TO N'E:\TEST\DemoDB0.mdf',  
MOVE N'DemoDB1' TO N'E:\TEST\DemoDB01.ndf',    
MOVE N'DemoDB2' TO N'E:\TEST\DemoDB02.ndf',    
MOVE N'DemoDB_log' TO N'E:\TEST\DemoDB0_log.ldf',    
NOUNLOAD,  STATS = 5  
GO  
注:还原主密时,两实例的服务启动账户必须相同。

【补充】

如果想了解更多关于SQL加密可参考《对 sql server 数据库的备份进行加密



本文转载:CSDN博客