CREATE COLUMN MASTER KEY (Transact-SQL)CREATE COLUMN MASTER KEY (Transact-SQL)

適用対象: ○SQL Server (2016 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2016) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

データベースに列マスター キー メタデータ オブジェクトを作成します。Creates a column master key metadata object in a database. 列マスター キー メタデータ エントリは、外部キー ストアに格納されたキーを表します。A column master key metadata entry represents a key, stored in an external key store. そのキーにより、Always Encrypted (データベース エンジン) 機能を使用するときの列暗号化キーが保護 (暗号化) されます。The key protects (encrypts) column encryption keys when you're using the Always Encrypted (Database Engine) feature. 複数の列マスター キーを使用してキーのローテーションを定期的に行い、セキュリティを強化できます。Multiple column master keys allow for periodic key rotation to enhance security. SQL Server Management StudioSQL Server Management Studio のオブジェクト エクスプローラーまたは PowerShell を使用して、キー ストアに列マスター キーを作成し、データベースに関連するメタデータ オブジェクトを作成します。Create a column master key in a key store and its related metadata object in the database by using the Object Explorer in SQL Server Management StudioSQL Server Management Studio or PowerShell. 詳しくは、「Always Encrypted のキー管理の概要」をご覧ください。For details, see Overview of Key Management for Always Encrypted.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

重要

(ENCLAVE_COMPUTATIONS を使用した) エンクレーブ対応のキーの作成には、セキュリティで保護されたエンクレーブが設定された Always Encrypted が必要です。Creating enclave-enabled keys (with ENCLAVE_COMPUTATIONS) requires Always Encrypted with secure enclaves.

構文Syntax

CREATE COLUMN MASTER KEY key_name   
    WITH (  
        KEY_STORE_PROVIDER_NAME = 'key_store_provider_name',  
        KEY_PATH = 'key_path'   
        [,ENCLAVE_COMPUTATIONS (SIGNATURE = signature)]
         )   
[;]  

引数Arguments

key_namekey_name
データベース内の列マスター キーの名前。The name of the column master key in the database.

key_store_provider_namekey_store_provider_name
キー ストア プロバイダーの名前を指定します。Specifies the name of a key store provider. キー ストア プロバイダーは、列マスター キーが含まれるキー ストアを保持するクライアント側ソフトウェア コンポーネントです。A key store provider is a client-side software component that holds a key store that has the column master key.

Always Encrypted が有効なクライアント ドライバーでは次のことが行われます。A client driver, enabled with Always Encrypted:

  • キー ストア プロバイダー名が使用されますUses a key store provider name
  • キー ストア プロバイダーのドライバーのレジストリでキー ストア プロバイダーが検索されますSearches for the key store provider in the driver's registry of key store providers

その後、ドライバーでは、プロバイダーを使用して列暗号化キーの暗号化が解除されます。The driver then uses the provider to decrypt column encryption keys. 列暗号化キーは、列マスター キーによって保護されています。The column encryption keys are protected by a column master key. 列マスター キーは、基になるキー ストアに格納されています。The column master key is stored in the underlying key store. その後、列暗号化キーのプレーンテキスト値を使用して、暗号化されたデータベースの列に対応するクエリ パラメーターが暗号化されます。A plaintext value of the column encryption key is then used to encrypt query parameters that correspond to encrypted database columns. または、列暗号化キーで、暗号化された列からのクエリ結果の暗号化が解除されます。Or, the column encryption key decrypts query results from encrypted columns.

Always Encrypted が有効なクライアント ドライバー ライブラリには、一般的なキー ストア用のキー ストア プロバイダーが含まれます。Always Encrypted-enabled client driver libraries include key store providers for popular key stores.

使用可能なプロバイダーのセットは、クライアント ドライバーの種類とバージョンによって異なります。A set of available providers depends on the type and the version of the client driver. 特定のドライバーについては、Always Encrypted の次のドキュメントをご覧ください。See the Always Encrypted documentation for particular drivers:

Always Encrypted と .NET Framework Provider for SQL Server を使用してアプリケーションを開発するDevelop Applications using Always Encrypted with the .NET Framework Provider for SQL Server

次の表では、システム プロバイダーの名前を示します。The following table shows the names of system providers:

