Restaurei uma chave mestra e criei um certificado e uma chave simétrica SSMS com:
use AdventureWorks2022
DROP MASTER KEY
RESTORE MASTER KEY
FROM FILE = 'c:\stuff\master_key_backup.mas'
DECRYPTION BY PASSWORD = 'ASDF$E£%^IJYK*&234'
ENCRYPTION BY PASSWORD = '259087M#MyjkFkjhywiyedfgGDFD'
OPEN MASTER KEY DECRYPTION BY PASSWORD = '259087M#MyjkFkjhywiyedfgGDFD';
-- create new certificate and symkey to encode a new column
CREATE CERTIFICATE Certificate_test2 WITH SUBJECT = 'Protect my second data';
CREATE SYMMETRIC KEY SymKey_test2 WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE Certificate_test2;
Em seguida, criptografei uma coluna de uma tabela usando:
open symmetric key SymKey_test2 decryption by certificate Certificate_test2
update AdventureWorks2022.[Person].[EmailAddress]
set email_encrypt = ENCRYPTBYKEY(key_guid('symkey_test2'), emailaddress)
from AdventureWorks2022.[Person].[EmailAddress]
close symmetric key symkey_test2
e testei que funcionava com:
open symmetric key symkey_test2 decryption by certificate certificate_test2
select convert(nvarchar, decryptbykey(email_encrypt)) as 'decrypted email',*
from AdventureWorks2022.[Person].[EmailAddress]
close symmetric key symkey_test2
Coloquei o código que funcionou em um script novo, mas veio com o erro:
Please create a master key in the database or open the master key in the session before performing this operation.
Posso fazê-lo funcionar se incluir a linha: OPEN MASTER KEY DECRYPTION BY PASSWORD = '259087M#MyjkFkjhywiyedfgGDFD';
, mas não quero expor minha senha em um novo script que será chamado em um procedimento armazenado e em chamadas de dados do Excel.
Existe uma maneira de abrir uma chave mestra sem expor a senha? O objetivo final é configurar isso em um procedimento armazenado que é chamado pela conexão de dados do Excel, mas claro, não quero que os usuários finais tenham acesso à senha mestra.