(5.3.7)数据库迁移——sql server备份文件的加密解密

嗯,最近在研究数据库备份相关的东西,考虑到应该为数据库备份加个密,就准备从网上搜索一下看看有什么好办法,没想到还挺乱。。。

首先,我从网上搜到的,对数据库备份加密的方法,主要有三种:

【1】使用With Password(2008以下(含))

在使用 BACKUP 语句时,添加 PASSWORD 参数【此方法适用于 sql server 2012 以前的版本(不包含 2012)】

不过呢,其实这个 PASSWORD 参数的加密,并不是我们想象中的对数据完整的加密。

案例:

--备份
Backup Database [数据库] To disk=‘c:\mssql‘+ replace(replace(replace(replace(CONVERT(varchar, getdate(), 121),‘-‘,‘‘),‘ ‘,‘‘),‘:‘,‘‘),‘.‘,‘‘) +‘.bak‘ With Password = ‘123‘,init;

--还原
Restore Database [数据库] From disk=数据库备份文件地址 With Password = ‘123‘;

根据 MSDN 中的介绍:https://msdn.microsoft.com/zh-cn/library/ms186865(v=sql.100).aspx

貌似此密码仅仅是给备份附加了一个密码,并没有对备份数据加密,如果该密码直接被修改替换,备份中的数据仍然可以被正确的读取,所以,其实加密的意义不是很大。

【2】使用TDE加密实例(2008以上(含))

2、对数据库启用 透明数据加密(TDE)【此方法适用于 sql server 2008 及以后的版本(含2008)】

注:仅 sql server enterprise(企业版)支持此功能。

这个TDE吧,嗯,非常的好,因为它不仅仅是对备份加密,它是对整个数据库进行了加密,而且既然是“透明”,也就是说不会影响到任何对数据库的操作,正常的对数据库操作(增删改查什么的),还有备份恢复什么的,都不需要特别的考虑加密问题。只有离开了当前的数据库服务器,就会发现,什么都做不了。需要在新的服务器中导入原来的加密证书即可正常使用。

MSDN 相关文档:https://msdn.microsoft.com/zh-cn/library/bb934049.aspx

要启用透明加密,需要以下几个步骤:

【2.1】使用TDE加密备份实例

1、在 master 数据库中,添加 数据库主密钥:

更多:https://msdn.microsoft.com/zh-cn/library/ms174382.aspx

USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘$$test$$‘;

其中,Password = ‘‘ 这里就是在设置主密钥,请根据需要设置高强度密码。

修改主密钥可以使用:

更多:https://msdn.microsoft.com/zh-cn/library/ms186937.aspx

use master;
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = ‘$$123123$$‘;

2、在 master 数据库中,添加 加密数据库用的证书:

更多:https://msdn.microsoft.com/zh-cn/library/ms187798(v=sql.120).aspx

USE master;
CREATE CERTIFICATE TestCert WITH SUBJECT = ‘测试证书‘;

其中,TestCert 是证书名称,可以根据需要随便起名,但是要记住!Subject 是主题貌似,随便写就可以了,长度最好不要超过128字节。

3、在 要加密的数据库 中,设置 证书以及加密算法:

更多:https://msdn.microsoft.com/zh-cn/library/bb677241.aspx

USE TestDB
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE TestCert;

其中,TestCert 就是上一步中添加的证书名称,Algorithm 是加密算法,有:AES_128 | AES_192 | AES_256 | TRIPLE_DES_3KEY ,请根据需要选择强度适合的加密算法。

4、对 要加密的数据库 启用加密:

ALTER DATABASE TestDB SET ENCRYPTION ON;

嗯,经过以上步骤,对数据库的加密就完成了。

想要查看当前数据库服务器中有哪些数据库已被加密,可执行以下语句:

SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys;

不过,还得考虑后续恢复数据库或者转移到其它服务器的问题。

5、首先要从 master 数据库中,备份加密证书:

更多:https://msdn.microsoft.com/zh-cn/library/ms178578.aspx

USE master;
BACKUP CERTIFICATE TestCert TO FILE = ‘D:\TestCert.cer‘
WITH PRIVATE KEY ( FILE = ‘D:\TestCert.pkey‘, ENCRYPTION BY PASSWORD = ‘$$certpwd$$‘ );

