TDE 无法加密数据库

Mar*_*sch 3 sql-server sql-server-2008-r2 transparent-data-encryption

为了加密 SQL 数据库,我运行以下命令:

CREATE CERTIFICATE <certname> ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'
WITH SUBJECT = 'certificate subject', EXPIRY_DATE = '20291031';
go

USE <databasetoencrypt>;
GO

CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE <certname>;
GO
Run Code Online (Sandbox Code Playgroud)

尝试执行CREATE DATABASE ENCRYPTION KEY命令时,我收到此消息,但不知道该怎么做:

无法使用证书“名称”,因为其私钥不存在或不受数据库主密钥的保护。SQL Server 需要能够自动访问用于此操作的证书的私钥。

当我ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'CREATE CERTIFICATE命令中省略期间时,它会起作用。但是,我需要创建一个受密码保护的证书。

你有什么主意吗?!谢谢你。

Han*_*non 7

您不能创建受密码保护的证书,然后使用该证书通过 TDE 加密数据库,因为 SQL Server 将无法打开数据库。

来自微软文档

透明数据加密 (TDE) 必须使用称为数据库加密密钥的对称密钥,该密钥由受主数据库的数据库主密钥保护的证书或存储在 EKM 中的非对称密钥保护。

使用 TDE 加密数据库的步骤:

  1. 创建主密钥

  2. 创建或获取受主密钥保护的证书

  3. 创建数据库加密密钥并通过证书对其进行保护

  4. 设置数据库使用加密

上述示例,取自TDE 上Microsoft Docs 页面

USE master;  
GO  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';  
go  
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';  
go  
USE AdventureWorks2012;  
GO  
CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_128  
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
GO  
ALTER DATABASE AdventureWorks2012  
SET ENCRYPTION ON;  
GO  
Run Code Online (Sandbox Code Playgroud)

该页面还说:

TDE 证书必须由数据库主密钥加密才能被以下语句接受。如果它们仅通过密码加密,则语句将拒绝它们作为加密器。

    CREATE DATABASE ENCRYPTION KEY
    ALTER DATABASE ENCRYPTION KEY
    DROP DATABASE ENCRYPTION KEY
Run Code Online (Sandbox Code Playgroud)

将证书在 TDE 使用后更改为受密码保护将导致数据库在重新启动后无法访问。