仅2008版本后的企业版支持。
在master中创建主密钥:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'h****n@123';
建议内部服务器上的SQLServer都建一样的,比较方便;仅防止将备份恢复到外部服务器上。
修改主密钥:
use master;
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'hi****@123';
在master中,添加加密数据库用的证书
Use Master
GO
CREATE CERTIFICATE MyTestDBBackupEncryptCert
WITH SUBJECT = 'MyTestDB Backup Encryption Certificate';
GO
TestCert 是证书名称,可以根据需要随便起名,Subject 是主题,随便写就可以,长度不要超过128字节
应用1:
对数据库进行加密完整备份:
BACKUP DATABASE [test1]
TO DISK = N'C:\Backup\MyTestDB.bak'
WITH
COMPRESSION,
ENCRYPTION
(
ALGORITHM = AES_256,
SERVER CERTIFICATE = MyTestDBBackupEncryptCert
),
STATS = 10
GO
异机恢复时需要先在该实例导出证书:
USE master;
BACKUP CERTIFICATE MyTestDBBackupEncryptCert TO FILE = 'C:\Backup\MyTestDBBackupEncryptCert.bak'
WITH PRIVATE KEY ( FILE = 'C:\Backup\MyTestDBBackupEncryptCertPK.bak', ENCRYPTION BY PASSWORD = 'h***in@123' );
然后创建master主密钥,同上,
之后拷贝之前的证书备份,并导入证书到目标实例
USE master;
CREATE CERTIFICATE MyTestDBBackupEncryptCert25 FROM FILE = 'D:\Backup\MyTestDBBackupEncryptCert.bak'
WITH PRIVATE KEY ( FILE = 'D:\Backup\MyTestDBBackupEncryptCertPK.bak', DECRYPTION BY PASSWORD = 'h***in@123' );
此后即可正常恢复加密的完整备份。
可以不加密差异备份和事务日志备份,毕竟是基于完整备份的。
一些参考文档:
https://www.genban.org/teach/teach-9411.html
http://t.zoukankan.com/xwgli-p-4522502.html
https://docs.microsoft.com/zh-cn/sql/t-sql/statements/drop-master-key-transact-sql?source=recommendations&view=sql-server-ver16