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

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Crea un objeto de metadatos de clave maestra de columna en una base de datos.Creates a column master key metadata object in a database. Una entrada de metadatos de la clave maestra de columna representa una clave, almacenada en un almacén de claves externo.A column master key metadata entry represents a key, stored in an external key store. Esta clave protege (cifra) las claves de cifrado de columna cuando se usa Always Encrypted o Always Encrypted con enclaves seguros.The key protects (encrypts) column encryption keys when you're using Always Encrypted or Always Encrypted with secure enclaves. Varias claves maestras de columna permiten la rotación de claves; cambie periódicamente la clave para mejorar la seguridad.Multiple column master keys allow for periodic key rotation to enhance security. Cree una clave maestra de columna en un almacén de claves y su objeto de metadatos relacionado en la base de datos mediante el Explorador de objetos en SQL Server Management StudioSQL Server Management Studio o 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. Para más detalles, vea Información general de administración de claves de Always EncryptedFor details, see Overview of Key Management for Always Encrypted.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

Importante

Si desea crear claves habilitadas para enclaves (con ENCLAVE_COMPUTATIONS) se requiere Always Encrypted con enclaves seguros.Creating enclave-enabled keys (with ENCLAVE_COMPUTATIONS) requires Always Encrypted with secure enclaves.

SintaxisSyntax

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

ArgumentosArguments

key_namekey_name
El nombre de la clave maestra de columna en la base de datos.The name of the column master key in the database.

key_store_provider_namekey_store_provider_name
Especifica el nombre de un proveedor del almacén de claves.Specifies the name of a key store provider. Un proveedor del almacén de claves es un componente de software de cliente que contiene un almacén de claves que tiene la clave maestra de columna.A key store provider is a client-side software component that holds a key store that has the column master key.

Un controlador cliente, habilitado con Always Encrypted:A client driver, enabled with Always Encrypted:

  • Usa un nombre de proveedor de almacenamiento de clavesUses a key store provider name
  • Busca el proveedor de almacenamiento de claves en el registro del controlador de proveedores de almacenamiento de clavesSearches for the key store provider in the driver's registry of key store providers

A continuación, el controlador usa el proveedor para descifrar claves de cifrado de columna.The driver then uses the provider to decrypt column encryption keys. Una clave maestra de columna protege las claves de cifrado de columna.The column encryption keys are protected by a column master key. La clave maestra de columna se almacena en el almacén de claves subyacente.The column master key is stored in the underlying key store. Después se usa un valor de texto simple de la clave de cifrado de columna para cifrar los parámetros de consulta que corresponden a las columnas de la base de datos cifrada.A plaintext value of the column encryption key is then used to encrypt query parameters that correspond to encrypted database columns. O bien, la clave de cifrado de columna descifra los resultados de consulta de las columnas cifradas.Or, the column encryption key decrypts query results from encrypted columns.

Las bibliotecas de controladores cliente compatibles con Always Encrypted incluyen proveedores de almacenamiento de claves para los almacenes de claves populares.Always Encrypted-enabled client driver libraries include key store providers for popular key stores.

Un conjunto de proveedores disponibles depende del tipo y la versión del controlador cliente.A set of available providers depends on the type and the version of the client driver. Consulte información sobre controladores determinados en la documentación de Always Encrypted: Desarrollo de aplicaciones con Always Encrypted.See the Always Encrypted documentation for particular drivers: Develop applications using Always Encrypted.

En la siguiente tabla se muestran los nombres de los proveedores del sistema:The following table shows the names of system providers:

