CREATE CREDENTIAL (Transact-SQL)

Si applica a: SQL Server (tutte le versioni supportate) Istanza gestita di SQL di Azure

Crea una credenziale a livello di server. Una credenziale è un record contenente le informazioni di autenticazione necessarie per connettersi a una risorsa all'esterno di SQL Server. La maggior parte delle credenziali include un utente e una password di Windows. 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. Per altre informazioni, vedere Credenziali (motore di database).

Nota

Per rendere le credenziali a livello di database, usare CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Usare una credenziale a livello di server quando è necessario usare le stesse credenziali per più database nel server. Usare le credenziali con ambito database per rendere portabile il database. Quando un database viene spostato in un nuovo server, vengono spostate anche le credenziali con ambito database. Usare le credenziali con ambito del database in database SQL.

Icona di collegamento argomento IconaTransact-SQL Sintassi Transact-SQL Convenzioni

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

credential_name specifica il nome delle credenziali create. credential_name non può iniziare con il simbolo del cancelletto (#). perché tale simbolo viene utilizzato per le credenziali di sistema.

Importante

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. Vedere l'esempio D.

IDENTITY ='identity_name' Specifica il nome dell'account da usare durante la connessione all'esterno del server. Quando la credenziale viene usata per accedere a Azure Key Vault, IDENTITY è il nome dell'insieme di credenziali delle chiavi. Vedere l'esempio C riportato di seguito. Quando le credenziali usano una firma di accesso condiviso (SAS), il valore di IDENTITY è SHARED ACCESS SIGNATURE. Vedere l'esempio D riportato di seguito.

Importante

Database SQL di Azure supporta solo le identità Azure Key Vault e di firma di accesso condiviso. Le identità utente di Windows non sono supportate.

SECRET ='secret' specifica il segreto richiesto per l'autenticazione in uscita.

Quando le credenziali vengono usate per accedere ad Azure Key Vault l'argomento SECRET di CREATE CREDENTIAL richiede l'ID<> client (senza trattini) e <il segreto> di un'entità servizio in Azure Active Directory da passare insieme senza uno spazio tra di essi. Vedere l'esempio C riportato di seguito. Quando le credenziali usano una firma di accesso condiviso, il valore di SECRET è il token della firma di accesso condiviso. Vedere l'esempio D riportato di seguito. 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 in un contenitore di Azure.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name specifica il nome di un provider EKM (Enterprise Key Management provider) . Per altre informazioni sulla gestione delle chiavi, vedere Extensible Key Management (EKM).

Osservazioni

Se IDENTITY è un utente di Windows, il segreto può essere la password. Il segreto viene crittografato con la chiave master del servizio. Se la chiave master del servizio viene rigenerata, il segreto viene ricrittografato con la nuova chiave master del servizio.

Dopo aver creato una credenziale, è possibile eseguirne il mapping a un account di accesso SQL Server usando CREATE LOGIN o ALTER LOGIN. Un account di accesso SQL Server può essere mappato a una sola credenziale, ma è possibile eseguire il mapping di una singola credenziale a più account di accesso SQL Server. Per altre informazioni, vedere Credenziali (motore di database). È possibile eseguire il mapping di una credenziale solo a livello di server, non a un utente del database.

Le informazioni sulle credenziali sono visibili nella vista del catalogo sys.credentials.

Se non sono presenti credenziali di accesso mappate per il provider, vengono usate le credenziali mappate all'account del servizio SQL Server.

A un account di accesso è possibile eseguire il mapping di più credenziali, a condizione che vengano utilizzate con provider distinti. È possibile eseguire il mapping di una sola credenziale per provider per ogni account di accesso. Sulla stessa credenziale è possibile eseguire il mapping ad altri account di accesso.

Autorizzazioni

È richiesta l'autorizzazione ALTER ANY CREDENTIAL.

Esempi

R. Creazione di una credenziale per l'identità Windows

Nell'esempio seguente viene creata la credenziale denominata AlterEgo. Tale credenziale contiene l'utente di Windows Mary5 e una password.

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

B. Creazione di una credenziale per EKM

Nell'esempio seguente viene usato un account creato in precedenza e denominato User1OnEKM in un modulo EKM tramite gli strumenti di gestione di EKM, con un tipo di account di base e una password. L'account sysadmin nel server crea una credenziale usata per connettersi all'account EKM e la assegna all'account User1 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. Creazione di una credenziale per EKM con l'insieme di credenziali chiave di Azure

Nell'esempio seguente viene creata una credenziale SQL Server per il motore di database da usare quando si accede all'Key Vault di Azure usando il Connettore SQL Server per Microsoft Azure Key Vault. Per un esempio completo dell'uso del connettore SQL Server, vedere Extensible Key Management using Azure Key Vault (SQL Server).For a complete example of using the SQL 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. L'argomento SECRET di CREATE CREDENTIAL richiede che l'ID<> client (senza trattini) e <il segreto> vengano passati insieme senza uno spazio tra di essi.

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.

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. La funzione REPLACE viene usata per rimuovere i trattini dall'ID client.

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. Creazione di una credenziale mediante un token di firma di accesso condiviso

Si applica a: SQL Server 2014 (12.x) tramite la versione corrente e Istanza gestita di SQL di Azure.

Nell'esempio seguente viene creata una credenziale di firma di accesso condiviso usando un token di firma di accesso condiviso. Per un'esercitazione sulla creazione di criteri di accesso archiviati e una firma di accesso condiviso in un contenitore di Azure e quindi sulla creazione di credenziali usando la firma di accesso condiviso, vedere Esercitazione: Uso del Archiviazione BLOB di Azure Microsoft con i database SQL Server 2016.

Importante

L'argomento CREDENTIAL NAME richiede che il nome corrisponda al percorso del contenitore, inizi con https e non contenga una barra finale. L'argomento IDENTITY richiede il nome, SHARED ACCESS SIGNATURE. L'argomento SECRET richiede il token della firma di accesso condiviso.

L'argomento SECRET di SHARED ACCESS SIGNATURE non deve essere preceduto da ? .

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. Creazione di una credenziale per l'identità gestita

Nell'esempio seguente vengono create le credenziali che rappresentano l'identità gestita del servizio SQL di Azure o Azure Synapse. La password e il segreto non sono applicabili in questo caso.

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

Vedere anche