SqlServer2008数据库透明加密
前几天研究了一下sql数据库的透明加密,记下来加深一下理解.
用脚本创建文件夹
--查文件夹有没有
EXEC master.dbo.xp_fileexist 'D:\DATA\storedcerts'
EXEC master.dbo.xp_fileexist 'D:\DATA\storedkeys' --开启系统存储过程高级选项
EXEC sp_configure 'show advanced options',1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
GO
--调用DOS命令创建storedcerts文件夹
EXEC xp_cmdshell 'mkdir D:\DATA\storedcerts'
GO
--调用DOS命令创建storedkeys文件夹
EXEC xp_cmdshell 'mkdir D:\DATA\storedkeys'
下面开始加密
USE MASTER;
GO
--删除原有的证书和密钥,保险一点,如果没有会报错不用管
DROP CERTIFICATE MyServerCert
GO
DROP MASTER KEY
GO --在MASTER数据库中创建一个MASTER KEY,密码是zz.www
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'zz.www';
GO --使用MASTER KEY创建证书MyServerCert
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
GO USE ceshi;
GO
--在ceshi数据库上使用MyServerCert这个证书创建数据库私钥
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
接下来是备份数据库主密钥,数据库证书和证书私钥.
在创建证书时数据库会提示备份证书以及相关私钥,在没弄明白之前笔者只备份了证书,没有管私钥,虽然私钥是会在备份证书的时候带到证书里面去,但是显然笔者把证书想简单了,等还原证书解密的时候,才发现数据库主密钥和证书私钥是两码事,后面解密的时候解释这个问题
USE MASTER;
GO
--备份数据库主密钥MASTER KEY
BACKUP MASTER KEY TO FILE = 'D:\DATA\storedkeys\masterkey' ENCRYPTION BY PASSWORD = 'zz.www'
GO --备份数据库证书和私钥
BACKUP CERTIFICATE MyServerCert TO FILE = 'D:\DATA\storedcerts\MyServerCert.cer'
WITH PRIVATE KEY ( FILE = 'D:\DATA\storedkeys\MyServerCert.pvk' ,
ENCRYPTION BY PASSWORD = 'zz.www' );
GO --将ceshi数据库设置为加密
ALTER DATABASE ceshi SET ENCRYPTION ON;
GO
到这里ceshi数据库就加密成功了.
下面是解密过程,笔者只是用到了把加密的数据库的备份文件或者数据库原文件还原或者附加到另外的实例数据库中.
在这里就遇到了问题,刚开始笔者用备份好的密钥和证书直接还原到新实例上面,提示都还原成功了,但是用备份文件进行还原的时候,还是会提示密钥不对.

然后笔者尝试删除密钥和证书,虽然提示笔者删掉了,而且在系统表里面查询也确实没有了,但是在还原的时候依旧报错,提示需要证书

找了下原因,官方说法:即使对于数据库不再启用加密,用于保护数据库加密密钥的证书备份也应保留。 即使数据库不再加密,事务日志的某些部分仍可能保持受到保护,但在执行数据库的完整备份前,对于某些操作可能需要证书。
说是删除,实际上并没有,也是,如果直接就删了,那这透明加密就没什么卵用了;也就是说即使密钥删了,但是证书还在,私钥还在,即使是用DROP CERTIFICATE MyServerCert 来删除证书,然后把当前数据库拿到其他数据库实例上面还原,也是无法成功的.
然后在还原好了主密钥和证书,私钥之后,数据库却提示当前数据库实例不支持透明加密功能,这才知道,虽然大部分的数据库版本均可以进行加密操作,但是在新实例上面做一些还原或者附加等操作的,必须要求新的数据库实例是企业版的才可以完美操作.
--查询数据库实例版本等信息
SELECT SERVERPROPERTY('productversion') as '产品版本', SERVERPROPERTY ('productlevel') as '产品级别' , SERVERPROPERTY ('edition') as '版本'

