http://msdn.microsoft.com/en-us/library/ms179331.aspx
Вы можете создать симметричный ключ для шифрования данных и использовать строку для его создания (с опцией KEY_SOURCE), которая позволит вам воссоздать его позже (этого нет в связанном примере, бит находится в документации) , Это должно быть открыто для доступа к фактическим данным. Это защищено сертификатом, который в свою очередь защищен главным ключом базы данных. НЕ теряйте пароль для вашего главного ключа базы данных. Главный ключ базы данных защищен ключом сервера, поэтому при восстановлении на другом сервере необходимо открыть главный ключ базы данных с паролем и повторно зашифровать с помощью главного ключа службы нового сервера.
Если вы создали симметричный ключ со статической строкой (опция KEY_SOURCE), вы можете воссоздать его с другим сертификатом и главным ключом базы данных и по-прежнему получать доступ к вашим зашифрованным данным.
-- backup service master key tied to computer (used to decrypt database master password,
-- if this is the same on two servers you can move the database between them)
BACKUP SERVICE MASTER KEY TO FILE = 'C:\ServiceMasterKey.smk'
ENCRYPTION BY PASSWORD = 'topsecret'
go
-- create database master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'dbpassword'
go
-- create certificate to use to encrypt symmetric key
CREATE CERTIFICATE TestCertificate WITH SUBJECT = 'Test Certificate',
EXPIRY_DATE = '01/01/2016'
go
-- create symmetric key to encrypt data
CREATE SYMMETRIC KEY TestKey WITH ALGORITHM = TRIPLE_DES,
KEY_SOURCE ='pass_phrase' ENCRYPTION BY CERTIFICATE TestCertificate
go
create table CCInfo (ID int, Plain varchar(16), Encrypted varbinary(128))
go
insert into CCInfo (ID, Plain) values (1, '1234567890ABCDEF')
insert into CCInfo (ID, Plain) values (2, '1234123412341234')
insert into CCInfo (ID, Plain) values (3, '1234567890ABCDEF')
insert into CCInfo (ID, Plain) values (4, '1111111123456789')
go
-- encrypt credit card data
OPEN SYMMETRIC KEY TestKey DECRYPTION BY CERTIFICATE TestCertificate
update CCInfo set Encrypted = EncryptByKey(Key_GUID('TestKey'), Plain)
CLOSE SYMMETRIC KEY TestKey
go
-- check that data is the same
OPEN SYMMETRIC KEY TestKey DECRYPTION BY CERTIFICATE TestCertificate
select ID, Plain, Encrypted, convert(varchar(16), DecryptByKey(Encrypted)) as Decrypted
from CCInfo
CLOSE SYMMETRIC KEY TestKey