web-dev-qa-db-ja.com

SQL Server暗号化パスワードと対称鍵をバックアップする必要がありますか?

一部の機密データでセルレベルの暗号化を使用するようにSQLServerをセットアップしようとしています。 MSDNのこの例 :ごとに簡単に思えます。

  1. 強力なパスワードを使用してマスターキーを作成します。
  2. 証明書を作成します。
  3. 証明書を使用して対称鍵を作成します。
  4. 次のようなEncryptByKey関数を使用して、必要に応じてデータを暗号化します。EncryptByKey(Key_GUID('SensitiveData_Key_01'), MySensitiveDataColumn)
  5. 次のようなDecryptByKey関数を使用して、必要に応じてデータを復号化します。CONVERT(varchar, DecryptByKeyAutoCert(cert_ID('MyCertName'), NULL, MySensitiveDataColumn))

したがって、上記の使用法を前提として、サーバーが停止したとしましょう。完全に新しいWindowsマシン(またはVM)にSQL Serverを再インストールし、バックアップからデータベースを復元する必要があります。 データベースのバックアップを復元した場合、暗号化/復号化は引き続き正しく機能しますか?

そうでない場合、壊滅的な障害が発生した場合にデータを回復できるようにするには、どのデータを保存/バックアップする必要がありますか?

暗号化階層に関するこの他のMSDN記事 の図から判断すると、次の一部またはすべてをバックアップする必要があると思います。

  1. マスターキーのパスワード
  2. マスターキー?
  3. 証明書?
  4. 対称キー?
4
John Bubriski

提案された災害をシミュレートし、テストマシンで回復できることを確認する必要があります。必要なものはすべて、復元プロセス中にすぐに明らかになるはずです。

1
mike42

さらに調査を行った後、この記事を "Cloning" Symmetric Keys で見つけました。

CREATE SYMMETRIC KEYおよびKEY_SOURCEを使用して、対称鍵を生成するようにIDENTITY_VALUE関数に指示できます。 KEY_SOURCEIDENTITY_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にある例でそれを強調してください!

1
John Bubriski