【发布时间】:2015-09-02 18:35:37
【问题描述】:
我有一个数据库从旧的 SQL Server 2008R2 实例移到 SQL Server 2012 AlwaysOn 集群中。数据库中有几个字段使用 SQL Server 内置加密功能(主密钥、证书、对称密钥)进行加密。
我在我的 QA AO 实例上运行了以下命令(与在旧服务器上运行的步骤相同):
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
CREATE CERTIFICATE myCert
WITH SUBJECT = 'password'
CREATE SYMMETRIC KEY myKeyName
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE myCert
此外,我必须运行以下命令才能正确解密数据:
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
当我运行此命令时,我会看到所有数据都已解密:
OPEN SYMMETRIC KEY myKeyName
DECRYPTION BY CERTIFICATE myCert
select TOP 1000 userid, CONVERT(nVARCHAR(255),DECRYPTBYKEY(password)) from users
CLOSE SYMMETRIC KEY myKeyName
到目前为止一切顺利。但是,如果我在生产 AO 集群上运行这些相同的步骤,则此查询:
select TOP 1000 userid, CONVERT(nVARCHAR(255),DECRYPTBYKEY(password)) from users
返回 NULL 作为密码。为了让这更令人抓狂,这个语句(在 QA 环境的上下文中运行)很好地解密了两个数据库中的所有内容:
OPEN SYMMETRIC KEY myKeyName
DECRYPTION BY CERTIFICATE myCert
SELECT TOP 1000
userid,
CONVERT(nVARCHAR(255),DECRYPTBYKEY(password))
FROM users
SELECT TOP 1000
userid,
CONVERT(nVARCHAR(255),DECRYPTBYKEY(password))
FROM PRODUCTIONAO.prod_database.dbo.users
CLOSE SYMMETRIC KEY myKeyName
我不确定为什么这适用于我的 QA 实例,但不适用于我的生产实例。任何帮助将不胜感激!
【问题讨论】:
-
您的 QA 盒子和 Prod 盒子有什么区别?都是在同一个硬件上吗?相同的操作系统?相同的服务包等?
-
它们是不同的AO Cluster,但是每个cluster中的两台机器是相同的。这些机器是虚拟的。
-
为你添加了另一个答案。
标签: sql-server encryption alwayson