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数据库的文章很多,但是反过来的就很少了.下面就将自己的方法分享给大家. 这里用 ...
随机推荐
- PHP session 跨子域问题总结
Session主要分两部分: 一个是Session数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在 另一个是标志着Session数据的Session Id,Session ID, ...
- JS正则表达式收集篇
1.验证只可输入整数或小数点后两位的数字:/^([1-9]{1}|[1-9]{1}[0-9])+(.[1-9]{1,2})?$/ 2.验证Email: /^([a-zA-Z0-9]+[_|\_|\.] ...
- 配置IIS
1.aspnet_regiis -i 重新安装IIs vs2013的命令符 2. 分配权限 1.对文件夹,权限,安全,分配权限 2.设置webconfig 对应的httpModel 及安全性 3.设 ...
- vs中动态DLL与静态LIB工程中加入版本信息的方法
说明:本文仅针对刚接触VS不久的新手们(包括ME),提供的一点小Tips,同时也是小生的首篇Blog文章,请大伙多多担待O(∩_∩)O哈! 步骤1 - 在工程中右键添加新建项 步骤2 - 选择创建RC ...
- Dapper simplecrud的使用
为了方便Dapper操作可以使用Dapper的相关扩展dapper simplecrud. 1.首先点击管理NuGet
- poj1511/zoj2008 Invitation Cards(最短路模板题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Invitation Cards Time Limit: 5 Seconds ...
- 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
python IO操作的时候出现这种错误,检查一些url的目录 这个时候需要注意一下一般的dir举例是:“F:\DOCUMENT\4.7” 需要修改成为:F:/DOCUMENT/4.7
- 创业不要在IT业内创(市场太小,而且都喜欢自己折腾、没有花钱的习惯)
精神是好的.但是,我看了你的产品和网站:你选的创业方向基本是死路一条,我劝你该放弃就放弃.我判断你的思路还局限在IT行业内,创业不要在IT业内创,要走出去,睁开眼看看别人的世界,自己体会.我不是打击你 ...
- 锁机制与原子操作 <第四篇>
一.线程同步中的一些概念 1.1临界区(共享区)的概念 在多线程的环境中,可能需要共同使用一些公共资源,这些资源可能是变量,方法逻辑段等等,这些被多个线程共用的区域统称为临界区(共享区),临界区的资源 ...
- Fiddler 教程(转)
阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...