前几天研究了一下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数据库透明加密的更多相关文章

  1. ORACLE透明加密

    --官网文档:https://www.oracle.com/technetwork/cn/tutorials/tde-096009-zhs.html#t概述Oracle 数据库 10g 第 2 版透明 ...

  2. hadoop 透明加密

    hadoop 透明加密 hadoop 透明加密 kms transparent 2015年04月09日 18:12:20 糖糖_ 阅读数:12248 标签: transparenthadoop kms ...

  3. KingbaseES 表空间加密-透明加密

    透明存储加密是指数据在写到磁盘上时对其进行加密,当授权用户重新读取数据时再对其进行解密.加密解密过程对用户都是透明的,无需对应用程序进行修改,授权用户甚至不会注意到数据已经在存储介质上加密.当前的透明 ...

  4. Java连接SqlServer2008数据库(转)

    Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...

  5. Sqlserver2008 数据库镜像会话的初始连接

    sqlserver2008 数据库镜像服务配置完成后,大家会发现我们有了两个数据库服务,这两个服务可以实现自动故障转移,那么我们的程序如何实现自动连接正常的数据库呢? 这个问题很简单,使用ADO.NE ...

  6. 在Winform开发框架中实现对数据库的加密支持

    在很多情况下,我们需要对数据库进行加密,特别是Access数据库.Sqlite数据库,这些直接部署在客户端的数据,因为数据也是客户的资产,数据库总是存在很多相关的秘密或者重要的业务数据,所以一般来说, ...

  7. SQLServer2008数据库安装图解

    SQLServer2008数据库安装图解... ======================================= 解压下载的安装包,右键运行Setup.exe文件 =========== ...

  8. 在Winform开发框架中实现对数据库的加密支持(转)

    在很多情况下,我们需要对数据库进行加密,特别是Access数据库.Sqlite数据库,这些直接部署在客户端的数据,因为数据也是客户的资产,数据库总是存在很多相关的秘密或者重要的业务数据,所以一般来说, ...

  9. 将MySQL数据库转移到SqlServer2008数据库

    由于工作需要用到了将MySQL数据库转成SqlServer数据库,查了一些资料发现将SqlServer数据库转成MySQL数据库的文章很多,但是反过来的就很少了.下面就将自己的方法分享给大家. 这里用 ...

随机推荐

  1. 对 Xcode 菜单选项的详细探索(干货)

    http://www.cocoachina.com/ios/20151204/14480.html

  2. 0118——UILabel和导入字体

    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, 100)]; 1.设置文字颜色 label.textC ...

  3. C++文件

    参考: C++文件读写详解(ofstream,ifstream,fstream):http://blog.csdn.net/kingstar158/article/details/6859379 fs ...

  4. im2uint8函数分析

    环境:Win7 64位 + Matlab R2010a 本次分析的函数为im2uint8,这个函数在图像处理中要用到,主要把图像数据类转换到uint8 uint8函数有效的输入的图像数据类为:logi ...

  5. JDK,TomCat安装配置

    JDK.Tomcat.myEclipse安装配置 准备安装包 JAVA运行环境包 JDK1.7下载地址: http://www.veryhuo.com/down/html/43205.html Jsp ...

  6. 写入和读取LOB类型的对象

    ====写入数据============ create or replace procedure addWaterFallis directions clob; amount binary_integ ...

  7. Hello Word!

    第一次来博客园,作为技术的基站,多余的话不说了,就一个helloword! <script type="text/javascript"> //等待dom元素加载完毕. ...

  8. XML为数据库进行增删改查(实例)

    //增删改查文件 package xml2; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.Fi ...

  9. 图片ppm编码格式

    ppm图片有2种格式, ASCII格式和binary格式. (1)ppm头部分 由三部分组成,这三部分由回车或换行分割,但PPM的标准中是要求空格. 第一行通常是P3或P6,说明是PPM格式: 第二行 ...

  10. shell练习--用户下载交互检测

    #!/bin/bash #By spinestars #-- read -p "请输入下载目录路径" down_dir read -p "请输入网址路径" ur ...