下面是笔者总结的成功还原数据库并且可以正常操作数据库数据的解密方法
还原主密钥,还原证书和证书私钥,重点就是证书私钥
--还原MASTER KEY
USE MASTER
RESTORE MASTER KEY
FROM FILE = 'D:\DATA\storedkeys\masterkey'
DECRYPTION BY PASSWORD = 'zz.www'
ENCRYPTION BY PASSWORD = 'zz.www';
GO --还原证书和私钥
CREATE CERTIFICATE MyServerCert
FROM FILE = 'D:\DATA\storedcerts\MyServerCert'
WITH PRIVATE KEY (FILE = 'D:\DATA\storedkeys\MyServerCert.pvk',
DECRYPTION BY PASSWORD = 'zz.www');
GO --还原数据库
RESTORE DATABASE ceshi
FROM disk = 'F:/DATA/2015-07-06'
WITH MOVE 'Test' TO 'd:\DATA\ceshi.mdf',
MOVE 'Test_log' TO 'd:\DATA\ceshi_log.ldf'
GO
到这里数据库还原成功就ok了
此文个人观点,有不对之处,欢迎指正.
SqlServer2008数据库透明加密的更多相关文章
- ORACLE透明加密
--官网文档:https://www.oracle.com/technetwork/cn/tutorials/tde-096009-zhs.html#t概述Oracle 数据库 10g 第 2 版透明 ...
- hadoop 透明加密
hadoop 透明加密 hadoop 透明加密 kms transparent 2015年04月09日 18:12:20 糖糖_ 阅读数:12248 标签: transparenthadoop kms ...
- KingbaseES 表空间加密-透明加密
透明存储加密是指数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密.加密解密过程对用户都是透明的,无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密.当前的透明 ...
- Java连接SqlServer2008数据库(转)
Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...
- Sqlserver2008 数据库镜像会话的初始连接
sqlserver2008 数据库镜像服务配置完成后,大家会发现我们有了两个数据库服务,这两个服务可以实现自动故障转移,那么我们的程序如何实现自动连接正常的数据库呢? 这个问题很简单,使用ADO.NE ...
- 在Winform开发框架中实现对数据库的加密支持
在很多情况下,我们需要对数据库进行加密,特别是Access数据库.Sqlite数据库,这些直接部署在客户端的数据,因为数据也是客户的资产,数据库总是存在很多相关的秘密或者重要的业务数据,所以一般来说, ...
- SQLServer2008数据库安装图解
SQLServer2008数据库安装图解... ======================================= 解压下载的安装包,右键运行Setup.exe文件 =========== ...
- 在Winform开发框架中实现对数据库的加密支持(转)
在很多情况下,我们需要对数据库进行加密,特别是Access数据库.Sqlite数据库,这些直接部署在客户端的数据,因为数据也是客户的资产,数据库总是存在很多相关的秘密或者重要的业务数据,所以一般来说, ...
- 将MySQL数据库转移到SqlServer2008数据库
由于工作需要用到了将MySQL数据库转成SqlServer数据库,查了一些资料发现将SqlServer数据库转成MySQL数据库的文章很多,但是反过来的就很少了.下面就将自己的方法分享给大家. 这里用 ...
随机推荐
- 关于Emit中动态类型TypeBuilder创建类标记的一点思考
利用TypeBuilder是可以动态创建一个类型,现在有个需求,动态生成一个dll,创建类型EmployeeEx,需要继承原dll里面的Employee类,并包含Employee类上的所有类标记. ...
- hdu1215七夕节
Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" ...
- calc()函数的使用
calc()函数算是css中的一个另类了,一般来说css都是直接确定的样式,而calc()函数却是可以动态计算,这和css静态的概念有些区别,但这并不妨碍其优秀的性能. 什么是calc()? calc ...
- CSS属性值定义语法中的符号说名
我们通常看到一个CSS语法,总是有很多符号在其中,这些符号是什么鬼呢,且看下面道来 这些符号可以大致分为2类:分组类与数量类. 1.分组类,就是分成一堆一堆啦: 符号 名称 描述 示例 并置 各部 ...
- IT学习方法
IT 技术的发展日新月异,新技术层出不穷,具有良好的学习能力,能及时获取新知识.随时补充和丰富自己,已成为程序员职业发展的核心竞争力.本文中,作者结合多年的学习经验总结出了提高程序员学习能力的三个要点 ...
- (转)ubuntu下如何查看和设置分辨率
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5681159.html 原网址: http://www.2cto.com/os/201303/19397 ...
- 使用LAMP创建基于wordpress的个从博客网站
参考: http://blog.csdn.net/ck_boss/article/details/27866117 一.mysql配置 1.安装mysql yum install mysql-serv ...
- ElasticSearch入门知识扫盲
ElasticSearch 入门介绍 tags: 第三方 lucene [toc] 1. what Elastic Search(ES)是什么 全文检索和lucene 全文检索 优点:高效,准确,分词 ...
- JavaScript match 和 exec 备忘笔记
这是一道广为引用的面试题:var someText="web2.0 .net2.0"; var pattern=/(\w+)(\d)\.(\d)/g; var outCome_ex ...
- js 函数声明与函数表达式
1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2: 3: ...