嗯,(两个文件)证书名称,保存的文件名,同时保存一下私钥,私钥的文件名,以及加密私钥的密码(此密码用于保护私钥,恢复时使用)。

【2.2】使用TDE加密还原从库(以便可以还原备份库的备份文件)

6、在其他数据库服务器中,仍然首先建立 数据库主密钥,同第1步操作;

7、然后,开始从文件中恢复证书:

USE master;
CREATE CERTIFICATE TestCert FROM FILE = ‘D:TestCert.cer‘
WITH PRIVATE KEY ( FILE = ‘D:TestCert.pkey‘, DECRYPTION BY PASSWORD = ‘$$certpwd$$‘);

是的,恢复证书其实就是从文件创建证书,证书名称、文件路径、私钥文件路径、以及解密私钥的密码(备份加密时设置的)。

8、然后你就可以附加数据库、恢复数据库什么的了~

需要注意的是,数据库加密的关键是 那个证书,数据库主密钥 是用来保护数据库信息的,比如证书的存放什么的,并不直接关系到数据库的加密。

所以,一定要备份好证书!!!不然别到时候哭着解密不了数据库。

这个部分的参考文章:http://blog.csdn.net/ws_hgo/article/details/6927152

最后呢,说说这个方法的不好,那就是这个方法是对整个数据库的数据加密,包括日志什么的,可能会为cpu带来一定的负担。

而且在备份的时候因为此时数据库已经处于加密状态,所以无法进行太多的压缩了,可能备份文件体积较大。

其实我比较关心的一点是,这个 透明数据加密(TDE) 只有 Enterprise (企业版)拥有,其它版本是木有的~

【3】使用算法+证书直接加密备份文件

3、直接对备份进行加密【此方法适用于 sql server 2014 及以后的版本(应该?)】

这个方法和第一种比较像,直接在备份时加参数,仅仅对备份加密,不会加密数据库,但是呢,也需要跟第二种方法一样,需要先创建证书。

1、算了,要不我就不重复写了,请看第二种方法的第1步。。。

2、请参见第二种方法的第2步。。。

3、恩恩,此时就可以开始备份数据库了!

BACKUP DATABASE TestDB TO DISK =‘D:TestDB.bak‘ WITH COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = TestCert);

其中,前半句应该很熟悉,就是备份数据库的语句,Compression 是压缩选项

后半句就是加密,Algorithm 是加密算法,TestCert 就是我们添加的证书了。

备份就这样建完了。当然也得涉及到在其它服务器上的恢复问题。

4、好吧,我又懒了,其实就是第二种方法中的第 5、6、7 步,备份证书,恢复证书。。。

5、嗯,又可以愉快的恢复备份了~

这个部分的参考文章:http://www.cnblogs.com/CareySon/p/3853016.html

实战案例:

SQL 自2008(还是2005)之后,推出加密功能,可以一定程度上保护数据库的备份安全。
以下测试环境为:sql server 2014
主要目的:将备份的文件加密,在其它电脑上恢复时必须有证书和密钥才可恢复

--1 创建证书
create CERTIFICATE BackupCertificate2
with subject=N‘Test certificate‘

-- 创建密钥
create master key encryption by password = ‘[email protected]‘--2 备份主密钥
backup master key
to file=N‘g:\db\testbas.cer‘
encryption by password=N‘[email protected]‘--3 备份 证书和密钥文件

backup CERTIFICATE BackupCertificate2
to file=N‘G:\DB\BackupCertificate2.cert‘
with private key
(
  file=N‘g:\db\master_key2.cer‘,
  encryption by password=N‘[email protected]‘
  )

--恢复 证书和密钥,(首先将上面备份的两个文件,复制到需还原的电脑上)

复制代码
--4、从备份文件中创建证书和密钥

create certificate BackupCertificate
from file =N‘c:\sql\BackupCertificate2.cert‘
with private key
(
file=N‘C:\SQL\master_key2.cer‘,
decryption by password=N‘[email protected]‘,
encryption by password=N‘[email protected]‘
)

呵呵,前面说了这么多,其实直接说这个多好,是吧,首先在版本方面,比TDE多了两个版本,但是还是没有我想要的。。。

