CREATE CREDENTIAL (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed InstanceSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance

Crea una credencial de nivel de servidor.Creates a server-level credential. Una credencial es un registro que contiene la información de autenticación necesaria para conectarse a un recurso fuera de SQL Server.A credential is a record that contains the authentication information that is required to connect to a resource outside SQL Server. La mayoría de las credenciales incluyen un usuario y una contraseña de Windows.Most credentials include a Windows user and password. 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.For example, saving a database backup to some location might require SQL Server to provide special credentials to access that location. Para más información, vea Credenciales (motor de base de datos).For more information, see Credentials (Database Engine).

Nota

Para establecer la credencial en el nivel de base de datos, use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).To make the credential at the database-level use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Use una credencial de nivel de servidor cuando necesite usar la misma credencial para varias bases de datos en el servidor.Use a server-level credential when you need to use the same credential for multiple databases on the server. Use una credencial de ámbito de base de datos para hacer que la base de datos sea más portátil.Use a database-scoped credential to make the database more portable. Cuando una base de datos se mueve a un nuevo servidor, la credencial de ámbito de la base de datos se moverá con ella.When a database is moved to a new server, the database scoped credential will move with it. Use credenciales con ámbito de base de datos en SQL DatabaseSQL Database.Use database scoped credentials on SQL DatabaseSQL Database.

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

SintaxisSyntax

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

Nota

Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentosArguments

credential_name Especifica el nombre de la credencial que se va a crear.credential_name Specifies the name of the credential being created. credential_name no puede comenzar por el signo de almohadilla (#).credential_name cannot start with the number (#) sign. Las credenciales del sistema comienzan por ##.System credentials start with ##.

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.When using a shared access signature (SAS), this name must match the container path, start with https and must not contain a forward slash. Vea el ejemplo D.See example D.

IDENTITY =" nombre_identidad " Especifica el nombre de la cuenta que se va a usar para conectarse fuera del servidor.IDENTITY ='identity_name' Specifies the name of the account to be used when connecting outside the server. Cuando la credencial se usa para tener acceso a Azure Key Vault, IDENTITY es el nombre del almacén de claves.When the credential is used to access the Azure Key Vault, the IDENTITY is the name of the key vault. Vea el ejemplo C más adelante.See example C below. Cuando la credencial usa una Firma de acceso compartido (SAS), IDENTITY es SHARED ACCESS SIGNATURE.When the credential is using a shared access signature (SAS), the IDENTITY is SHARED ACCESS SIGNATURE. Vea el ejemplo D de abajo.See example D below.

Importante

Azure SQL Database solo admite las identidades de Azure Key Vault y de Firma de acceso compartido.Azure SQL Database only supports Azure Key Vault and Shared Access Signature identities. No se admiten las identidades de usuario de Windows.Windows user identities are not supported.

SECRET =" secreto " Especifica el secreto necesario para la autenticación de salida.SECRET ='secret' Specifies the secret required for outgoing authentication.

Cuando se usa la credencial para acceder a Azure Key Vault, el argumento SECRET de CREATE CREDENTIAL requiere que los valores <Client ID> (sin guiones) y <Secret> de una entidad de servicio de Azure Active Directory se pasen juntos sin ningún espacio entre ellos.When the credential is used to access the Azure Key Vault the SECRET argument of CREATE CREDENTIAL requires the <Client ID> (without hyphens) and <Secret> of a Service Principal in the Azure Active Directory to be passed together without a space between them. Vea el ejemplo C más adelante.See example C below. Cuando la credencial usa una Firma de acceso compartido (SAS), SECRET es el token de la Firma de acceso compartido.When the credential is using a shared access signature, the SECRET is the shared access signature token. Vea el ejemplo D de abajo.See example D below. 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 information about creating a stored access policy and a shared access signature on an Azure container, see Lesson 1: Create a stored access policy and a shared access signature on an Azure container.

FOR CRYPTOGRAPHIC PROVIDER nombre_del_proveedor_de_servicios_criptográficos Especifica el nombre de un proveedor de Administración de claves de empresa (EKM) .FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name Specifies the name of an Enterprise Key Management Provider (EKM). Para más información sobre la administración de claves, vea Administración extensible de claves (EKM).For more information about Key Management, see Extensible Key Management (EKM).

ObservacionesRemarks

Si IDENTITY es un usuario de Windows, el secreto puede ser la contraseña.When IDENTITY is a Windows user, the secret can be the password. El secreto se cifra usando la clave maestra de servicio.The secret is encrypted using the service master key. Si se vuelve a generar la clave maestra de servicio, el secreto se vuelve a cifrar con la nueva clave maestra de servicio.If the service master key is regenerated, the secret is re-encrypted using the new service master key.

Una vez creada una credencial, puede asignarla a un inicio de sesión de SQL ServerSQL Server por medio de CREATE LOGIN o ALTER LOGIN.After creating a credential, you can map it to a SQL ServerSQL Server login by using CREATE LOGIN or ALTER LOGIN. Un inicio de sesión de SQL ServerSQL Server solamente se puede asignar a una credencial, pero una credencial puede asignarse a varios inicios de sesión de SQL ServerSQL Server.A SQL ServerSQL Server login can be mapped to only one credential, but a single credential can be mapped to multiple SQL ServerSQL Server logins. Para más información, vea Credenciales (motor de base de datos).For more information, see Credentials (Database Engine). Una credencial de nivel de servidor solo se puede asignar a un inicio de sesión, no a un usuario de base de datos.A server-level credential can only be mapped to a login, not to a database user.

Encontrará más información sobre las credenciales en la vista de catálogo sys.credentials.Information about credentials is visible in the sys.credentials catalog view.

Si no hay ninguna credencial de inicio de sesión asignada para el proveedor, se utiliza la credencial asignada a la cuenta de servicio de SQL ServerSQL Server .If there is no login mapped credential for the provider, the credential mapped to SQL ServerSQL Server service account is used.

Un inicio de sesión puede tener asignadas varias credenciales, siempre y cuando se utilicen con proveedores distintos.A login can have multiple credentials mapped to it as long as they are used with distinctive providers. Solo debe haber una credencial asignada por cada proveedor y por cada inicio de sesión.There must be only one mapped credential per provider per login. La misma credencial puede estar asignada a otros inicios de sesión.The same credential can be mapped to other logins.

PermisosPermissions

Requiere el permiso ALTER ANY CREDENTIAL.Requires ALTER ANY CREDENTIAL permission.

EjemplosExamples

A.A. Crear una credencial de Identidad de WindowsCreating a Credential for Windows Identity

En el ejemplo siguiente se crea la credencial denominada AlterEgo.The following example creates the credential called AlterEgo. La credencial contiene el usuario de Windows Mary5 y una contraseña.The credential contains the Windows user Mary5 and a password.

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

B.B. Crear una credencial de EKMCreating a Credential for 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.The following example uses a previously created account called User1OnEKM on an EKM module through the EKM's Management tools, with a basic account type and password. 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 ServerSQL Server:The sysadmin account on the server creates a credential that is used to connect to the EKM account, and assigns it to the User1 SQL ServerSQL Server account:

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.C. Crear una credencial de EKM con Azure Key VaultCreating a Credential for EKM Using the Azure Key Vault

En el siguiente ejemplo se crea una credencial de SQL ServerSQL Server para que Motor de base de datosDatabase Engine la use al tener acceso a Azure Key Vault con el Conector de SQL Server para Azure Key Vault.The following example creates a SQL ServerSQL Server credential for the Motor de base de datosDatabase Engine to use when accessing the Azure Key Vault using the SQL Server Connector for Microsoft Azure Key Vault. Para ver un ejemplo completo sobre cómo usar el Conector de SQL ServerSQL Server, vea Administración extensible de claves con el Almacén de claves de Azure (SQL Server).For a complete example of using the SQL ServerSQL Server Connector, see Extensible Key Management Using Azure Key Vault (SQL Server).

Importante

El argumento IDENTITY de CREATE CREDENTIAL requiere el nombre del Almacén de claves.The IDENTITY argument of CREATE CREDENTIAL requires the key vault name. El argumento SECRET de CREATE CREDENTIAL requiere que los valores <Client ID> (sin guiones) y <Secret> se pasen juntos sin ningún espacio entre ellos.The SECRET argument of CREATE CREDENTIAL requires the <Client ID> (without hyphens) and <Secret> to be passed together without a space between them.

En el ejemplo siguiente, el Id. de cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) se deja sin guiones y se introduce como la cadena EF5C8E094D2A4A769998D93440D8115D . El secreto se representa con la cadena SECRET_DBEngine.In the following example, the Client ID (EF5C8E09-4D2A-4A76-9998-D93440D8115D) is stripped of the hyphens and entered as the string EF5C8E094D2A4A769998D93440D8115D and the Secret is represented by the string SECRET_DBEngine.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_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.The following example creates the same credential by using variables for the Client ID and Secret strings, which are then concatenated together to form the SECRET argument. La función REPLACE se usa para quitar los guiones del identificador de cliente.The REPLACE function is used to remove the hyphens from the Client ID.

DECLARE @AuthClientId uniqueidentifier = 'EF5C8E09-4D2A-4A76-9998-D93440D8115D';
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.D. Crear una credencial con un token de SASCreating a Credential using a SAS Token

Se aplica a: desde SQL Server 2014 (12.x)SQL Server 2014 (12.x) hasta la versión actual y Azure SQL Managed Instance.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through current version and Azure SQL Managed Instance.

En el siguiente ejemplo se crea una credencial de firma de acceso compartido con un token de SAS.The following example creates a shared access signature credential using a SAS token. Para ver 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, consulte Tutorial: Uso del servicio Microsoft Azure Blob Storage con bases de datos de SQL Server 2016.For a tutorial on creating a stored access policy and a shared access signature on an Azure container, and then creating a credential using the shared access signature, see Tutorial: Using the Microsoft Azure Blob storage service with SQL Server 2016 databases.

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.THE CREDENTIAL NAME argument requires that the name match the container path, start with https and not contain a trailing forward slash. El argumento IDENTITY requiere el nombre, SHARED ACCESS SIGNATURE.The IDENTITY argument requires the name, SHARED ACCESS SIGNATURE. El argumento SECRET requiere el token de firma de acceso compartido.The SECRET argument requires the shared access signature token.

El secreto SHARED ACCESS SIGNATURE no debe tener el signo ? inicial.The SHARED ACCESS SIGNATURE secret should not have the leading ?.

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.E. Crear una credencial de identidad administradaCreating a Credential for Managed Identity

En el ejemplo siguiente se crea la credencial que representa la identidad administrada de Azure SQL o el servicio Azure Synapse.The following example creates the credential that represent Managed Identity of Azure SQL or Azure Synapse service. La contraseña y el secreto no se aplican en este caso.Password and secret are not applicable in this case.

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

Consulte tambiénSee Also