web-dev-qa-db-ja.com

拇印を変更せずにユーザーデータベースのTDE証明書の有効期限を変更する

SQL Server 2014 SP2でユーザーデータベースのTDE認定の有効期限を変更する方法についてインターネットを検索していて、非常に多くの記事を入手しており、それらのほとんどは、異なる有効期限の別の証明書を削除して作成することを提案しています。

私の懸念は、有効期限を変更する前に取られたデータベースのバックアップに関するものです。証明書をドロップして、有効期限の異なる新しい証明書を作成すると、証明書の拇印が変更されるため、変更前に作成されたバックアップを復元できません。

以下はエラーのスクリーンショットです。

TDE Restoration Error

詳細についてこの問題に関する専門家の助言を得ることができるかどうか感謝します。

1

期限切れのSQL Server TDE証明書の更新 の情報を参照すると、TDEで使用するために有効期限が更新された新しい証明書を簡単に作成できることが投稿で説明されています。

USE [master]
GO

CREATE CERTIFICATE NewTDECert
WITH SUBJECT = 'New TDE DEK Certificate',
EXPIRY_DATE = '20181231';
GO 

USE [YourDatabase]
GO
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER CERTIFICATE NewTDECert;
GO

上記のコマンドを実行した後、データベースはTDEに関して新しい証明書を使用します。

ただし、古い証明書が使用されていたときに作成されたバックアップからデータベースを復元する場合に備えて、古い証明書を保持する必要があることが明確に示されています。

その投稿から(私の強調表示):

SQL Serverインスタンスから古い証明書を削除するかどうかは、あなた次第です。 古いキーを使用した古いバックアップを使用してTDE対応データベースを復元する必要がある場合に備えて、常に古い証明書のバックアップを保持する必要があります。

さらに(その投稿から)、

データベースを別のSQL Serverインスタンスに復元するために必要なため、証明書の変更後にTDE証明書をバックアップすることが最も重要です。以下に示すように、新しい証明書に対して証明書のバックアップコマンドを発行できます。

USE [master]
GO

BACKUP CERTIFICATE NewTDECert
TO FILE = '\\SQLP2\temp\NewTDECert.cer'
WITH PRIVATE KEY (FILE = '\\SQLP2\temp\NewTDECert.pvk',
ENCRYPTION BY PASSWORD = 'str0ngPa$$w0rd');
GO 

追加情報は 有効期限が切れるSQL Server暗号化キーの置き換え にあります。 (私の強調表示)。

TDEの証明書をローテーションするには、上記のように新しい証明書を追加してから、ENCRYPTION BY SERVER CERTIFICATE句を指定してコマンドALTER DATABASE ENCRYPTION KEYを実行します。

ALTER DATABASE ENCRYPTION KEY
    ENCRYPTION BY SERVER CERTIFICATE newCertificate;

SQL Serverは、データベースの暗号化キーを新しい証明書で再暗号化し、暗号化が完了すると古い証明書による暗号化を破棄します。また、以前と同様に、データ自体は再暗号化されないため、プロセスはほぼ即座に完了します。

1つの注意:使用するすべての証明書のバックアップコピーを少なくとも1つは常に保持してください。暗号化を使用したデータベースを復元する必要がある場合は、バックアップの作成時に有効だった証明書が必要です。 SQL Serverで作成した直後に証明書のバックアップを作成するようにしてください。バックアップは安全な場所に保管してください。また、証明書のバックアップの暗号化に使用するパスフレーズのコピーを、できればセキュリティのために別の安全な場所に保管してください。これらを永久に保持するか、またはそれらを使用する可能性がある最後のデータベースバックアップが削除されるまで保持します。

1
Scott Hodgin

古いものは、期限切れになっても引き続き機能します。したがって、最善の方法は、新しい証明書を作成し、古い証明書をサーバーに保持して、暗号化を変更する前にサーバーの復元を行うことです。

 CREATE CERTIFICATE NEWCert 
 WITH SUBJECT = 'New Certificate',
 EXPIRY_DATE = '20280101';
 GO

次に、ユーザーデータベースのコンテキストでALTER SYMMETRIC KEYを実行して、新しく作成された証明書をデータベース暗号化キー(DEK)にバインドします。

証明書に複数の変更を加える場合は、変更のたびにログのバックアップを作成する必要があります

 USE [YourDatabase]
 GO
 ALTER DATABASE ENCRYPTION KEY
 ENCRYPTION BY SERVER CERTIFICATE NEWCert ;
 GO

ここで証明書のバインドを確認すると、DEKが新しい証明書にバインドされていることがわかります。

USE [master]
GO
SELECT
DB_NAME(db.database_id) DbName, db.encryption_state
, encryptor_type, cer.name, cer.expiry_date, cer.subject
FROM sys.dm_database_encryption_keys db
JOIN sys.certificates cer 
ON db.encryptor_thumbprint = cer.thumbprint
GO 

次に、証明書をバックアップし、データベースの新しいバックアップを作成します

古いバージョンのデータベースを復元する必要がある可能性があるため、古い証明書は削除しないでください。ただし、DROP CERTIFICATE OldCert;を実行する必要がある場合

古い証明書がサーバーに存在する限り、古いバックアップからデータベースを復元でき、期限が切れていても証明書をセカンダリサーバーにコピーできます。

1
Spörri