sql - 无法创建数据库加密密钥
问题描述
我正在学习数据库加密,实际上我对尝试在我的数据库上启用加密时发生的错误感到困惑。
所以这就是我创建证书的方法
/* Certificat de base de données */
CREATE CERTIFICATE certTestEncryption
WITH SUBJECT='Certificat TestEncryption';
/* Chiffrage de la BDD */
SELECT * FROM sys.certificates
所以我的证书确实存在。
但是当我尝试执行这个语句时:
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”,因为它不存在或者您没有授权。
解决方案
我终于找到了解决方案!我在要加密的数据库上创建了证书。但这不是它的工作方式。
如果您遇到同样的问题,请执行以下操作
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;
而已。您必须在数据库主服务器上创建证书/非对称密钥才能在其他数据库上使用它。
我希望它会帮助其他人!
帮助我找到解决方案的网站链接
推荐阅读
- prolog - 将 Scheme 函数转换为 Prolog
- html - 我的背景图片没有显示在我的网站上
- javascript - 在 PHP 文件中的标签中编写 JavaScript 是否会使其更安全?
- java - 有没有办法让接口中的方法使用 DAO 模式返回泛型 List<> ?
- sql - 如何查询同一个json对象数组中的多个属性?
- javascript - 如何将jQuery数据返回到打字稿中的主类
- python - 如何使用 sklearn 训练算法对数据点进行加权
- facebook - 通过 Facebook GraphAPI 列出相册中的视频
- r - 使用过去的迭代矢量化移动窗口
- php - 当新的 WP_Query 在后循环中时出现错误 502