キー ストア プロバイダーの名前Key store provider name 基になっているキー ストアUnderlying key store
'MSSQL_CERTIFICATE_STORE''MSSQL_CERTIFICATE_STORE' Windows 証明書ストアWindows Certificate Store
'MSSQL_CSP_PROVIDER''MSSQL_CSP_PROVIDER' Microsoft CryptoAPI をサポートするハードウェア セキュリティ モジュール (HSM) などのストア。A store, such as a hardware security module (HSM), that supports Microsoft CryptoAPI.
'MSSQL_CNG_STORE''MSSQL_CNG_STORE' ハードウェア セキュリティ モジュール (HSM) など、Cryptography API: Next Generation をサポートするストア。A store, such as a hardware security module (HSM), that supports Cryptography API: Next Generation.
'Azure_Key_Vault''Azure_Key_Vault' Azure Key Vault の使用を開始する」をご覧くださいSee Getting Started with Azure Key Vault

Always Encrypted が有効なクライアント ドライバーでは、組み込みのキー ストア プロバイダーがない列マスター キーを格納するカスタム キー ストア プロバイダーを設定することができます。In your Always Encrypted-enabled client driver, you can set up a custom key store provider that stores column master keys for which there's no built-in key store provider. カスタム キー ストア プロバイダーの名前を "MSSQL_" で始めることはできません。これは、MicrosoftMicrosoft キー ストア プロバイダー用に予約されているプレフィックスです。The names of custom key store providers can't start with 'MSSQL_', which is a prefix reserved for MicrosoftMicrosoft key store providers.

key_pathkey_path
列マスター キー ストア内のキーのパス。The path of the key in the column master key store. キーのパスは、データを暗号化および暗号化を解除することが予想される各クライアント アプリケーションに対して有効である必要があります。The key path must be valid for each client application expected to encrypt or decrypt data. データは、参照されている列マスター キーによって (間接的に) 保護されている列に格納されます。The data is stored in a column that's (indirectly) protected by the referenced column master key. クライアント アプリケーションには、キーへのアクセス権が必要です。The client application must have access to the key. キーのパスの形式は、キー ストア プロバイダーに固有です。The format of the key path is specific to the key store provider. 次の一覧では、特定の Microsoft システム キー ストア プロバイダーのキー パスの形式を説明します。The following list describes the format of key paths for particular Microsoft system key store providers.

  • プロバイダー名: MSSQL_CERTIFICATE_STOREProvider name: MSSQL_CERTIFICATE_STORE

    キーのパスの形式: CertificateStoreName/CertificateStoreLocation/CertificateThumbprintKey path format: CertificateStoreName/CertificateStoreLocation/CertificateThumbprint

    各要素の説明は次のとおりです。Where:

    CertificateStoreLocationCertificateStoreLocation
    証明書ストアの場所。現在のユーザーまたはローカル マシンにする必要があります。Certificate store location, which must be Current User or Local Machine. 詳しくは、「Local Machine and Current User Certificate Stores」(ローカル マシンおよび現在のユーザーの証明書ストア) をご覧ください。For more information, see Local Machine and Current User Certificate Stores.

    CertificateStoreCertificateStore
    証明書ストアの名前 (例: "My")。Certificate store name, for example 'My'.

    CertificateThumbprintCertificateThumbprint
    証明書のサムプリント。Certificate thumbprint.

    使用例:Examples:

    N'CurrentUser/My/BBF037EC4A133ADCA89FFAEC16CA5BFA8878FB94'  
    
    N'LocalMachine/My/CA5BFA8878FB94BBF037EC4A133ADCA89FFAEC16'  
    
  • プロバイダー名: MSSQL_CSP_PROVIDERProvider name: MSSQL_CSP_PROVIDER

    キーのパスの形式: ProviderName/KeyIdentifierKey path format: ProviderName/KeyIdentifier

    各要素の説明は次のとおりです。Where:

    ProviderNameProviderName
    列マスター キー ストアの暗号サービス プロバイダー (CSP) の名前。CAPI が実装されています。The name of a Cryptography Service Provider (CSP), which implements CAPI, for the column master key store. キー ストアとして HSM を使用する場合、プロバイダー名は HSM ベンダー提供の CSP の名前にする必要があります。If you use an HSM as a key store, the provider name must be the name of the CSP your HSM vendor supplies. クライアント コンピューターにプロバイダーをインストールする必要があります。The provider must be installed on a client computer.

    KeyIdentifierKeyIdentifier
    キー ストア内のキーの識別子。列マスター キーとして使用されます。Identifier of the key, used as a column master key, in the key store.

    使用例:Examples:

    N'My HSM CSP Provider/AlwaysEncryptedKey1'  
    
  • プロバイダー名: MSSQL_CNG_STOREProvider name: MSSQL_CNG_STORE

    キーのパスの形式: ProviderName/KeyIdentifierKey path format: ProviderName/KeyIdentifier

    各要素の説明は次のとおりです。Where:

    ProviderNameProviderName
    列マスター キー ストアのキー ストレージ プロバイダー (KSP) の名前。Cryptography: Next Generation (CNG) API が実装されています。Name of the Key Storage Provider (KSP), which implements the Cryptography: Next Generation (CNG) API, for the column master key store. キー ストアとして HSM を使用する場合、プロバイダー名は HSM ベンダー提供の KSP の名前にする必要があります。If you use an HSM as a key store, the provider name must be the name of the KSP your HSM vendor supplies. クライアント コンピューターにプロバイダーをインストールする必要があります。The provider must be installed on a client computer.

    KeyIdentifierKeyIdentifier
    キー ストア内のキーの識別子。列マスター キーとして使用されます。Identifier of the key, used as a column master key, in the key store.

    使用例:Examples:

    N'My HSM CNG Provider/AlwaysEncryptedKey1'  
    
  • プロバイダー名: AZURE_KEY_STOREProvider name: AZURE_KEY_STORE

    キーのパスの形式: KeyUrlKey path format: KeyUrl

    各要素の説明は次のとおりです。Where:

    KeyUrlKeyUrl
    Azure Key Vault 内のキーの URLThe URL of the key in Azure Key Vault

