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

QUESTO argomento si applica a:yesSQL Server (a partire 2008)SìDatabase SQL di Azure (solo gestito istanza)nessunAzure SQL Data Warehouse alcunParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL Database (Managed Instance only)noAzure SQL Data Warehouse noParallel Data Warehouse

Crea una credenziale a livello di server.Creates a server-level credential. Una credenziale è un record contenente le informazioni di autenticazione necessarie per connettersi a una risorsa all'esterno di SQL Server.A credential is a record that contains the authentication information that is required to connect to a resource outside SQL Server. La maggior parte delle credenziali include un utente e una password di Windows.Most credentials include a Windows user and password. Quando si salva il backup di un database in un determinato percorso, ad esempio, può essere necessario specificare credenziali speciali per accedere a tale percorso.For example, saving a database backup to some location might require SQL Server to provide special credentials to access that location. Per altre informazioni, vedere Credenziali (motore di database).For more information, see Credentials (Database Engine).

Importante

Nel istanza gestita di Azure SQL Database, questa funzionalità di T-SQL presenta alcune modifiche di comportamento.On Azure SQL Database Managed Instance, this T-SQL feature has certain behavior changes. Vedere differenze di Azure SQL Database gestiti istanza T-SQL da SQL Server per i dettagli per tutte le modifiche di comportamento di T-SQL.See Azure SQL Database Managed Instance T-SQL differences from SQL Server for details for all T-SQL behavior changes.

Nota

Per creare credenziali a livello di database, vedere CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).To make the credential at the database-level use CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Usare una credenziale a livello di server quando è necessario usare le stesse credenziali per più database nel server.Use a server-level credential when you need to use the same credential for multiple databases on the server. Usare le credenziali con ambito database per rendere portabile il database.Use a database-scoped credential to make the database more portable. Quando un database viene spostato in un nuovo server, vengono spostate anche le credenziali con ambito database.When a database is moved to a new server, the database scoped credential will move with it. Usare le credenziali con ambito database nel Database SQLSQL Database.Use database scoped credentials on Database SQLSQL Database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax


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

ArgomentiArguments

