web-dev-qa-db-ja.com

パスワードで暗号化された証明書を使用して、暗号化されたバックアップを作成することは可能ですか?

パスワードの証明書で暗号化しました。バックアップの暗号化に使用します。問題は、証明書を開くことができないため(T-SQLステートメントまたはメンテナンスプランで)証明書を使用できないことです。OPEN CERTIFICATEコマンドがないようです。

私たちの目標は、SQL Serverインスタンスでの証明書の作成/挿入を担当するユーザーを1人だけにすることなので、証明書をパスワードで暗号化したいと思います。他の誰も証明書をエクスポートして暗号化されたバックアップを復元することはできません。

それは可能ですか、または暗号化されたバックアップを保持するには、常にデータベースマスターキーで証明書を暗号化する必要がありますか?

5
gotqn

私の知る限り:いいえ、BACKUPコマンドを使用してパスワードで保護された証明書を使用することはできません。証明書または非対称キーは、データベースマスターキー(DMK)で保護する必要があります。

  1. BACKUPコマンドステートメントの構文には、証明書または非対称キーのパスワードを指定する手段がありません。いいえ、証明書(または非対称キー)をOPENしません。対称キーとデータベースマスターキー(対称キー)のみOPENです。

  2. パスワードで保護された証明書を使用しようとすると、次のエラーが発生します(強調が追加されています)。

    メッセージ33101、レベル16、状態1、行123
    証明書「BackupEncryption」を使用できません。その秘密鍵が存在しないか、存在しないためデータベースマスターキーによって保護されていません。 SQL Serverでは、この操作に使用される証明書の秘密キーに自動的にアクセスする機能が必要です。

通常は最初にOPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'; DMKで何かを行うには、証明書を作成するためにそれを行う必要がありましたが、証明書が作成されたら(そしてはい、実行しましたCLOSE MASTER KEY;)、BACKUPステートメントは、DMKを明示的に開かなくても機能します。証明書の秘密鍵はOPENを実行せずに使用できないため、これは奇妙です。秘密鍵は、ものを暗号化するために必ず必要です(秘密鍵を持つ証明書で暗号化されたバックアップを実行しようとする)削除は失敗します)。

SQL Serverの外部でこれを処理する必要があるようです。のように:

  1. バックアップを実行する
  2. 。bakファイルを暗号化する

これはいくつかの方法で実現できます。

  1. ストアドプロシージャを使用:

    1. BACKUP...
    2. xp_cmdshell暗号化する
  2. SQLエージェントジョブ

    1. T-SQLステップ実行BACKUP...
    2. OSコマンド[〜#〜]または[〜#〜]PowerShellステップで暗号化
  3. CMDスクリプト:

    1. SQLCMD.EXE実行中BACKUP...
    2. 暗号化する
5
Solomon Rutzky