ENCLAVE_COMPUTATIONSENCLAVE_COMPUTATIONS
列マスター キーがエンクレーブ対応であることを指定します。Specifies that the column master key is enclave-enabled. 列マスター キーで暗号化されたすべての列暗号化キーを、サーバー側のセキュリティで保護されたエンクレーブと共有し、エンクレーブ内の計算に使用できます。You can share all column encryption keys, encrypted with the column master key, with a server-side secure enclave and use them for computations inside the enclave. 詳細については、「セキュア エンクレーブを使用する Always Encrypted」を参照してください。For more information, see Always Encrypted with secure enclaves.

signaturesignature
"キーのパス" のデジタル署名と列マスター キーでの ENCLAVE_COMPUTATIONS の設定の結果であるバイナリ リテラル。A binary literal that's a result of digitally signing key path and the ENCLAVE_COMPUTATIONS setting with the column master key. 署名には、ENCLAVE_COMPUTATIONS が指定されているかどうかが反映されます。The signature reflects whether ENCLAVE_COMPUTATIONS is specified or not. この署名は、承認されていないユーザーが符号付きの値を変更できないようにします。The signature protects the signed values from being altered by unauthorized users. Always Encrypted 対応のクライアント ドライバーでは、署名が検証されて、署名が無効な場合はアプリケーションにエラーが返されます。An Always Encrypted-enabled client driver verifies the signature and returns an error to the application if the signature is invalid. 署名は、クライアント側のツールを使用して生成されている必要があります。The signature must be generated using client-side tools. 詳細については、「セキュア エンクレーブを使用する Always Encrypted」を参照してください。For more information, see Always Encrypted with secure enclaves.

RemarksRemarks

データベースに列暗号化キー メタデータ エントリを作成する前、および Always Encrypted を使用してデータベース内の列を暗号化する前に、列マスター キー メタデータ エントリを作成します。Create a column master key metadata entry before you create a column encryption key metadata entry in the database and before any column in the database can be encrypted using Always Encrypted. メタデータ内の列マスター キー エントリには、実際の列マスター キーは含まれません。A column master key entry in the metadata doesn't contain the actual column master key. 列マスター キーは、(SQL Server の外部にある) 外部列キー ストアに格納する必要があります。The column master key must be stored in an external column key store (outside of SQL Server). メタデータ内のキー ストア プロバイダー名と列マスター キー パスは、クライアント アプリケーションに対して有効である必要があります。The key store provider name and the column master key path in the metadata must be valid for a client application. クライアント アプリケーションでは、列マスター キーを使用して、列暗号化キーの暗号化を解除する必要があります。The client application needs to use the column master key to decrypt a column encryption key. 列暗号化キーは、列マスター キーで暗号化されています。The column encryption key is encrypted with the column master key. また、クライアント アプリケーションでは、暗号化された列のクエリを実行する必要があります。The client application also needs to query encrypted columns.

