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

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

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

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

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

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

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

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

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

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

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

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$$' );

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

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、直接对备份进行加密【此方法适用于 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

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

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

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

总结

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

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

转载于:https://www.cnblogs.com/xwgli/p/4522502.html

对 sql server 数据库的备份进行加密相关推荐

  1. [转贴]ASP.NET下对远程SQL SERVER数据库的备份和恢复的存储过程

    Sql server的帮助文档地址,在IE里面直接输入就行 mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Boo ...

  2. Sql Server数据库的备份和恢复措施

    Sql   Server数据库的备份和恢复措施 Sql   Server数据库的备份和恢复措施 一.备份数据库 1.打开SQL企业管理器,在控制台根目录中依次点开Microsoft   SQL   S ...

  3. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...

    数据备份一直被认为数据库的生命,也就是一个DBA所要掌握的主要技能之一,本篇就是介绍SQL Server备份原则,SQL Server数据库分为数据文件和日志文件.为了使得数据库能够恢复一致点,备份不 ...

  4. SQL Server 数据库之备份和恢复数据库

    备份和恢复数据库 1. 概述 2. 备份类型 3. 恢复模式 3.1 简单恢复模式 3.2 完全恢复模式和大容量日志恢复模式 4. 备份数据库 5. 恢复数据库 1. 概述 在一些对数据可靠性要求很高 ...

  5. 如何让SQL Server数据库自动备份并压缩

    我们通常在维护数据库的时候,都会建立一个备份的机制,在SQL Server中,我们就可以通过如下的方法来实现: 如果SQL Server代理没有启动,我们先把其启动,然后新建立一个作业,名称命名为&q ...

  6. SQL server数据库的备份与还原遇到的问题

    一.数据库备份 1.操作过程 选中要备份的数据库-----任务-----右键备份------选择存放的地址 2.注意事项 (1)选择存放地址时,记得自己写好文件名,还有备份文件的后缀.bak,否则备份 ...

  7. SQL Server数据库自动备份

    在备份数据之前,为备份数据文件建立一个独立的文件夹,方便区分: 一.开启SQL代理服务: 找到SQL Server配置管理器,如图: 二.找到SQL Server服务-->右边找到SQL Ser ...

  8. SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法...

    在使用数据库的过程中,经常会碰到数据库迁移或者数据迁移的问题,或者有忽然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法. 本文链接:http:// ...

  9. Sql Server 数据库压缩备份

    --压缩备份导出库 --定义变量,把备份数据库的QL脚本赋值给变量 declare @SqlBackupDataBase as nvarchar(1000) set @SqlBackupDataBas ...

最新文章

  1. websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
  2. Microbiome:微生物所刘双江组建立人肠道微生物资源库(hGMB)
  3. Effective Java 之个人总结
  4. ad16自动布线设置规则_PCB设计的十大误区——那些年,我们一起遵守的规则
  5. 协程库st(state threads library)原理解析
  6. 51单片机支持python么_macOS搭建51单片机开发环境
  7. 关于MATLAB fplot 出现matlab 警告: 函数处理数组输入时行为异常。要改善性能,请将您的函数正确向量化,以返回大小和形状与输入参数相同的输出。
  8. 英语总结系列(二十九):好好学英语
  9. php 正则断言里面使用*+
  10. 基于pycrfsuite和sklearn_crfsuite的命名实体识别NER实战【以CoNLL2002数据集为基准】
  11. ftp服务器vsftpd配置文件,vsftpd配置文件详解及ftp服务器搭建
  12. 线性代数学习指导与MATLAB编程实践,线性代数学习指导与MATLAB编程实践(邵建峰)...
  13. Linux软件源镜像修改
  14. 吾爱破解python就业班_我吾 区别
  15. 医院网络广告的结算形式-医院网络营销站外合作篇
  16. cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?...
  17. word中文字后面的空格加不上下划线
  18. 五百亿!又一大型平台崩了!85后女老板跑路!
  19. 数字图像处理:像素间的一些基本关系
  20. Matlab图像的平移,旋转,缩放,裁剪

热门文章

  1. 【源码类】开源项目汇总
  2. 【Linux系统编程】Linux 线程浅析
  3. [Qt教程] 第11篇 2D绘图(一)绘制简单图形
  4. code.php验证码,php 验证码 实例
  5. Hibernate框架整合DM数据库
  6. 51 nod 1097 拼成最小的数 思路:字符串排序
  7. Shell(8)——for、while、until
  8. Linux(8) —— grep命令
  9. 解决 SSH 不能输入中文的问题
  10. 超全流程-idea对springboot+ssm的部署实现增删改查