2 台のサーバーでの同じ対称キーの作成
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance
このトピックでは、Transact-SQL を使用して SQL Server の 2 台のサーバーに同じ対称キーを作成する方法について説明します。 暗号化テキストの暗号化を解除するには、暗号化に使用したキーが必要です。 1 つのデータベースで暗号化と暗号化解除の両方が行われる場合、データベースに格納されているキーを、権限に応じて暗号化と暗号化解除の両方に使用できます。 一方、暗号化と暗号化解除が別々のデータベースまたは別々のサーバーで行われる場合、一方のデータベースに格納されているキーを他方のデータベースで使用することはできません。
開始する前に
制限事項と制約事項
対称キーを作成するときには、証明書、パスワード、対称キー、非対称キー、PROVIDER のうち少なくとも 1 つを使用して対称キーを暗号化する必要があります。 キーには種類ごとの暗号化を複数指定できます。 つまり、1 つの対称キーを、複数の証明書、パスワード、対称キー、および非対称キーを使用して同時に暗号化できます。
データベースのマスター キーの公開キーではなく、パスワードを使用して対称キーを暗号化する場合は、TRIPLE DES 暗号化アルゴリズムが使用されます。 このため、AES など、強力な暗号化アルゴリズムで作成されたキーでも、キー自身はそれより弱いアルゴリズムで保護されます。
セキュリティ
アクセス許可
データベースに対する ALTER ANY SYMMETRIC KEY 権限が必要です。 AUTHORIZATION を指定する場合は、データベース ユーザーに対する IMPERSONATE 権限、またはアプリケーション ロールに対する ALTER 権限が必要です。 証明書または非対称キーを使用して暗号化する場合は、証明書または非対称キーに対する VIEW DEFINITION 権限が必要です。 対称キーを所有できるのは、Windows ログイン、 SQL Server ログイン、およびアプリケーション ロールだけです。 グループとロールは対称キーを所有できません。
Transact-SQL の使用
2 台のサーバーに同じ対称キーを作成するには
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
[標準] ツール バーの [新しいクエリ] をクリックします。
次の CREATE MASTER KEY、CREATE CERTIFICATE、および CREATE SYMMETRIC KEY ステートメントを実行して、キーを作成します。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd'; GO CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection'; GO CREATE SYMMETRIC KEY [key_DataShare] WITH KEY_SOURCE = 'My key generation bits. This is a shared secret!', ALGORITHM = AES_256, IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret' ENCRYPTION BY CERTIFICATE [cert_keyProtection]; GO
別のサーバー インスタンスに接続し、別のクエリ ウィンドウを開き、前述の SQL ステートメントを実行して、そのサーバーに同じキーを作成します。
最初のサーバーで次の OPEN SYMMETRIC KEY ステートメントと SELECT ステートメントを実行して、キーをテストします。
OPEN SYMMETRIC KEY [key_DataShare] DECRYPTION BY CERTIFICATE cert_keyProtection; GO SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' ) GO -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3
他方のサーバーで、上の SELECT ステートメントの結果を次のコードの
@blob
値として貼り付け、次のコードを実行して、このキーで暗号化テキストの暗号化を解除できることを確認します。OPEN SYMMETRIC KEY [key_DataShare] DECRYPTION BY CERTIFICATE cert_keyProtection; GO DECLARE @blob varbinary(8000); SELECT CONVERT(varchar(8000), decryptbykey(@blob)); GO
両方のサーバーで対称キーを終了します。
CLOSE SYMMETRIC KEY [key_DataShare]; GO
SQL Server 2017 CU2 における暗号化の変更
SQL Server 2016 では、その暗号化処理に SHA1 ハッシュ アルゴリズムが使用されます。 SQL Server 2017 以降は、代わりに SHA2 が使用されます。 つまり、SQL Server 2016 で暗号化されたアイテムを SQL Server 2017 インストールで復号化するには、追加の手順が必要な場合があります。 追加の手順を次に示します。
- SQL Server 2017 が累積的な更新プログラム 2 (CU2) 以上に更新されていることを確認します。
- 重要な詳細情報については、SQL Server 2017 用の累積的な更新プログラム 2 (CU2) に関するページを参照してください。
- CU2 をインストールした後、SQL Server 2017 でトレース フラグ 4631 を有効にします:
DBCC TRACEON(4631, -1);
- トレース フラグ 4631 は SQL Server 2017 の新機能です。 SQL Server 2017 でマスター キー、証明書、または対称キーを作成するには、まずトレース フラグ 4631 をグローバルに
ON
にする必要があります。 これにより、作成したこれらのアイテムが、SQL Server 2016 以前のバージョンと相互運用できるようになります。 このトレース フラグは、SHA2 から派生したキーを使用してデータの再暗号化を行うために、一時的にのみ有効にする必要があります。
- トレース フラグ 4631 は SQL Server 2017 の新機能です。 SQL Server 2017 でマスター キー、証明書、または対称キーを作成するには、まずトレース フラグ 4631 をグローバルに
詳細については、以下を参照してください: