Compartir vía


CREATE CREDENTIAL (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Crea una credencial de nivel de servidor. Una credencial es un registro que contiene la información de autenticación necesaria para conectarse a un recurso fuera de SQL Server. La mayoría de las credenciales incluyen un usuario y una contraseña de Windows. Por ejemplo, guardar una copia de seguridad de base de datos en una ubicación cualquiera podría requerir que SQL Server proporcione credenciales especiales para tener acceso a esa ubicación. Para más información, vea Credenciales (motor de base de datos).

Nota

Para establecer la credencial a nivel de la base de datos, use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Cree una credencial de nivel de servidor con CREATE CREDENTIAL cuando necesite usar la misma credencial para varias bases de datos en el servidor.

  • Cree una credencial con ámbito de base de datos con CREATE DATABASE SCOPED CREDENTIAL para que la base de datos sea más portátil. Cuando una base de datos se mueve a un nuevo servidor, la credencial de ámbito de la base de datos se moverá con ella.
  • Use credenciales con ámbito de base de datos en SQL Database.
  • Use credenciales con ámbito de base de datos con PolyBase y Azure SQL Instancia administrada características de virtualización de datos.

Convenciones de sintaxis de Transact-SQL

Sintaxis

CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
        [ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]

Argumentos

credential_name

Especifica el nombre de la credencial que se va a crear. credential_name no puede empezar con el signo de número (#). Las credenciales del sistema comienzan por ##.

Importante

Cuando se usa una Firma de acceso compartido (SAS), este nombre debe coincidir con la ruta de acceso de contenedor, comenzar por https y no contener una barra diagonal. Vea el ejemplo D.

Cuando se usa para la copia de seguridad o restauración mediante plataformas de datos externas, como Azure Blob Storage o plataformas compatibles con S3, en la tabla siguiente se proporcionan rutas de acceso comunes:

Origen de datos externo Ruta de acceso de ubicación Ejemplo
Azure Blob Storage (V2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> ejemplo D
Azure Key Vault <keyvaultname>.vault.azure.net ejemplo de H
Módulo de seguridad de hardware administrado (HSM) de Azure Key Vault <akv-name>.managedhsm.azure.net ejemplo de H
Almacenamiento de objetos compatible con S3 - Almacenamiento compatible con S3: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
o s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
ejemplo de F

IDENTITY ='identity_name'

Especifica el nombre de la cuenta que se utilizará para conectarse fuera del servidor. Cuando la credencial se usa para tener acceso a Azure Key Vault, IDENTITY es el nombre del almacén de claves. Vea el ejemplo C más adelante. Cuando la credencial usa una Firma de acceso compartido (SAS), IDENTITY es SHARED ACCESS SIGNATURE. Vea el ejemplo D de abajo.

Importante

Azure SQL Database solo admite las identidades de Azure Key Vault y de Firma de acceso compartido. No se admiten las identidades de usuario de Windows.

SECRET ='secret'

Especifica el secreto necesario para la autenticación de salida.

Cuando se usa la credencial para acceder a Azure Key Vault, el argumento SECRET< Vea el ejemplo C más adelante. Cuando la credencial usa una Firma de acceso compartido (SAS), SECRET es el token de la Firma de acceso compartido. Vea el ejemplo D de abajo. Para información sobre cómo crear una directiva de acceso almacenada y una firma de acceso compartido en un contenedor de Azure, consulte Lección 1: Creación de una directiva de acceso almacenada y una firma de acceso compartido en un contenedor de Azure.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name

Especifica el nombre de un Proveedor de administración de claves de la empresa (EKM). Para más información sobre la administración de claves, consulte Administración extensible de claves (EKM).

Observaciones

Si IDENTITY es un usuario de Windows, el secreto puede ser la contraseña. El secreto se cifra usando la clave maestra de servicio. Si se vuelve a generar la clave maestra de servicio, el secreto se vuelve a cifrar con la nueva clave maestra de servicio.

Una vez creada una credencial, puede asignarla a un inicio de sesión de SQL Server por medio de CREATE LOGIN o ALTER LOGIN. Un inicio de sesión de SQL Server solamente se puede asignar a una credencial, pero una credencial puede asignarse a varios inicios de sesión de SQL Server. Para más información, vea Credenciales (motor de base de datos). Una credencial de nivel de servidor solo se puede asignar a un inicio de sesión, no a un usuario de base de datos.

Encontrará más información sobre las credenciales en la vista de catálogo sys.credentials.

Si no hay ninguna credencial de inicio de sesión asignada para el proveedor, se usa la credencial asignada a la cuenta de servicio de SQL Server.

Un inicio de sesión puede tener asignadas varias credenciales, siempre y cuando se utilicen con proveedores distintos. Solo debe haber una credencial asignada por cada proveedor y por cada inicio de sesión. La misma credencial puede estar asignada a otros inicios de sesión.

Permisos

Requiere el permiso ALTER ANY CREDENTIAL.

Ejemplos

A. Crear una credencial de Identidad de Windows

En el ejemplo siguiente se crea la credencial denominada AlterEgo. La credencial contiene el usuario de Windows Mary5 y una contraseña.

CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';
GO

B. Crear una credencial de EKM

En el ejemplo siguiente se utiliza una cuenta creada previamente denominada User1OnEKM en un módulo EKM a través de las herramientas de administración de EKM, con un tipo de cuenta y una contraseña básicos. La cuenta sysadmin del servidor crea una credencial que se usa para conectar la cuenta de EKM y la asigna a la cuenta User1 de SQL Server:

CREATE CREDENTIAL CredentialForEKM
    WITH IDENTITY='User1OnEKM', SECRET='<EnterStrongPasswordHere>'
    FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider;
GO

/* Modify the login to assign the cryptographic provider credential */
ALTER LOGIN User1
ADD CREDENTIAL CredentialForEKM;

C. Crear una credencial de EKM con Azure Key Vault

En el siguiente ejemplo se crea una credencial de SQL Server para que el Motor de base de datos la use al tener acceso a Azure Key Vault con el Conector de SQL Server para Microsoft Azure Key Vault. Para ver un ejemplo completo sobre cómo usar el Conector de SQL Server, consulte Administración extensible de claves con Azure Key Vault (SQL Server).

Importante

El argumento IDENTITY de CREATE CREDENTIAL requiere el nombre del Almacén de claves. El argumento SECRET de CREATE CREDENTIAL requiere que los valores de <Client ID> (sin guiones) y <Secret> se pasen juntos, sin un espacio entre ellos. Las identidades administradas se admiten con EKM y las credenciales se pueden usar con identidades administradas. Para obtener un ejemplo, vea ejemplo de H.

En el ejemplo siguiente, el identificador de cliente (00001111-aaaa-2222-bbbb-3333cccc4444) se quita de los guiones y se escribe como la cadena 11111111222233334444555555555555 y el secreto se representa mediante la cadena SECRET_DBEngine.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = '11111111222233334444555555555555SECRET_DBEngine'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;

En el siguiente ejemplo se crea la misma credencial usando variables para las cadenas Client ID y Secret, que luego se concatenan entre sí para formar el argumento SECRET. La función REPLACE se usa para quitar los guiones del identificador de cliente.

DECLARE @AuthClientId uniqueidentifier = '11111111-AAAA-BBBB-2222-CCCCCCCCCCCC';
DECLARE @AuthClientSecret varchar(200) = 'SECRET_DBEngine';
DECLARE @pwd varchar(max) = REPLACE(CONVERT(varchar(36), @AuthClientId) , '-', '') + @AuthClientSecret;

EXEC ('CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = ''ContosoKeyVault'', SECRET = ''' + @PWD + '''
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;');

D. Creación de una credencial mediante un token de SAS

Se aplica a: SQL Server 2014 (12.x) hasta la versión actual y Azure SQL Managed Instance.

En el siguiente ejemplo se crea una credencial de firma de acceso compartido con un token de SAS. Para obtener un tutorial sobre cómo crear una directiva de acceso almacenada y una firma de acceso compartido en un contenedor de Azure y, luego, crear una credencial usando la firma de acceso compartido, vea Tutorial: Uso de Microsoft Azure Blob Storage con bases de datos de SQL Server.

Importante

El argumento CREDENCIAL NAME requiere que el nombre coincida con la ruta de acceso del contenedor, comience por https y no contenga una barra diagonal. El argumento IDENTITY requiere el nombre, SHARED ACCESS SIGNATURE. El argumento SECRET requiere el token de firma de acceso compartido.

El secreto SHARED ACCESS SIGNATURE no debe tener el signo ? inicial.

USE master
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a trailing forward slash.
    WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.
    , SECRET = 'sharedaccesssignature' -- this is the shared access signature token
GO

E. Creación de una credencial para la identidad administrada

En el ejemplo siguiente se crea la credencial que representa la identidad administrada del servicio Azure SQL o Azure Synapse. La contraseña y el secreto no son aplicables en este caso.

CREATE CREDENTIAL ServiceIdentity WITH IDENTITY = 'Managed Identity';
GO

Para obtener un ejemplo de creación de una credencial con una identidad administrada para SQL Server en una máquina virtual de Azure, consulte ejemplo de G y ejemplo de H. La identidad administrada de nivel de servidor no se admite para Linux.

F. Creación de una credencial para la copia de seguridad o restauración en almacenamiento compatible con S3

Se aplica a: SQL Server 2022 (16.x) y versiones posteriores.

El estándar compatible con S3 abierto proporciona rutas de acceso de almacenamiento y detalles que pueden diferir en función de la plataforma de almacenamiento. Para obtener más información, consulte Copia de seguridad en URL de SQL Server para el almacenamiento de objetos compatible con S3.

Para la mayoría del almacenamiento compatible con S3, en este ejemplo se crea una credencial de nivel de servidor y se realiza una BACKUP TO URL.

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

Sin embargo, AWS S3 admite dos estándares diferentes de dirección URL.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (valor predeterminado)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Hay varios enfoques para crear correctamente una credencial para AWS S3:

  • Proporcione el nombre del cubo y la ruta de acceso y la región en el nombre de la credencial.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    

    O bien,

    CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
  • O bien, proporcione el nombre del cubo y la ruta de acceso en el nombre de credencial, pero parametrice la región dentro de cada BACKUP/RESTORE comando. Use la cadena de región específica de S3 en BACKUP_OPTIONS y RESTORE_OPTIONS, por ejemplo, '{"s3": {"region":"us-west-2"}}'.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH
      BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
    , COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
    RESTORE DATABASE AdventureWorks2022_1 
    FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH 
      MOVE 'AdventureWorks2022' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
    , MOVE 'AdventureWorks2022_log' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
    , STATS = 10, RECOVERY
    , REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
    GO
    

G. Creación de una credencial para acceder a Azure Blob Storage mediante una identidad administrada

A partir de SQL Server 2022 CU17, puede usar identidades administradas con credenciales de SQL Server para realizar copias de seguridad y restaurar SQL Server en bases de datos de máquinas virtuales de Azure desde Azure Blob Storage. Para obtener más información, consulte Copia de seguridad y restauración en la dirección URL mediante identidades administradas.

Para crear una credencial con una identidad administrada para usarla con las operaciones de BACKUP y RESTORE, use el ejemplo siguiente:

CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<container-name>] 
    WITH IDENTITY = 'Managed Identity';

marca de seguimiento 4675 se puede usar para comprobar las credenciales creadas con una identidad administrada. Si la instrucción CREATE CREDENTIAL se ejecutó sin la marca de seguimiento 4675 habilitada, no se emite ningún mensaje de error si la identidad administrada principal no está establecida para el servidor. Para solucionar este escenario, la credencial se debe eliminar y volver a crear una vez habilitada la marca de seguimiento.

H. Creación de una credencial de identidad administrada para administración extensible de claves con Azure Key Vault

A partir de SQL Server 2022 CU17, también puede usar identidades administradas en SQL Server en máquinas virtuales de Azure para administración extensible de claves (EKM) con Azure Key Vault (AKV). Para más información, consulte compatibilidad de identidad administrada para administración extensible de claves con Azure Key Vault.

Para crear una credencial de identidad administrada que se usará con EKM con AKV, use el ejemplo siguiente:

CREATE CREDENTIAL [<akv-name>.vault.azure.net] 
    WITH IDENTITY = 'Managed Identity'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov

Por ejemplo:

CREATE CREDENTIAL [contoso.vault.azure.net] -- for Azure Key Vault
    WITH IDENTITY = 'Managed Identity'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
CREATE CREDENTIAL [contoso.managedhsm.azure.net] -- for Azure Key Vault Managed HSM
    WITH IDENTITY = 'Managed Identity'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov

marca de seguimiento 4675 se puede usar para comprobar las credenciales creadas con una identidad administrada. Si la instrucción CREATE CREDENTIAL se ejecutó sin la marca de seguimiento 4675 habilitada, no se emite ningún mensaje de error si la identidad administrada principal no está establecida para el servidor. Para solucionar este escenario, la credencial se debe eliminar y volver a crear una vez habilitada la marca de seguimiento.