SQLSERVER SQL TDE数据库加密操作

SQLSERVER SQL TDE数据库加密操作

一、创建master数据库下的主数据库密钥

在Transact-SQL下执行
USE master
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'master主数据密钥密码';

二、创建证书用来保护数据库加密密钥

在Transact-SQL下执行
USE master
CREATE CERTIFICATE master_server_cert WITH SUBJECT = N'证书的名称';

三、创建数据库

提示:如果加密现有的数据库可以跳过这一步

在Transact-SQL下执行
CREATE DATABASE  db_encryption_test;

四、创建要加密的数据库的密钥

(以下两种操作选择其中一种就可以完成操作)

1、在Transact-SQL下执行

USE db_encryption_test;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;

2、在SQL Server Management Studio操作
选择要加密的数据库右键单击–>任务–>管理数据库加密

在这里插入图片描述选择要加密的算法
选择服务器证书

五、加密数据库

(以下两种操作选择其中一种就可以完成操作)
1 脚本执行
在Transact-SQL下执行
USE db_encryption_test;
ALTER DATABASE db_encryption_test SET ENCRYPTION ON;

2、在SQL Server Management Studio操作
在这里插入图片描述打开之前的管理数据库加密
对话框勾选【将数据库加密设置为ON(S)】

在这里插入图片描述用SQL Server Management Studio可以和上一步一起操作。

以上操作数据库加密完成

打开数据库属性对话框时,选择【选项】可以看到【已启用加密】项为True则证明数据库已经加密
SQLSERVER SQL TDE数据库解密操作

逆向解密操作

一、解密数据库

USE db_encryption_test;
ALTER DATABASE db_encryption_test SET ENCRYPTION OFF;

执行完成后数据库会显示为未加密状态
可以执行

select name,is_master_key_encrypted_by_server from 	sys.databases

查看哪些数据库被加密

二、删除数据库密钥

USE db_encryption_test;
DROP DATABASE ENCRYPTION KEY;

可以执行

SELECT * FROM master.sys.dm_database_encryption_keys

查看哪些数据库还存在密钥

三、删除证书

USE master;
DROP CERTIFICATE MyServerCert(证书名);
可以执行SELECT * FROMmaster.sys.certificates查看都有哪些证书

四、删除主数据库密钥

USE master;
DROP MASTER KEY;
可以执行select * from master.sys.key_encryptions查看主密钥是否被删除

SQLSERVER SQL TDE数据库备份加密证书

USE master;
BACKUP CERTIFICATE master_server_cert TO FILE = 'D:\MSSQL\Certificate\master_server_cert.cer' 
WITH PRIVATE KEY ( 
FILE = 'D:\MSSQL\Certificate\master_server_cert.pvk' ,
ENCRYPTION BY PASSWORD = '123456789' );

当执行加密数据库的时候会提示你需要备份证书。

SQLSERVER SQL TDE数据库异地附加数据库

一、在TDE加密环境下分离数据库

execmaster.dbo.sp_detach_db @dbname = N'db_encryption_test ';

分离数据库完成后,将数据库文件和日志文件拷贝到新环境进行附加;

二、在没有恢复认证的新环境下附加数据库

CREATE DATABASE db_encryption_test ON
(FILENAME = N'C:\SQLData\ db_encryption_test.mdf'),		--数据文件
(FILENAME = N'C:\SQLData\ db_encryption_test _log.ldf')	--日志文件
FOR ATTACH;

执行完成以上附加操作时,会报错:

找不到指纹为 ‘0xA7ED737B887F1707B99F4E8D1C43B54AA25AC542’ 的服务器证书。(证明数据库加密成功)

三、在新环境下创建master数据库的主数据库密钥

USE master
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'master主数据密钥密码';

四、在新环境下恢复证书

CREATE CERTIFICATE MyServerCert
FROM FILE = N'C:\SQLData\KEY\MyServerCert.cer'
WITH PRIVATE KEY
(
	FILE = N'C:\SQLData\KEY\MyServerCert_key.pvk',
	DECRYPTION BY PASSWORD = N'123456789'
);

五、在已经恢复认证的新环境下附加数据库

CREATE DATABASE db_encryption_test ON
(FILENAME = N'C:\SQLData\ db_encryption_test.mdf'),		--数据文件
(FILENAME = N'C:\SQLData\ db_encryption_test _log.ldf')	--日志文件
FOR ATTACH;

附加成功

SQLSERVER SQL TDE数据库异地还原数据库

一、在TDE加密环境下备份数据库

BACKUP DATABASE db_encryption_testTO DISK = N'D:\db_encryption_test.bak'

二、在没有恢复认证的新环境下还原数据库

RESTORE DATABASE db_encryption_test FROM DISK = N'C:\SQLData\db_encryption_test.bak'
WITH RECOVERY,
MOVE N'db_encryption_test' TO N'C:\SQLData\db_encryption_test.mdf',
MOVE N'db_encryption_test _log TO N'C:\SQLData\db_encryption_test _log.ldf';

执行完成以上附加操作时,会报错:

找不到指纹为 ‘0xA7ED737B887F1707B99F4E8D1C43B54AA25AC542’ 的服务器证书。(证明数据库加密成功)

三、在新环境下创建master数据库的主数据库密钥

USE master
CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'master主数据密钥密码';

四、在新环境下恢复证书

CREATE CERTIFICATE MyServerCert
FROM FILE = N'C:\SQLData\KEY\MyServerCert.cer'
WITH PRIVATE KEY
(
	FILE = N'C:\SQLData\KEY\MyServerCert_key.pvk',
	DECRYPTION BY PASSWORD = N'123456789'
);

五、在已经恢复认证的新环境下还原数据库

RESTORE DATABASE db_encryption_test FROM DISK = N'C:\SQLData\db_encryption_test.bak'
WITH RECOVERY,
MOVE N'aa' TO N'C:\SQLData\db_encryption_test.mdf',
MOVE N'aa_log' TO N'C:\SQLData\db_encryption_test _log.ldf';

还原成功
以上操作说明:SQL SERVER的TDE加密针对于数据库文件、日志文件和备份文件进行加密。
当没有备份证书或者忘记证书的密码或者证书丢失都会造成无法异地恢复的问题但是可以本地恢复。所以证书和密码要保存好并且。
当用户拥有master数据库的db_owner权限或者拥有服务器级别的sysadmin权限可以导出证书。
如果数据库在证书备份之后再进行加密,也可以做异地恢复。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

marc2719

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值