SQL 暗号化機能への SQL Server コネクタの使用
適用対象: SQL Server
Azure Key Vault の保護下にある非対称キーを使用した、一般的な SQL の暗号化アクティビティは次の 3 つの領域に分けられます。
Azure Key Vault からの非対称キーを使用した透過的データ暗号化
Key Vault からの非対称キーを使用したバックアップの暗号化
Key Vault からの非対称キーを使用した列レベルの暗号化
このトピックの手順に着手する前に、「 Azure Key Vault を使用した拡張キー管理のセットアップ手順」のトピックのパート I からパート IV を実行してください。
Note
1.0.0.440 以前のバージョンは置き換えられ、実稼働環境ではサポートされなくなりました。 Microsoft ダウンロード センターにアクセスし、[SQL Server コネクタのメンテナンスとトラブルシューティング] ページの "SQL Server コネクタのアップグレード" に示されている手順を使用して、バージョン 1.0.1.0 以降にアップグレードしてください。
Note
Microsoft Entra ID は以前に Azure Active Directory(Azure AD)として知られていました。
Azure Key Vault からの非対称キーを使用した透過的データ暗号化
「Azure Key Vault を使用した拡張キー管理のセットアップ手順」のトピックのパート I からパート IV を終えたら、Azure Key Vault キーを使用し、データベースの暗号化キーを TDE で暗号化します。 PowerShell を使用したキーのローテーションの詳細については、「PowerShell を使用して Transparent Data Encryption (TDE) 保護機能をローテーションする」を参照してください。
重要
ロールオーバー後に以前のバージョンのキーは削除しないでください。 キーがロール オーバーされると、古いデータベース バックアップ、バックアップされたログファイル、トランザクション ログ ファイルなど、一部のデータは引き続き以前のキーで暗号化されます。
資格情報とログインが必要となります。また、データベースに格納されるデータとログを暗号化するためのデータベース暗号化キーを作成する必要があります。 データベースを暗号化するには、データベースに対する CONTROL 権限が必要です。 次の図は、Azure Key Vault 使用下における暗号化キーの階層を示したものです。
データベース エンジンが TDE に使用する SQL Server の資格情報を作成する
データベース エンジンは、データベースの読み込み時に、Microsoft Entra アプリケーション資格情報を使用して Key Vault にアクセスします。 手順 1 で説明されているように、データベース エンジンに対して別の クライアント ID と シークレット を作成し、付与される Key Vault アクセス許可を制限することをお勧めします。
次の Transact-SQL スクリプトを以下のように変更します。
IDENTITY
引数 (ContosoDevKeyVault
) を編集し、Azure Key Vault を参照するようにします。- グローバル Azure を使用している場合は、
IDENTITY
引数をパート II で使用した実際の Azure Key Vault の名前に置き換えます。 - プライベート Azure クラウド (Azure Government、21Vianet が運営する Azure、Azure Germany など) を使用している場合は、
IDENTITY
引数をパート II の手順 3 で返された Vault URI に置き換えます。 Vault URI に "https://" は含めないでください。
- グローバル Azure を使用している場合は、
SECRET
引数の最初の部分を、手順 1 の Microsoft Entra アプリケーション クライアント ID に置き換えます。 この例のクライアント ID はEF5C8E094D2A4A769998D93440D8115D
です。重要
クライアント IDのハイフンは削除してください。
SECRET
引数の 2 番目の部分を、パート I のクライアント シークレットを使って完了します。この例で、パート 1 のクライアント シークレットはReplaceWithAADClientSecret
です。完成した SECRET 引数の文字列は、ハイフンを含まない文字と数字の長いシーケンスになります。
USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
データベース エンジンが TDE に使用する SQL Server ログインを作成する
SQL Server ログインを作成し、手順 1. で作成した資格情報を追加します。 この例の Transact-SQL では、既にインポートされているキーと同じものを使用しています。
USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it loads a database -- encrypted by TDE. CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault ALTER LOGIN TDE_Login ADD CREDENTIAL Azure_EKM_TDE_cred ; GO
データベース暗号化キー (DEK) を作成する
DEK は、データベース インスタンス内のデータとログ ファイルを暗号化するキーです。このキーがさらに、Azure Key Vault の非対称キーで暗号化されます。 DEK は、SQL Server でサポートされている任意のアルゴリズムまたはキーの長さを使用して作成できます。
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GO
TDE を有効にする
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GO
Management Studio を使い、オブジェクト エクスプローラーでデータベースに接続して、TDE が有効になっていることを確認します。 データベースを右クリックし、 [タスク]をポイントして、 [データベース暗号化の管理]をクリックします。
[データベース暗号化の管理] ダイアログ ボックスで、TDE が有効になっていることを確認し、DEK の暗号化に使用されている非対称キーを確認します。
代わりに、次の Transact-SQL スクリプトを実行してもかまいません。 暗号化の状態が "3" である場合、データベースが暗号化済みであることを示します。
USE MASTER SELECT * FROM sys.asymmetric_keys -- Check which databases are encrypted using TDE SELECT d.name, dek.encryption_state FROM sys.dm_database_encryption_keys AS dek JOIN sys.databases AS d ON dek.database_id = d.database_id;
Note
いずれかのデータベースで TDE が有効になっている場合は常に、
tempdb
データベースが自動的に暗号化されます。
Key Vault からの非対称キーを使用したバックアップの暗号化
暗号化されたバックアップは、SQL Server 2014 (12.x) 以降でサポートされています。 次の例では、資格情報コンテナー内の非対称キーで保護したデータ暗号化キーによって暗号化したバックアップを作成し、復元します。
データベース エンジンは、データベースの読み込み時に、Microsoft Entra アプリケーション資格情報を使用して Key Vault にアクセスします。 手順 1 で説明されているように、データベース エンジンに対して別の クライアント ID と シークレット を作成し、付与される Key Vault アクセス許可を制限することをお勧めします。
データベース エンジンがバックアップの暗号化に使用する SQL Server の資格情報を作成する
次の Transact-SQL スクリプトを以下のように変更します。
IDENTITY
引数 (ContosoDevKeyVault
) を編集し、Azure Key Vault を参照するようにします。- グローバル Azure を使用している場合は、
IDENTITY
引数をパート II で使用した実際の Azure Key Vault の名前に置き換えます。 - プライベート Azure クラウド (Azure Government、21Vianet が運営する Microsoft Azure、Azure Germany など) を使用している場合は、
IDENTITY
引数をパート II の手順 3 で返された Vault URI に置き換えます。 Vault URI に "https://" は含めないでください。
- グローバル Azure を使用している場合は、
SECRET
引数の最初の部分を、手順 1 の Microsoft Entra アプリケーション クライアント ID に置き換えます。 この例のクライアント ID はEF5C8E094D2A4A769998D93440D8115D
です。重要
クライアント IDのハイフンは削除してください。
SECRET
引数の 2 番目の部分を、パート I で使用した クライアント シークレット に置き換えます。この例のパート I で使用した クライアント シークレット はReplace-With-AAD-Client-Secret
です。 完成したSECRET
引数は、 ハイフンを含まないアルファベットと数字とから成る長い文字列になります。USE master; CREATE CREDENTIAL Azure_EKM_Backup_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
データベース エンジンがバックアップ暗号化に使用する SQL Server ログインを作成する
バックアップを暗号化するためにデータベース エンジンで使用される SQL Server ログインを作成し、それに手順 1 の資格情報を追加します。 この例の Transact-SQL では、既にインポートされているキーと同じものを使用しています。
重要
TDE (上の例) または列レベルの暗号化 (次の例) で既に使用している非対称キーと同じものをバックアップ暗号化に使用することはできません。
この例では、Key Vault に格納されている
CONTOSO_KEY_BACKUP
非対称キーを使用します。このキーは、マスター データベースに対してパート IV の手順 5. の説明に従って作成するか、あらかじめインポートしておくことができます。USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it is encrypting the backup. CREATE LOGIN Backup_Login FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP; GO -- Alter the Encrypted Backup Login to add the credential for use by -- the Database Engine to access the key vault ALTER LOGIN Backup_Login ADD CREDENTIAL Azure_EKM_Backup_cred ; GO
データベースのバックアップ
Key Vault に保存されている非対称鍵で暗号化を指定し、データベースをバックアップします。
下の例では、データベースが既に TDE で暗号化されていて、非対称キー
CONTOSO_KEY_BACKUP
が TDE の非対称キーとは異なる場合、バックアップは TDE 非対称キーとCONTOSO_KEY_BACKUP
の両方で暗号化されることに注意してください。 バックアップの暗号化を解除するには、両方のキーがターゲットの SQL Server インスタンスで必要になります。USE master; BACKUP DATABASE [DATABASE_TO_BACKUP] TO DISK = N'[PATH TO BACKUP FILE]' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]); GO
データベースの復元
TDE で暗号化されたデータベースのバックアップを復元するには、ターゲットの SQL Server インスタンスは最初に、暗号化に使用された非対称のキー コンテナー キーのコピーが必要です。 次の方法でこれを実現します。
TDE に使用された元の非対称キーが Key Vault にない場合は、Key Vault キーのバックアップを復元するか、またはローカルの HSM からキーを再インポートします。 重要: キーの拇印を、データベースのバックアップに記録された拇印と照合させるには、キーの名前が元の名前と同じ Key Vault キー名でなければいけません。
手順 1 と 2 をターゲットの SQL Server インスタンスに適用します。
ターゲットの SQL Server インスタンスが、バックアップの暗号化に使用された非対称キーにアクセス可能になったら、サーバー上のデータベースを復元します。
復元のサンプル コードは次のとおりです。
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GO
バックアップ オプションの詳細については、「 BACKUP (Transact-SQL)」を参照してください。
Key Vault からの非対称キーを使用した列レベルの暗号化
次の例では、資格情報コンテナー内の非対称キーによって保護された対称キーを作成します。 その後、その対称キーを使用してデータベース内のデータを暗号化します。
重要
非対称キーをバックアップ暗号化で既に使用した場合は、同じものを列レベルの暗号化に使用することはできません。
この例では、「 CONTOSO_KEY_COLUMNS
Azure Key Vault を使用する拡張キー管理のセットアップ手順 」の手順 3. (セクション 3) の説明に従って以前にインポートまたは作成した、資格情報コンテナーに格納されている非対称キーを使用します。 この非対称キーを ContosoDatabase
データベースで使用するには、 CREATE ASYMMETRIC KEY
ステートメントをもう一度実行して、 ContosoDatabase
データベースにキーへの参照を提供する必要があります。
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',
CREATION_DISPOSITION = OPEN_EXISTING;
-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
DECLARE @DATA VARBINARY(MAX);
--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY
(
KEY_GUID('DATA_ENCRYPTION_KEY'),
CONVERT(VARBINARY,'Plain text data to encrypt')
);
-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));
--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;
参照
Azure Key Vault を使用した拡張キー管理のセットアップ手順
Azure Key Vault を使用した拡張キー管理
EKM provider enabled サーバー構成オプション
SQL Server コネクタのメンテナンスとトラブルシューティング