У меня есть база данных, которая была перенесена из старого экземпляра SQL Server 2008R2 и в кластер AlwaysOn SQL Server 2012. В базе данных есть несколько полей, которые зашифровываются с использованием встроенных функций шифрования 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, но не на моем экземпляре. Любая помощь будет принята с благодарностью!