Nombre de proveedor de almacenamiento de clavesKey store provider name Almacén de claves subyacenteUnderlying key store
'MSSQL_CERTIFICATE_STORE''MSSQL_CERTIFICATE_STORE' Almacén de certificados de WindowsWindows Certificate Store
'MSSQL_CSP_PROVIDER''MSSQL_CSP_PROVIDER' Un almacén, como por ejemplo un módulo de seguridad de hardware (HSM), que es compatible con Microsoft CryptoAPI.A store, such as a hardware security module (HSM), that supports Microsoft CryptoAPI.
'MSSQL_CNG_STORE''MSSQL_CNG_STORE' Un almacén, como un módulo de seguridad de hardware (HSM), que es compatible con la API de Cryptography: Next Generation.A store, such as a hardware security module (HSM), that supports Cryptography API: Next Generation.
'AZURE_KEY_VAULT''AZURE_KEY_VAULT' Vea Introducción a Azure Key VaultSee Getting Started with Azure Key Vault
'MSSQL_JAVA_KEYSTORE''MSSQL_JAVA_KEYSTORE' Almacén de claves de Java.Java Key Store.}

En su controlador cliente compatible con Always Encrypted, puede configurar un proveedor de almacenamiento de claves personalizado que almacena claves maestras de columna para las que no hay ningún proveedor de almacenamiento de claves integrado.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. Los nombres de proveedores de almacenamiento de claves personalizados no pueden empezar por 'MSSQL_', ya que es un prefijo reservado para proveedores de almacenamiento de claves de 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
La ruta de acceso de la clave en el almacén de claves maestras de columna.The path of the key in the column master key store. La ruta de acceso de la clave debe ser válida para cada aplicación cliente prevista para cifrar o descifrar datos.The key path must be valid for each client application expected to encrypt or decrypt data. Los datos se almacenan en una columna a la que protege (indirectamente) la clave maestra de columna a la que se hace referencia.The data is stored in a column that's (indirectly) protected by the referenced column master key. La aplicación cliente debe tener acceso a la clave.The client application must have access to the key. El formato de la ruta de acceso de la clave es específico del proveedor de almacenamiento de claves.The format of the key path is specific to the key store provider. En esta lista se describe el formato de las rutas de acceso de claves para determinados proveedores de almacenamiento de claves del sistema de Microsoft.The following list describes the format of key paths for particular Microsoft system key store providers.

  • Nombre del proveedor: MSSQL_CERTIFICATE_STOREProvider name: MSSQL_CERTIFICATE_STORE

    Formato de ruta de acceso de la clave: CertificateStoreName/CertificateStoreLocation/CertificateThumbprintKey path format: CertificateStoreName/CertificateStoreLocation/CertificateThumbprint

    Donde:Where:

    CertificateStoreLocationCertificateStoreLocation
    Ubicación del almacén de certificados, que debe ser Usuario actual o Máquina local.Certificate store location, which must be Current User or Local Machine. Para más información, vea Local Machine and Current User Certificate Stores (Almacenes de certificados Máquina local y Usuario actual).For more information, see Local Machine and Current User Certificate Stores.

    CertificateStoreCertificateStore
    Nombre del almacén de certificados, como por ejemplo, 'My'.Certificate store name, for example 'My'.

    CertificateThumbprintCertificateThumbprint
    Huella digital del certificado.Certificate thumbprint.

    Ejemplos:Examples:

    N'CurrentUser/My/BBF037EC4A133ADCA89FFAEC16CA5BFA8878FB94'  
    
    N'LocalMachine/My/CA5BFA8878FB94BBF037EC4A133ADCA89FFAEC16'  
    
  • Nombre del proveedor: MSSQL_CSP_PROVIDERProvider name: MSSQL_CSP_PROVIDER

    Formato de ruta de acceso de la clave: ProviderName/KeyIdentifierKey path format: ProviderName/KeyIdentifier

    Donde:Where:

    ProviderNameProviderName
    El nombre de un Cryptographic Service Provider (CSP), que implementa CAPI para el almacén de claves maestras de columna.The name of a Cryptography Service Provider (CSP), which implements CAPI, for the column master key store. Si usa un HSM como un almacén de claves, el nombre del proveedor debe ser el nombre del CSP proporcionado por el proveedor de HSM.If you use an HSM as a key store, the provider name must be the name of the CSP your HSM vendor supplies. El proveedor debe estar instalado en un equipo cliente.The provider must be installed on a client computer.

    KeyIdentifierKeyIdentifier
    Identificador de la clave, usado como una clave maestra de columna en el almacén de claves.Identifier of the key, used as a column master key, in the key store.

    Ejemplos:Examples:

    N'My HSM CSP Provider/AlwaysEncryptedKey1'  
    
  • Nombre del proveedor: MSSQL_CNG_STOREProvider name: MSSQL_CNG_STORE

    Formato de ruta de acceso de la clave: ProviderName/KeyIdentifierKey path format: ProviderName/KeyIdentifier

    Donde:Where:

    ProviderNameProviderName
    Nombre del Proveedor de almacenamiento de claves (KSP), que implementa la API de Cryptography: Next Generation (CNG), para el almacén de claves maestras de columna.Name of the Key Storage Provider (KSP), which implements the Cryptography: Next Generation (CNG) API, for the column master key store. Si usa un HSM como almacén de claves, el nombre del proveedor debe ser el nombre del KSP que el proveedor de HSM proporciona.If you use an HSM as a key store, the provider name must be the name of the KSP your HSM vendor supplies. El proveedor debe estar instalado en un equipo cliente.The provider must be installed on a client computer.

    KeyIdentifierKeyIdentifier
    Identificador de la clave, usado como una clave maestra de columna en el almacén de claves.Identifier of the key, used as a column master key, in the key store.

    Ejemplos:Examples:

    N'My HSM CNG Provider/AlwaysEncryptedKey1'  
    
  • Nombre del proveedor: AZURE_KEY_STOREProvider name: AZURE_KEY_STORE

    Formato de ruta de acceso de la clave: KeyUrlKey path format: KeyUrl

    Donde:Where:

    KeyUrlKeyUrl
    La dirección URL de la clave en Azure Key Vault.The URL of the key in Azure Key Vault