其次呢,压缩也可以用的上了,不过备份压缩与备份加密支持的版本是一样的。。。

还有呢,只支持 2014(和以后的版本?),想必现在应该有不少数据库还是 2008 甚至 2005。。。

总结

所以说呢,其实这几个方法都不是太满意。。。大家就根据自己的情况使用吧,至于我呢。。。根据我的需求,我准备还是用zip压缩加密一下吧。。。

哎,浪费了一个上午研究数据库备份加密,又浪费了一个中午写这篇文章,算是一个上午没白浪费吧,没准以后用上呢。。。

原文地址:https://www.cnblogs.com/gered/p/12160757.html

时间: 2024-10-20 15:47:17

(5.3.7)数据库迁移——sql server备份文件的加密解密的相关文章

从Windows迁移SQL Server到Linux

原文:从Windows迁移SQL Server到Linux 前一篇博客关于SQL Server on Linux的安装,地址:http://www.cnblogs.com/fishparadise/p/8057650.html,现在测试把Windows平台下的一个数据库迁移到Linux平台下. 1. 环境 Windows: Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Linux: CentOS 7.4,SQL Server 2

未启用当前数据库的 SQL Server Service Broker,请为此数据库启用 Service Broker

未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 Service Broker, 我执行了下面语句解决了问题 ALTER DATABASE [数据库名称] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;ALTER DATABASE [数据库名称] SET ENABLE_BROKER; 未启用当前数据库的 SQL Server Service Broker,请为此数据库启用 Servic

SQL Server之 (一) 数据库简介 SQL Server环境配置 数据库基础知识

   前言 这个是我工作两年多后,再次从最基础的SQL入门开始,认真的学一遍SQL Server,捡漏和巩固都有;因为自己刚开始学的时候,总是心烦气躁,最近换工作,发现1到2年经验,问到基础性的东西还是很多,这个时候需要的是扎实的基础功夫,所以一系列打击+反省后,自己节假日在家从最基础重新认识一下SQL Server,继续沉淀一下.哪里有不对或需深入探讨,请直接留言或者小窗我;欢迎~ (一) 数据库简介   SQL Server环境配置   数据库基础知识 1.什么是数据库,数据库有哪些特点,为

批处理创建数据库(Sql Server)

ylbtech-Miscellaneos:批处理创建数据库(Sql Server) 1.A,资源(Resource) - 创建数据返回顶部 1.A.1,InstallDatabases.cmd - 编程代码 @Echo Off cls REM *************************************************************************** REM ** REM ** Name: InstallDatabases REM ** Desc: SQ

在Windows Server 2008 R2 Server中,连接其他服务器的数据库遇到“未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker ”

项目代码和数据库部署在不同的Windows Server 2008 R2 Server中,错误日志显示如下: "未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 Service Broker." SQL Server Service Broker介绍: SQL Server Service Broker 为消息和队列应用程序提供 SQL Server 数据库引擎本机支持.这使开发人员可以轻松地创建使用数据库

本地数据库(SQL Server)远程连接服务器端服务器

https://www.cnblogs.com/yougmi/p/4616273.html https://jingyan.baidu.com/article/6c67b1d6ca06f02787bb1ed1.html( SQL Server 2008 R2如何开启数据库的远程连接 ) 本地数据库(SQL Server 2012) 连接外网服务器的数据库,外网的服务器端需要做如下配置: 1. 首先是要打开 数据的配置管理工具 2. 配置相关的客户端协议,开启TCP/IP 3. 数据库默认的远程端

[转]细说SQL Server中的加密

简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线.通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义.这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算). SQL

细说SQL Server中的加密【转】

简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线.通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义.这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算). SQL

SQL Server中的加密

参考文献: 细说SQL Server中的加密 Transparent Data Encryption (TDE) Database Encryption Key (DEK) management SQL Server中的加密简介 在SQL Server2000和以前的版本,是不支持加密的.所有的加密操作都需要在程序中完成.这导致一个问题,数据库中加密的数据仅仅是对某一特定程序有意义,而另外的程序如果没有对应的解密算法,则数据变得毫无意义.举个例子来说,我以前写过一个web应用程序(参考博客:自定