一部の機密データでセルレベルの暗号化を使用するようにSQLServerをセットアップしようとしています。 MSDNのこの例 :ごとに簡単に思えます。
EncryptByKey
関数を使用して、必要に応じてデータを暗号化します。EncryptByKey(Key_GUID('SensitiveData_Key_01'), MySensitiveDataColumn)
DecryptByKey
関数を使用して、必要に応じてデータを復号化します。CONVERT(varchar, DecryptByKeyAutoCert(cert_ID('MyCertName'), NULL, MySensitiveDataColumn))
したがって、上記の使用法を前提として、サーバーが停止したとしましょう。完全に新しいWindowsマシン(またはVM)にSQL Serverを再インストールし、バックアップからデータベースを復元する必要があります。 データベースのバックアップを復元した場合、暗号化/復号化は引き続き正しく機能しますか?
そうでない場合、壊滅的な障害が発生した場合にデータを回復できるようにするには、どのデータを保存/バックアップする必要がありますか?
暗号化階層に関するこの他のMSDN記事 の図から判断すると、次の一部またはすべてをバックアップする必要があると思います。
提案された災害をシミュレートし、テストマシンで回復できることを確認する必要があります。必要なものはすべて、復元プロセス中にすぐに明らかになるはずです。
さらに調査を行った後、この記事を "Cloning" Symmetric Keys で見つけました。
CREATE SYMMETRIC KEY
およびKEY_SOURCE
を使用して、対称鍵を生成するようにIDENTITY_VALUE
関数に指示できます。 KEY_SOURCE
とIDENTITY_VALUE
に同じ値を渡すことで、後で同じキーを再生成できます。
簡単な例を次に示します。
CREATE CERTIFICATE CreditCards
WITH SUBJECT = 'Customer Credit Card Numbers';
GO
CREATE SYMMETRIC KEY CreditCards_Key_01
WITH KEY_SOURCE = 'A pass phrase from which to derive the key.',
IDENTITY_VALUE = 'An identity phrase from which to generate a GUID for tagging data that is encrypted with a temporary key',
ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE CreditCards;
GO
OPEN SYMMETRIC KEY CreditCards_Key_01
DECRYPTION BY CERTIFICATE CreditCards
UPDATE MyTable
SET EncryptedCreditCardNumber = EncryptByKey(Key_GUID('CreditCards_Key_01'), CreditCardNumber);
GO
彼の記事からマイケル・コールスを引用するには
「私の好みでは、デフォルトでIDENTITY_VALUEオプションとKEY_SOURCEオプションを要求する方が理にかなっています。」
なぜそうしなかったのかわからない、または少なくとも、MSDNにある例でそれを強調してください!