ENCLAVE_COMPUTATIONSENCLAVE_COMPUTATIONS
Especifica que la clave maestra de columna está habilitada para el enclave.Specifies that the column master key is enclave-enabled. Puede compartir todas las claves de cifrado de columna, cifradas con la clave maestra de columna, con un enclave seguro del lado servidor, y usarlas para cálculos dentro del enclave.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. Para más información, consulte Always Encrypted con enclaves seguros.For more information, see Always Encrypted with secure enclaves.

signaturesignature
Un literal binario que es un resultado de la firma digital de la ruta de acceso de la clave y el valor ENCLAVE_COMPUTATIONS con la clave maestra de columna.A binary literal that's a result of digitally signing key path and the ENCLAVE_COMPUTATIONS setting with the column master key. La firma refleja si ENCLAVE_COMPUTATIONS se especifica o no.The signature reflects whether ENCLAVE_COMPUTATIONS is specified or not. La firma evita que los usuarios no autorizados modifiquen los valores firmados.The signature protects the signed values from being altered by unauthorized users. Un controlador cliente habilitado para Always Encrypted comprueba la firma y devuelve un error a la aplicación si la firma no es válida.An Always Encrypted-enabled client driver verifies the signature and returns an error to the application if the signature is invalid. La firma debe haberse generada utilizando herramientas de cliente.The signature must be generated using client-side tools. Para más información, consulte Always Encrypted con enclaves seguros.For more information, see Always Encrypted with secure enclaves.

NotasRemarks

