SQL 2008 防附加防还原加密

SQL 2008 新的功能 新的体验

不多说了 直接上代码

 

/*进行数据库加密操作*/

-- 步骤一:创建主数据库密钥

USE [master];
GO

--查看master数据库是否被加密
SELECT name,is_master_key_encrypted_by_server FROM sys.databases;

--创建master数据库下的主数据库密钥
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'~!@#$%';

GO
--查看master数据库下的密钥信息
SELECT * FROM sys.symmetric_keys;

GO
--创建证书用来保护 数据库加密密钥 (DEK)
CREATE CERTIFICATE master_server_cert WITH SUBJECT = N'Master Protect DEK Certificate';

-------------------------------------------------------------------------------------------------------------------
--
- 步骤二创建证书

--1、创建需要加密的数据库,若存在则不执行该步骤
IF DB_ID('db_encryption_test') IS NOT NULL
DROP DATABASE db_encryption_test
--创建测试数据库
CREATE DATABASE db_encryption_test;
GO
--2、 创建由master_server_cert保护的DEK 数据库加密密钥 (对称密钥)
USE db_encryption_test;
Go
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE master_server_cert;
GO

--执行上语句以后出现:
/*

Warning: The certificate used for encrypting the database encryption key has not been backed up. You should immediately back up the certificate and the private key associated with the certificate. If the certificate ever becomes unavailable or if you must restore or attach the database on another server, you must have backups of both the certificate and the private key or you will not be able to open the database.
*/
--提示你,立刻备份证书;这里备份证书,不比制定加密私钥的 对称密钥了.因为他的密钥是通过master数据库的主数据库密钥加密了.

--3、 备份证书;
USE master;
BACKUP CERTIFICATE master_server_cert TO FILE = 'D:\master_server_cert.cer'
WITH PRIVATE KEY (
FILE = 'D:\master_server_cert.pvk' ,
ENCRYPTION BY PASSWORD = '~!@#$%' );

--4、备份一下数据库主密钥(master)
USE master;
--如果没有启用主密钥的自动解密功能
--
OPEN MASTER KEY DECRYPTION BY PASSWORD = '~!@#$%';
BACKUP MASTER KEY TO FILE = 'D:\MSSQL\MasterKey\master.cer'
ENCRYPTION BY PASSWORD = '~!@#$%';
GO
--5、(建议是多用户加密)
--
设置成单用户在运行加密
ALTER DATABASE db_encryption_test SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
--设置多用户访问
ALTER DATABASE db_encryption_test SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO

--6、备份成功以后,开启TDE 加密
ALTER DATABASE db_encryption_test SET ENCRYPTION ON;
GO

--7、查看db_encryption_test数据库是否被加密 encryption_state:3 TDE加密了
SELECT DB_NAME(database_id),encryption_state FROM sys.dm_database_encryption_keys;
/*
发现tempdb也被加密了。MSDN解释是:如果实例中有一个数据库启用了TDE加密,那么tempdb也被加密
*/

--8、分离数据库
USE master;
EXEC sp_detach_db N'db_encryption_test';
GO

 

 

 

解密~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

/*进行数据库解密操作*/

-- 先拷贝证书备份等3个文件至用户端

--若已经存在主数据库密钥,先删除证书,后删除主数据库密钥
--
drop certificate master_server_cert
--
drop MASTER KEY

--1、创建主数据库密钥USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'~!@#$%';

----------------------------------------------------------------
--
网上的方法是这样的,可以替换第1步 --
--
1、还原了MASTER KEY
USE master;
--我先在他机器还原了MASTER KEY (他原机器master库无master key)
RESTORE MASTER KEY
FROM FILE = 'E:\证书2323\master.cer'
DECRYPTION BY PASSWORD = '~!@#$%'
ENCRYPTION BY PASSWORD = '~!@#$%';
GO
----------------------------------------------------------------
--
2、如果没有自动加密
OPEN MASTER KEY DECRYPTION BY PASSWORD=N'~!@#$%';
--3、创建证书
CREATE CERTIFICATE master_server_cert
FROM FILE = 'E:\证书2323\master_server_cert.cer'
WITH PRIVATE KEY (FILE = 'E:\证书2323\master_server_cert.pvk',
DECRYPTION BY PASSWORD = '~!@#$%');
GO
--即可进行附加以及还原数据库操作
--
备注若拒绝附加,则是因为权限问题
--
数据库文件夹图标上单击右键,选择“属性”菜单->选择“安全”标签->选择“编辑”按钮。
--
选择组或用户名列表中选择Authenticated Users,在权限列表中选中完全控制。

CLOSE MASTER KEY

 

 

最后经过测试时:成功防附加、 防还原。

测试系统:WIN7 +SQL2008企业版

posted on 2012-02-24 13:12  昌林  阅读(278)  评论(1编辑  收藏  举报

导航