我试图研究一个问题,我正在运行读取意图辅助副本在我的sql2012可用性组中,并且似乎无法找到任何东西,但我确实看到了一些有关实例级TDE,但不适用于数据库级证书。sql2012可用性组只读副本和数据库证书使用问题
概述,我有一个包含加密列的表的数据库,该列使用数据库证书进行加密/解密。可用性组的设置以及创建数据库和复制副本似乎都很顺利(三个独立的节点)。但是,当我尝试通过具有读取意向连接的侦听器连接到第二个节点的只读辅助副本时,并使用加密列查询此表时,返回的数据全为NULL。如果我先用密码打开主密钥,然后发出查询,我有正常返回解密的数据,但只持续该会话连接。我应该提到除此之外的其他一切加密主要和辅助副本的问题都可以正常工作。如果我用readWrite查询主数据库,数据检索就好了。请让我知道是否有其他信息您想知道有关此设置。
有谁知道现在是否将查询作为读取意向添加到只读副本,以便每个会话连接必须首先打开主密钥? 或者我设置了一些不正确的东西,我能做些什么来解决这个问题?
打开主密钥命令:
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password';
查询用于查看加密列:
SELECT CAST(DECRYPTBYCERT(CERT_ID('CertName'), ColName) AS VARCHAR(200)) aliasColName
FROM [DBName].[dbo].[tableName]
下面是用于创建在初级的证书的SQL:
USE DBName
DROP CERTIFICATE CertName;
GO
USE DBName
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys
WHERE [name] LIKE '%DatabaseMasterKey%')
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
END
GO
USE DBName
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
GO
USE DBName
CREATE CERTIFICATE CertName FROM FILE = 'C:\Cert.cer'
WITH PRIVATE KEY (FILE = 'C:\CertKey.pvk' ,
DECRYPTION BY PASSWORD = 'password');
GO
CLOSE MASTER KEY
GO
谢谢大家!