アクセス許可Permissions

ALTER ANY COLUMN MASTER KEY 権限が必要です。Requires the ALTER ANY COLUMN MASTER KEY permission.

使用例Examples

A.A. 列マスター キーを作成するCreating a column master key

次の例では、列マスター キーの列マスター キー メタデータ エントリを作成します。The following example creates a column master key metadata entry for a column master key. 列マスター キーは、MSSQL_CERTIFICATE_STORE プロバイダーを使用して列マスター キーにアクセスするクライアント アプリケーションの証明書ストアに格納されます。The column master key is stored in the Certificate Store for client applications that use the MSSQL_CERTIFICATE_STORE provider to access the column master key:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  

列マスター キーの列マスター キー メタデータ エントリを作成します。Create a column master key metadata entry for a column master key. MSSQL_CNG_STORE プロバイダーを使用するクライアント アプリケーションが、列マスター キーにアクセスします。Client applications, which use the MSSQL_CNG_STORE provider, access the column master key:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'MSSQL_CNG_STORE',    
    KEY_PATH = N'My HSM CNG Provider/AlwaysEncryptedKey'  
);  

列マスター キーの列マスター キー メタデータ エントリを作成します。Create a column master key metadata entry for a column master key. 列マスター キーは、AZURE_KEY_VAULT プロバイダーを使用して列マスター キーにアクセスするクライアント アプリケーション用に、Azure キー コンテナーに格納されます。The column master key is stored in the Azure Key Vault, for client applications that use the AZURE_KEY_VAULT provider, to access the column master key.

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',  
    KEY_PATH = N'https://myvault.vault.azure.net:443/keys/  
        MyCMK/4c05f1a41b12488f9cba2ea964b6a700');  

列マスター キーの列マスター キー メタデータ エントリを作成します。Create a column master key metadata entry for a column master key. 列マスター キーは、カスタム列マスター キー ストアに格納されます。The column master key is stored in a custom column master key store:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = 'CUSTOM_KEY_STORE',    
    KEY_PATH = 'https://contoso.vault/sales_db_tce_key'  
);  

B.B. エンクレーブ対応の列マスター キーを作成しますCreating an enclave-enabled column master key

次の例では、エンクレーブ対応の列マスター キーに対する列マスター キー メタデータ エントリを作成します。The following example creates a column master key metadata entry for an enclave-enabled column master key. エンクレーブ対応の列マスター キーは、MSSQL_CERTIFICATE_STORE プロバイダーを使用して列マスター キーにアクセスするクライアント アプリケーションの証明書ストアに格納されます。The enclave-enabled column master key is stored in a Certificate Store, for client applications that use the MSSQL_CERTIFICATE_STORE provider to access the column master key:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
     ENCLAVE_COMPUTATIONS (SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020542419990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
  );  

エンクレーブ対応の列マスター キーに対する列マスター キー メタデータ エントリを作成します。Create a column master key metadata entry for an enclave-enabled column master key. エンクレーブ対応の列マスター キーは、AZURE_KEY_VAULT プロバイダーを使用して列マスター キーにアクセスするクライアント アプリケーション用に、Azure キー コンテナーに格納されます。The enclave-enabled column master key is stored in the Azure Key Vault, for client applications that use the AZURE_KEY_VAULT provider, to access the column master key.

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
    KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',  
    KEY_PATH = N'https://myvault.vault.azure.net:443/keys/MyCMK/4c05f1a41b12488f9cba2ea964b6a700');
    ENCLAVE_COMPUTATIONS (SIGNATURE = 0xA80F5B123F5E092FFBD6014FC2226D792746468C901D9404938E9F5A0972F38DADBC9FCBA94D9E740F3339754991B6CE26543DEB0D094D8A2FFE8B43F0C7061A1FFF65E30FDDF39A1B954F5BA206AAC3260B0657232020582413990261D878318CC38EF4E853970ED69A8D4A306693B8659AAC1C4E4109DE5EB148FD0E1FDBBC32F002C1D8199D313227AD689279D8DEEF91064DF122C19C3767C463723AB663A6F8412AE17E745922C0E3A257EAEF215532588ACCBD440A03C7BC100A38BD0609A119E1EF7C5C6F1B086C68AB8873DBC6487B270340E868F9203661AFF0492CEC436ABF7C4713CE64E38CF66C794B55636BFA55E5B6554AF570CF73F1BE1DBD)
  );

参照See Also