パスワードの証明書で暗号化しました。バックアップの暗号化に使用します。問題は、証明書を開くことができないため(T-SQLステートメントまたはメンテナンスプランで)証明書を使用できないことです。OPEN CERTIFICATE
コマンドがないようです。
私たちの目標は、SQL Serverインスタンスでの証明書の作成/挿入を担当するユーザーを1人だけにすることなので、証明書をパスワードで暗号化したいと思います。他の誰も証明書をエクスポートして暗号化されたバックアップを復元することはできません。
それは可能ですか、または暗号化されたバックアップを保持するには、常にデータベースマスターキーで証明書を暗号化する必要がありますか?
私の知る限り:いいえ、BACKUP
コマンドを使用してパスワードで保護された証明書を使用することはできません。証明書または非対称キーは、データベースマスターキー(DMK)で保護する必要があります。
BACKUP
コマンドステートメントの構文には、証明書または非対称キーのパスワードを指定する手段がありません。いいえ、証明書(または非対称キー)をOPEN
しません。対称キーとデータベースマスターキー(対称キー)のみOPEN
です。
パスワードで保護された証明書を使用しようとすると、次のエラーが発生します(強調が追加されています)。
メッセージ33101、レベル16、状態1、行123
証明書「BackupEncryption」を使用できません。その秘密鍵が存在しないか、存在しないためデータベースマスターキーによって保護されていません。 SQL Serverでは、この操作に使用される証明書の秘密キーに自動的にアクセスする機能が必要です。
通常は最初にOPEN MASTER KEY DECRYPTION BY PASSWORD = 'password';
DMKで何かを行うには、証明書を作成するためにそれを行う必要がありましたが、証明書が作成されたら(そしてはい、実行しましたCLOSE MASTER KEY;
)、BACKUP
ステートメントは、DMKを明示的に開かなくても機能します。証明書の秘密鍵はOPEN
を実行せずに使用できないため、これは奇妙です。秘密鍵は、ものを暗号化するために必ず必要です(秘密鍵を持つ証明書で暗号化されたバックアップを実行しようとする)削除は失敗します)。
SQL Serverの外部でこれを処理する必要があるようです。のように:
これはいくつかの方法で実現できます。
ストアドプロシージャを使用:
BACKUP...
xp_cmdshell
暗号化するSQLエージェントジョブ
BACKUP...
CMDスクリプト:
BACKUP...