Condividi tramite


CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL di Azure Synapse Analytics Platform System (PDW)in Microsoft Fabric

Crea credenziali del database. Le credenziali del database non sono mappata a un account di accesso al server o a un utente di database. Le credenziali vengono usate dal database per accedere al percorso esterno ogni volta che l'operazione eseguita dal database lo richiede.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
[ ; ]

Argomenti

credential_name

Specifica il nome della credenziale con ambito database che si vuole creare. credential_name non può iniziare con il segno numero (#). Le credenziali di sistema iniziano con ##. La lunghezza massima di credential_name è di 128 caratteri.

IDENTITY = 'identity_name'

Specifica il nome dell'account da utilizzare per la connessione all'esterno del server.

  • Per importare un file da Archiviazione BLOB di Azure o Azure Data Lake Storage usando una chiave condivisa, il nome dell'identità deve essere SHARED ACCESS SIGNATURE. Per altre informazioni sulle firme di accesso condiviso, vedere Uso delle firme di accesso condiviso. Usare IDENTITY = SHARED ACCESS SIGNATURE solo per una firma di accesso condiviso.
  • Per importare un file da Archiviazione BLOB di Azure usando un'identità gestita, il nome dell'identità deve essere MANAGED IDENTITY.
  • Quando si usa Kerberos (Windows Active Directory o MIT KDC) non usare il nome di dominio nell'argomento IDENTITY . Usare semplicemente il nome dell'account.
  • In un'istanza di SQL Server, se si creano credenziali con ambito database con una chiave di accesso all'archiviazione SECRETusata come , IDENTITY viene ignorata.
  • WITH IDENTITY non è obbligatorio se il contenitore nell'archivio BLOB di Azure è abilitato per l'accesso anonimo. Per un esempio di query su Archiviazione BLOB di Azure con OPENROWSET BULK, vedere Importare in una tabella da un file archiviato nell'archivio BLOB di Azure.
  • In SQL Server 2022 (16.x) e versioni successive il connettore REST-API sostituisce HADOOP. Per Archiviazione BLOB di Azure e Azure Data Lake Gen 2, l'unico metodo di autenticazione supportato è la firma di accesso condiviso. Per altre informazioni, vedere CREATE EXTERNAL DATA SOURCE (Transact-SQL).
  • In SQL Server 2019 (15.x), l'unica origine dati esterna PolyBase che supporta l'autenticazione Kerberos è Hadoop. Tutte le altre origini dati esterne (SQL Server, Oracle, Teradata, MongoDB, ODBC generica) supportano solo l'autenticazione di base.
  • I pool SQL in Azure Synapse Analytics includono le note seguenti:
    • Per caricare i dati in Azure Synapse Analytics, è possibile usare qualsiasi valore valido per IDENTITY.
    • In un pool SQL serverless di Azure Synapse Analytics le credenziali con ambito database possono specificare un'identità gestita dell'area di lavoro, un nome dell'entità servizio o un token di firma di accesso condiviso.In an Azure Synapse Analytics serverless SQL pool, database scoped credentials can specify a workspace managed identity, service principal name, or shared access signature (SAS). L'accesso tramite un'identità utente, abilitata dall'autenticazione pass-through di Microsoft Entra, è anche possibile con credenziali con ambito database, così come l'accesso anonimo all'archiviazione disponibile pubblicamente. Per altre informazioni, vedere Tipi di autorizzazione di archiviazione supportati.
    • In un pool SQL dedicato di Azure Synapse Analytics le credenziali con ambito database possono specificare il token di firma di accesso condiviso, l'identità dell'applicazione personalizzata, l'identità gestita dell'area di lavoro o la chiave di accesso alle risorse di archiviazione.
Autenticazione T-SQL Supportata Note
Firma di accesso condiviso CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'secret'; SQL Server 2022, Istanza gestita di SQL di Azure, Azure Synapse Analytics, database SQL di Azure
Identità gestita CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'MANAGED IDENTITY'; Database SQL di Azure, identità gestita di SQL
Autenticazione pass-through di Microsoft Entra tramite identità utente CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'USER IDENTITY'; Database SQL di Microsoft Azure In Azure Synapse, vedere Microsoft Entra Connect: Autenticazione pass-through
Autenticazione di base della chiave di accesso S3 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'S3 ACCESS KEY', SECRET = '<accesskey>:<secretkey>'; SQL Server 2022
Kerberos (Windows Active Directory o MIT KDC) o per le origini dati ODBC CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = '<identity_name>', SECRET = '<secret>'; Versioni di sola Hadoop di SQL

SECRET = 'secret'

Specifica il segreto richiesto per l'autenticazione in uscita. È necessario specificare SECRET per importare un file dall'archiviazione BLOB di Azure. Per caricare dati dall'archiviazione BLOB di Azure in Azure Synapse Analytics o Parallel Data Warehouse, il segreto deve essere la chiave di Archiviazione di Azure.

Avviso

Il valore della chiave di firma di accesso condiviso può iniziare con "?" (punto interrogativo). Quando si usa la chiave di firma di accesso condiviso, è necessario rimuovere il carattere "?" iniziale, altrimenti potrebbe verificarsi un blocco.

Osservazioni:

Una credenziale con ambito database è 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.

Per proteggere le informazioni riservate all'interno delle credenziali con ambito database, è necessaria una chiave master del database (DMK). DMK è una chiave simmetrica che crittografa il segreto nella credenziale con ambito database. Il database deve avere una DMK prima di poter creare credenziali con ambito database. Una DMK deve essere crittografata con una password complessa. database SQL di Azure creerà una DMK con una password complessa selezionata in modo casuale come parte della creazione delle credenziali con ambito database o come parte della creazione di un controllo del server. Gli utenti non possono creare DMK in un database logico master . La password della chiave master è sconosciuta a Microsoft e non è individuabile dopo la creazione. Per questo motivo, è consigliabile creare una DMK prima di creare credenziali con ambito database. Per altre informazioni, vedere CREATE MASTER KEY (Transact-SQL).

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

Quando si concedono autorizzazioni per le firme di accesso condiviso da usare con una tabella esterna PolyBase, selezionare sia Container che Object come tipi di risorse consentiti. Se non viene concesso, è possibile che venga visualizzato l'errore 16535 o 16561 quando si tenta di accedere alla tabella esterna.

Altre informazioni sulle credenziali con ambito database sono disponibili nella vista del catalogo sys.database_scoped_credentials.

Di seguito sono elencate alcune applicazioni delle credenziali con ambito database:

Autorizzazioni

È richiesta l'autorizzazione CONTROL per il database.

Esempi

R. Creare credenziali con ambito database per l'applicazione

Nell'esempio seguente viene creata la credenziale con ambito database denominata AppCred. La credenziale con ambito database include l'utente Windows Mary5 e una password.

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL AppCred WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';

B. Creare credenziali con ambito database per una firma di accesso condiviso

Nell'esempio seguente viene creata una credenziale con ambito database che può essere usata per creare un'origine dati esterna, che può eseguire operazioni bulk, ad esempio BULK INSERT (Transact-SQL) e OPENROWSET (Transact-SQL).

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL MyCredentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'QLYMgmSXMklt%2FI1U6DcVrQixnlU5Sgbtk1qDRakUBGs%3D';

C. Creare credenziali con ambito database per la connettività PolyBase ad Azure Data Lake Store

L'esempio seguente crea una credenziale con ambito database che è possibile usare per creare un'origine dati esterna che può essere usata da PolyBase in Azure Synapse Analytics.

Azure Data Lake Store usa un'applicazione Microsoft Entra per l'autenticazione da servizio a servizio.

Creare un'applicazione Microsoft Entra e documentare il client_id, OAuth_2.0_Token_EndPoint e La chiave prima di provare a creare credenziali con ambito database.

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL ADL_User
WITH
    IDENTITY = '<client_id>@<OAuth_2.0_Token_EndPoint>',
    SECRET = '<key>'
;