对 sql server 数据库的备份进行加密
嗯,最近在研究数据库备份相关的东西,考虑到应该为数据库备份加个密,就准备从网上搜索一下看看有什么好办法,没想到还挺乱。。。
首先,我从网上搜到的,对数据库备份加密的方法,主要有三种:
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 数据库的备份进行加密相关推荐
- [转贴]ASP.NET下对远程SQL SERVER数据库的备份和恢复的存储过程
Sql server的帮助文档地址,在IE里面直接输入就行 mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Boo ...
- Sql Server数据库的备份和恢复措施
Sql Server数据库的备份和恢复措施 Sql Server数据库的备份和恢复措施 一.备份数据库 1.打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL S ...
- 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...
数据备份一直被认为数据库的生命,也就是一个DBA所要掌握的主要技能之一,本篇就是介绍SQL Server备份原则,SQL Server数据库分为数据文件和日志文件.为了使得数据库能够恢复一致点,备份不 ...
- SQL Server 数据库之备份和恢复数据库
备份和恢复数据库 1. 概述 2. 备份类型 3. 恢复模式 3.1 简单恢复模式 3.2 完全恢复模式和大容量日志恢复模式 4. 备份数据库 5. 恢复数据库 1. 概述 在一些对数据可靠性要求很高 ...
- 如何让SQL Server数据库自动备份并压缩
我们通常在维护数据库的时候,都会建立一个备份的机制,在SQL Server中,我们就可以通过如下的方法来实现: 如果SQL Server代理没有启动,我们先把其启动,然后新建立一个作业,名称命名为&q ...
- SQL server数据库的备份与还原遇到的问题
一.数据库备份 1.操作过程 选中要备份的数据库-----任务-----右键备份------选择存放的地址 2.注意事项 (1)选择存放地址时,记得自己写好文件名,还有备份文件的后缀.bak,否则备份 ...
- SQL Server数据库自动备份
在备份数据之前,为备份数据文件建立一个独立的文件夹,方便区分: 一.开启SQL代理服务: 找到SQL Server配置管理器,如图: 二.找到SQL Server服务-->右边找到SQL Ser ...
- SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法...
在使用数据库的过程中,经常会碰到数据库迁移或者数据迁移的问题,或者有忽然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法. 本文链接:http:// ...
- Sql Server 数据库压缩备份
--压缩备份导出库 --定义变量,把备份数据库的QL脚本赋值给变量 declare @SqlBackupDataBase as nvarchar(1000) set @SqlBackupDataBas ...
最新文章
- websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
- Microbiome:微生物所刘双江组建立人肠道微生物资源库(hGMB)
- Effective Java 之个人总结
- ad16自动布线设置规则_PCB设计的十大误区——那些年,我们一起遵守的规则
- 协程库st(state threads library)原理解析
- 51单片机支持python么_macOS搭建51单片机开发环境
- 关于MATLAB fplot 出现matlab 警告: 函数处理数组输入时行为异常。要改善性能,请将您的函数正确向量化,以返回大小和形状与输入参数相同的输出。
- 英语总结系列(二十九):好好学英语
- php 正则断言里面使用*+
- 基于pycrfsuite和sklearn_crfsuite的命名实体识别NER实战【以CoNLL2002数据集为基准】
- ftp服务器vsftpd配置文件,vsftpd配置文件详解及ftp服务器搭建
- 线性代数学习指导与MATLAB编程实践,线性代数学习指导与MATLAB编程实践(邵建峰)...
- Linux软件源镜像修改
- 吾爱破解python就业班_我吾 区别
- 医院网络广告的结算形式-医院网络营销站外合作篇
- cad编辑节点快捷键是什么_cad进入块编辑快捷键是什么,Auto CAD进入块编辑快捷键是什么?...
- word中文字后面的空格加不上下划线
- 五百亿!又一大型平台崩了!85后女老板跑路!
- 数字图像处理:像素间的一些基本关系
- Matlab图像的平移,旋转,缩放,裁剪