credential_namecredential_name
Viene specificato il nome delle credenziali create.Specifies the name of the credential being created. credential_name non può iniziare con il simbolo del cancelletto (#).credential_name cannot start with the number (#) sign. perché tale simbolo viene utilizzato per le credenziali di sistema.System credentials start with ##. Quando si usa una firma di accesso condiviso (SAS), questo nome deve corrispondere al percorso del contenitore, iniziare con https e non deve contenere una barra.When using a shared access signature (SAS), this name must match the container path, start with https and must not contain a forward slash. Vedere l'esempio D riportato di seguito.See example D below.

IDENTITY ='identity_name'IDENTITY ='identity_name'
Specifica il nome dell'account da utilizzare per la connessione all'esterno del server.Specifies the name of the account to be used when connecting outside the server. Quando la credenziale viene usata per accedere a Azure Key Vault, IDENTITY è il nome dell'insieme di credenziali delle chiavi.When the credential is used to access the Azure Key Vault, the IDENTITY is the name of the key vault. Vedere l'esempio C riportato di seguito.See example C below. Quando le credenziali usano una firma di accesso condiviso (SAS), il valore di IDENTITY è SHARED ACCESS SIGNATURE.When the credential is using a shared access signature (SAS), the IDENTITY is SHARED ACCESS SIGNATURE. Vedere l'esempio D riportato di seguito.See example D below.

SECRET ='secret'SECRET ='secret'
Specifica il segreto richiesto per l'autenticazione in uscita.Specifies the secret required for outgoing authentication.

Quando la credenziale viene usata per accedere ad Azure Key Vault, l'argomento SECRET di CREATE CREDENTIAL richiede che l'<ID client> (senza trattini) e il valore <Secret> di un'Entità servizio in Azure Active Directory vengano passati insieme senza essere separati da uno spazio.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. Vedere l'esempio C riportato di seguito.See example C below. Quando le credenziali usano una firma di accesso condiviso, il valore di SECRET è il token della firma di accesso condiviso.When the credential is using a shared access signature, the SECRET is the shared access signature token. Vedere l'esempio D riportato di seguito.See example D below. Per informazioni sulla creazione di criteri di accesso archiviati e una firma di accesso condiviso in un contenitore di Azure, vedere Lezione 1: Creare criteri di accesso archiviati e una firma di accesso condiviso.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 cryptographic_provider_nameFOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name
Specifica il nome di un provider EKM (Extensible Key Management).Specifies the name of an Enterprise Key Management Provider (EKM). Per altre informazioni sulla gestione delle chiavi, vedere Extensible Key Management (EKM).For more information about Key Management, see Extensible Key Management (EKM).

RemarksRemarks

Se IDENTITY è un utente di Windows, il segreto può essere la password.When IDENTITY is a Windows user, the secret can be the password. Il segreto viene crittografato con la chiave master del servizio.The secret is encrypted using the service master key. Se la chiave master del servizio viene rigenerata, il segreto viene ricrittografato con la nuova chiave master del servizio.If the service master key is regenerated, the secret is re-encrypted using the new service master key.

Dopo aver creato una credenziale, è possibile eseguirne il mapping a un account di accesso SQL ServerSQL Server usando 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. È possibile eseguire il mapping di un account di accesso di SQL ServerSQL Server a una sola credenziale, mentre è possibile eseguire il mapping di una credenziale a più account di accesso di 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. Per altre informazioni, vedere Credenziali (motore di database).For more information, see Credentials (Database Engine). È possibile eseguire il mapping di una credenziale solo a livello di server, non a un utente del database.A server-level credential can only be mapped to a login, not to a database user.

Le informazioni sulle credenziali sono visibili nella vista del catalogo sys.credentials.Information about credentials is visible in the sys.credentials catalog view.

Se non sono presenti credenziali su cui viene eseguito il mapping a un account accesso per il provider, vengono utilizzate le credenziali sui cui viene eseguito il mapping all'account del servizio SQL ServerSQL Server .If there is no login mapped credential for the provider, the credential mapped to SQL ServerSQL Server service account is used.

A un account di accesso è possibile eseguire il mapping di più credenziali, a condizione che vengano utilizzate con provider distinti.A login can have multiple credentials mapped to it as long as they are used with distinctive providers. È possibile eseguire il mapping di una sola credenziale per provider per ogni account di accesso.There must be only one mapped credential per provider per login. Sulla stessa credenziale è possibile eseguire il mapping ad altri account di accesso.The same credential can be mapped to other logins.

AutorizzazioniPermissions

È richiesta l'autorizzazione ALTER ANY CREDENTIAL.Requires ALTER ANY CREDENTIAL permission.

EsempiExamples

A.A. Esempio di baseBasic Example

Nell'esempio seguente viene creata la credenziale denominata AlterEgo.The following example creates the credential called AlterEgo. Tale credenziale contiene l'utente di Windows Mary5 e una password.The credential contains the Windows user Mary5 and a password.

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

B.B. Creazione di una credenziale per EKMCreating a Credential for EKM

Nell'esempio seguente viene utilizzato un account creato in precedenza denominato User1OnEKM in un modulo EKM tramite gli strumenti di gestione di EKM, con un tipo di account di base e una password.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. L'account sysadmin nel server crea una credenziale usata per connettersi all'account EKM e la assegna all'account User1 di 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 Login1  
ADD CREDENTIAL CredentialForEKM;  

/* Modify the login to assign a non cryptographic provider credential */   
ALTER LOGIN Login1  
WITH CREDENTIAL = AlterEgo;  
GO  

C.C. Creazione di una credenziale per EKM con l'insieme di credenziali chiave di AzureCreating a Credential for EKM Using the Azure Key Vault

Nell'esempio seguente viene creata una credenziale di SQL ServerSQL Server utilizzabile dal Motore di databaseDatabase Engine per l'accesso ad Azure Key Vault mediante il Connettore SQL Server per Microsoft Azure Key Vault.The following example creates a SQL ServerSQL Server credential for the Motore di databaseDatabase Engine to use when accessing the Azure Key Vault using the SQL Server Connector for Microsoft Azure Key Vault. Per un esempio completo dell'uso del connettore di SQL ServerSQL Server, vedere Extensible Key Management con Azure Key Vault (SQL Server).For a complete example of using the SQL ServerSQL Server Connector, see Extensible Key Management Using Azure Key Vault (SQL Server).

Importante

L'argomento IDENTITY di CREATE CREDENTIAL richiede il nome dell'insieme di credenziali delle chiavi.The IDENTITY argument of CREATE CREDENTIAL requires the key vault name. L'argomento SECRET di CREATE CREDENTIAL richiede che i valori per <ID client> (senza trattini) e <Secret> siano passati insieme senza spazi aggiunti.The SECRET argument of CREATE CREDENTIAL requires the <Client ID> (without hyphens) and <Secret> to be passed together without a space between them.

Nell'esempio seguente l' ID client (EF5C8E09-4D2A-4A76-9998-D93440D8115D) viene immesso con tutti i trattini rimossi come stringa EF5C8E094D2A4A769998D93440D8115D e il Segreto è rappresentato dalla stringa 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 ;  

Nell'esempio seguente viene creata la stessa credenziale usando le variabili per le stringhe ID client e Secret, che vengono quindi concatenate insieme per formare l'argomento 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 funzione REPLACE viene usata per rimuovere i trattini dall'ID client.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. Creazione di una credenziale mediante un token di firma di accesso condivisoCreating a Credential using a SAS Token

Si applica a: da SQL Server 2014 (12.x)SQL Server 2014 (12.x) alla versione corrente.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through current version.

Nell'esempio seguente viene creata una credenziale di firma di accesso condiviso usando un token di firma di accesso condiviso.The following example creates a shared access signature credential using a SAS token. Per un'esercitazione sulla creazione di criteri di accesso archiviati e di una firma di accesso condiviso in un contenitore di Azure e sulla creazione, in un secondo momento, di una credenziale usando la firma di accesso condiviso, vedere Tutorial: Using the Microsoft Azure Blob storage service with SQL Server 2016 databases (Esercitazione: Uso del servizio di archiviazione BLOB di Azure con i database di 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

L'argomento CREDENTIAL NAME richiede che il nome corrisponda al percorso del contenitore, inizi con https e non contenga una barra finale.THE CREDENTIAL NAME argument requires that the name match the container path, start with https and not contain a trailing forward slash. L'argomento IDENTITY richiede il nome, SHARED ACCESS SIGNATURE.The IDENTITY argument requires the name, SHARED ACCESS SIGNATURE. L'argomento SECRET richiede il token della firma di accesso condiviso.The SECRET argument requires the shared access signature token.

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    

Vedere ancheSee Also

Credenziali (motore di database) Credentials (Database Engine)
ALTER CREDENTIAL (Transact-SQL) ALTER CREDENTIAL (Transact-SQL)
DROP CREDENTIAL (Transact-SQL) DROP CREDENTIAL (Transact-SQL)
CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
CREATE LOGIN (Transact-SQL) CREATE LOGIN (Transact-SQL)
ALTER LOGIN (Transact-SQL) ALTER LOGIN (Transact-SQL)
sys.credentials (Transact-SQL) sys.credentials (Transact-SQL)
Lezione 2: Creare credenziali di SQL Server usando una firma di accesso condiviso Lesson 2: Create a SQL Server credential using a shared access signature
Uso delle firme di accesso condivisoShared Access Signatures