Cree primero una entrada de metadatos de la clave maestra de columna para poder crear una entrada de metadatos de la clave de cifrado de columna en la base de datos y para poder cifrar cualquier columna de la base de datos mediante 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. Una entrada de la clave maestra de columna en los metadatos no contiene la clave maestra de columna real.A column master key entry in the metadata doesn't contain the actual column master key. La clave maestra de columna debe almacenarse en un almacén de claves de columna externo (fuera de SQL Server).The column master key must be stored in an external column key store (outside of SQL Server). El nombre del proveedor de almacenamiento de claves y la ruta de acceso de la clave maestra de columna en los metadatos deben ser válidos para una aplicación cliente.The key store provider name and the column master key path in the metadata must be valid for a client application. La aplicación cliente debe usar la clave maestra de columna para descifrar una clave de cifrado de columna.The client application needs to use the column master key to decrypt a column encryption key. La clave de cifrado de columna se cifra con la clave maestra de columna.The column encryption key is encrypted with the column master key. La aplicación cliente también debe consultar columnas de cifrado.The client application also needs to query encrypted columns.

Se recomienda usar herramientas, como SQL Server Management Studio (SSMS) o PowerShell para administrar claves maestras de columna.It is recommended you use tools, such as SQL Server Management Studio (SSMS) or PowerShell to manage column master keys. Estas herramientas generan firmas (si usa Always Encrypted con enclaves seguros) y emiten automáticamente instrucciones de CREATE COLUMN MASTER KEY para crear objetos de metadatos de la clave de cifrado de columna.Such tools generate signatures (if you are using Always Encrypted with secure enclaves) and automatically issue CREATE COLUMN MASTER KEY statements to create column encryption key metadata objects. Consulte Aprovisionamiento de claves de Always Encrypted mediante SQL Server Management Studio y Aprovisionamiento de claves de Always Encrypted con de PowerShell.See Provision Always Encrypted keys using SQL Server Management Studio and Provision Always Encrypted keys using PowerShell.

PermisosPermissions

Necesita el permiso ALTER ANY COLUMN MASTER KEY.Requires the ALTER ANY COLUMN MASTER KEY permission.

EjemplosExamples

A.A. Crear una clave maestra de columnaCreating a column master key

En el siguiente ejemplo se crea una entrada de metadatos de la clave maestra de columna para una clave maestra de columna.The following example creates a column master key metadata entry for a column master key. La clave maestra de columna está almacenada en el almacén de certificados para las aplicaciones cliente que usan el proveedor MSSQL_CERTIFICATE_STORE para obtener acceso a la clave maestra de columna: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'  
   );  

Cree una entrada de metadatos de la clave maestra de columna para una clave maestra de columna.Create a column master key metadata entry for a column master key. Las aplicaciones cliente, que usan el proveedor MSSQL_CNG_STORE, obtienen acceso a la clave maestra de columna: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'  
);  

Cree una entrada de metadatos de la clave maestra de columna para una clave maestra de columna.Create a column master key metadata entry for a column master key. La clave maestra de columna está almacenada en Azure Key Vault para las aplicaciones cliente que usan el proveedor AZURE_KEY_VAULT para obtener acceso a la clave maestra de columna.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');  

Cree una entrada de metadatos de la clave maestra de columna para una clave maestra de columna.Create a column master key metadata entry for a column master key. La clave maestra de columna está almacenada en un almacén de claves maestras de columna personalizado: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. Crear una clave maestra de columna habilitada para enclavesCreating an enclave-enabled column master key

En el siguiente ejemplo se crea una entrada de metadatos de la clave maestra de columna para una clave maestra de columna habilitada para el enclave.The following example creates a column master key metadata entry for an enclave-enabled column master key. La clave maestra de columna habilitada para el enclave está almacenada en el almacén de certificados para las aplicaciones cliente que usan el proveedor MSSQL_CERTIFICATE_STORE para obtener acceso a la clave maestra de columna: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)
  );  

Cree una entrada de metadatos de la clave maestra de columna para una clave maestra de columna habilitada para el enclave.Create a column master key metadata entry for an enclave-enabled column master key. La clave maestra de columna habilitada para el enclave está almacenada en Azure Key Vault para las aplicaciones cliente que usan el proveedor AZURE_KEY_VAULT para obtener acceso a la clave maestra de columna.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)
  );

Consulte tambiénSee Also