適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Analytics Platform System (PDW)
Microsoft Fabric の SQL データベース
証明書の秘密キーの暗号化に使用するパスワードを変更したり、秘密キーを削除したり、秘密キーが存在しない場合はインポートします。 Service Broker に対して、証明書を使用できるようにするかどうかを変更します。
Syntax
-- Syntax for SQL Server and Azure SQL Database
ALTER CERTIFICATE certificate_name
REMOVE PRIVATE KEY
| WITH PRIVATE KEY ( <private_key_spec> )
| WITH ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
<private_key_spec> ::=
{
{ FILE = 'path_to_private_key' | BINARY = private_key_bits }
[ , DECRYPTION BY PASSWORD = 'current_password' ]
[ , ENCRYPTION BY PASSWORD = 'new_password' ]
}
|
{
[ DECRYPTION BY PASSWORD = 'current_password' ]
[ [ , ] ENCRYPTION BY PASSWORD = 'new_password' ]
}
-- Syntax for Parallel Data Warehouse
ALTER CERTIFICATE certificate_name
{
REMOVE PRIVATE KEY
| WITH PRIVATE KEY (
FILE = '<path_to_private_key>',
DECRYPTION BY PASSWORD = '<key password>' )
}
Arguments
certificate_name
データベースで証明書が認識される一意の名前。
秘密キーの削除
秘密キーがデータベース内で保持されなくなることを指定します。
WITH PRIVATE KEY は、証明書の秘密キーを SQL Server に読み込むように指定します。
ファイル ='path_to_private_key'
秘密キーへの完全なパスを、ファイル名を含めて指定します。 このパラメーターには、ローカル パスまたはネットワーク上の場所を示す UNC パスを指定できます。 ファイルは、SQL Server サービス アカウントのセキュリティ コンテキスト内でアクセスされます。 このオプションを使用する場合は、サービス アカウントに指定したファイルへのアクセス権があることを確認します。
ファイル名のみを指定した場合、ファイルはインスタンスの既定のユーザー データ フォルダーに保存されます。 このフォルダーは、SQL Server DATA フォルダーの場合とそうでない場合があります。 SQL Server Express LocalDB の場合、インスタンスの既定のユーザー データ フォルダーは、インスタンスを作成したアカウントの %USERPROFILE% 環境変数で指定されたパスです。
BINARY ='private_key_bits'
適用対象: SQL Server 2012 (11.x) 以降。
バイナリ定数として指定された秘密キーのビット。 これらのビットは暗号化された形式でもかまいません。 暗号化されている場合は、暗号化解除パスワードを指定する必要があります。 SQL Server では、このパスワードに対してパスワード ポリシー チェックは実行されません。 秘密キーのビットは PVK ファイル形式にする必要があります。
パスワードによる復号化 ='current_password'
秘密キーの暗号化解除に必要なパスワードを指定します。
パスワードによる暗号化 ='new_password'
データベース内の証明書の秘密キーを暗号化するために使用されるパスワードを指定します。
new_password は、SQL Server のインスタンスを実行するコンピューターの Windows のパスワード ポリシー要件を満たす必要があります。 詳細については、「 Password Policy」をご参照ください。
ACTIVE FOR BEGIN_DIALOG = { ON |OFF }
Service Broker メッセージ交換の発信側で証明書を使用できるようにします。
Remarks
秘密キーは、certificate_name で指定する公開キーに対応している必要があります。
ファイル内のパスワードが null パスワードで保護されている場合は、DECRYPTION BY PASSWORD 句を省略できます。
データベースに既に存在する証明書の秘密キーをインポートすると、秘密キーはデータベース マスター キーによって自動的に保護されます。 秘密キーをパスワードで保護するには、ENCRYPTION BY PASSWORD 句を使用します。
REMOVE PRIVATE KEY オプションは、証明書の秘密キーをデータベースから削除します。 証明書を使用して署名を確認するとき、または秘密キーを必要としない Service Broker シナリオでは、秘密キーを削除できます。 対称キーを保護する証明書の秘密キーを削除しないでください。 証明書で検証する必要がある追加のモジュールまたは文字列に署名したり、証明書で暗号化された値を復号化したりするには、秘密キーを復元する必要があります。
秘密キーがデータベース マスター キーを使用して暗号化されている場合は、暗号化解除パスワードを指定する必要はありません。
秘密キーの暗号化に使用するパスワードを変更するには、FILE 句または BINARY 句を指定しないでください。
Important
データベースから秘密キーを削除する前には、必ず秘密キーの保存用コピーを作成してください。 詳細については、「BACKUP CERTIFICATE (Transact-SQL)」と「CERTPRIVATEKEY (Transact-SQL)」を参照してください。
WITH PRIVATE KEY オプションは、包含データベースでは使用できません。
制限事項
作成後に証明書名を変更することはできません。 ALTER CERTIFICATE では、証明書の名前変更はサポートされていません。 別の証明書名を使用する必要がある場合は、新しい証明書を作成し、依存関係を移行する必要があります。
TDE 証明書の回避策
Transparent Data Encryption (TDE) 証明書を別の名前に置き換える必要がある場合:
現在の証明書と秘密キーをバックアップします。
BACKUP CERTIFICATE OldTDECert TO FILE = 'C:\Backup\OldTDECert.cer' WITH PRIVATE KEY ( FILE = 'C:\Backup\OldTDECert.pvk', ENCRYPTION BY PASSWORD = '<password>' );正しい名前の新しい証明書を作成します。
CREATE CERTIFICATE NewTDECert WITH SUBJECT = 'TDE Certificate - Correct Name';TDE で暗号化されたデータベースごとに、暗号化キーを変更します。
USE EncryptedDB; GO ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER CERTIFICATE NewTDECert;すべてのデータベースが移行されたら、古い証明書を削除します。
USE master; GO DROP CERTIFICATE OldTDECert;
Important
TDE を変更する前に、必ず証明書と秘密キーをバックアップしてください。 データベース サーバーとは別の安全な場所にバックアップを格納します。
Permissions
証明書に対する ALTER 権限が必要です。
Examples
A. 証明書の秘密キーを削除する
ALTER CERTIFICATE Shipping04
REMOVE PRIVATE KEY;
GO
B. 秘密キーの暗号化に使用するパスワードを変更する
ALTER CERTIFICATE Shipping11
WITH PRIVATE KEY (DECRYPTION BY PASSWORD = '95hkjdskghFDGGG4%',
ENCRYPTION BY PASSWORD = '34958tosdgfkh##38');
GO
C. データベースに存在する証明書の秘密キーをインポートする
ALTER CERTIFICATE Shipping13
WITH PRIVATE KEY (FILE = 'c:\importedkeys\Shipping13',
DECRYPTION BY PASSWORD = 'GDFLKl8^^GGG4000%');
GO
D. 秘密キーの保護をパスワードからデータベース マスター キーに変更する
ALTER CERTIFICATE Shipping15
WITH PRIVATE KEY (DECRYPTION BY PASSWORD = '95hk000eEnvjkjy#F%');
GO