首页 > 解决方案 > 无法创建数据库加密密钥

问题描述

我正在学习数据库加密,实际上我对尝试在我的数据库上启用加密时发生的错误感到困惑。

所以这就是我创建证书的方法

    /* Certificat de base de données */

    CREATE CERTIFICATE certTestEncryption
    WITH SUBJECT='Certificat TestEncryption';

    /* Chiffrage de la BDD */

    SELECT * FROM sys.certificates

这就是我得到的: 我的数据库“testEncryption”的证书

所以我的证书确实存在。

但是当我尝试执行这个语句时:

CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY SERVER CERTIFICATE certTestEncryption;

它根本不起作用,并给我以下错误消息:

找不到证书“certTestEncryption”,因为它不存在或您没有授权。

所以我试试这个

EXECUTE AS LOGIN = 'sa';
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY SERVER CERTIFICATE certTestEncryption;

但它仍然给我与之前引起的相同错误。

我也尝试过通过非对称密钥加密:

EXECUTE AS LOGIN = 'sa';
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY asymKey;

它仍然给我这个错误:无法找到非对称密钥“asymmetricKey”,因为它不存在或者您没有授权。

即使非对称密钥实际存在: 通过非对称密钥加密数据库

标签: sqlsql-server

解决方案


我终于找到了解决方案!我在要加密的数据库上创建了证书。但这不是它的工作方式。

如果您遇到同样的问题,请执行以下操作

USE MASTER;
CREATE MASTER KEY
ENCRYPTION BY PASSWORD='password';

数据库主密钥由服务主密钥加密。数据库主密钥加密指定数据库中的每个密钥和证书(目前是“主”数据库)。

然后你留在主数据库并执行以下语句

CREATE CERTIFICATE certName
[Encryption by password='password']
WITH SUBJECT='your Subject'

证书被创建到主数据库中。默认情况下,证书使用数据库主主密钥加密(请参阅前面的 > 段落),但您可以使用“密码加密...”来更改它

最后,您转到无法激活加密的数据库(请务必备份证书和主数据库的密钥)

USE nameOfYourDB;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM=[AES_128, AES_192, AES_258...]
ENCRYPTION BY SERVER [CERTIFICATE nameOfYourCertificate|ASYMMETRIC KEY nameOfAsymmetricKey];

ALTER DATABASE nameOfYourDB
SET ENCRYPTION ON;

而已。您必须在数据库主服务器上创建证书/非对称密钥才能在其他数据库上使用它。

我希望它会帮助其他人!

帮助我找到解决方案的网站链接


推荐阅读