Utenti di database indipendente: rendere portabile un database

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics

Usare gli utenti di database indipendente per autenticare le connessioni SQL Server e Database SQL a livello di database. Un database indipendente è un database isolato dagli altri database e dall'istanza di SQL Server/ Database SQL (e del database master) che ospita il database. SQL Server supporta gli utenti di database indipendente per l'autenticazione di Windows e SQL Server . Quando si usa Database SQL, combinare gli utenti di del database indipendente con le regole firewall a livello di database. Questo argomento illustra le differenze e i vantaggi correlati all'uso del modello di database indipendente rispetto al modello tradizionale basato su account di accesso/utente e alle regole firewall a livello di server o Windows. L'uso del modello tradizionale basato su account di accesso/utente e delle regole firewall a livello di server può essere ancora necessario in scenari specifici, per la gestibilità o per la logica di business dell'applicazione.

Nota

Quando Microsoft evolverà il servizio Database SQL e offrirà a contratti di servizi maggiormente garantiti, potrebbe essere necessario passare al modello basato sull'utente di database indipendente e a regole del firewall con ambito database per usufruire di contratti di servizio con maggiore disponibilità e di un numero superiore di account di accesso consentiti per un determinato database. Microsoft invita quindi ad adottare questo approccio già a partire da oggi.

Modello tradizionale basato su account di accesso e utente

Nel modello di connessione tradizionale gli utenti di Windows o i membri di gruppi di Windows si connettono al Motore di database fornendo le credenziali utente o di gruppo autenticate da Windows. In alternativa si può specificare un nome e una password e connettersi usando l'autenticazione di SQL Server . In entrambi i casi, il database master deve disporre di un account di accesso corrispondente alle credenziali di connessione. Dopo che il Motore di database ha verificato le credenziali di autenticazione di Windows o ha autenticato le credenziali di autenticazione di SQL Server , la connessione in genere tenta di connettersi a un database utente. Per connettersi a un database utente, l'account di accesso deve poter essere sottoposto a mapping (ovvero associato) a un utente del database nel database utente. La stringa di connessione può inoltre specificare la connessione a un database specifico. Questo è facoltativo in SQL Server , ma obbligatorio nel Database SQL.

L'aspetto importante è che sia l'account di accesso (nel database master) che l'utente (nel database utente) devono esistere ed essere correlati tra loro. Ciò significa che la connessione al database utente presenta una dipendenza dall'account di accesso nel database master e questo limita la capacità del database di essere spostato in un server SQL Server o database SQL di Azure di hosting diverso. Se inoltre per qualsiasi motivo non è disponibile una connessione al database master (ad esempio è in corso un failover), aumenterà il tempo complessivo di connessione oppure potrà verificarsi un timeout della connessione. Questo potrebbe quindi ridurre la scalabilità della connessione.

Modello di utente di database indipendente

Nel modello di utente di database indipendente l'account di accesso nel database master non è presente. Al contrario, il processo di autenticazione si verifica nel database utente e l'utente del database nel database utente non dispone di un account di accesso associato nel database master. Il modello di utente di database indipendente supporta sia l'autenticazione di Windows che l'autenticazione di SQL Server e può essere usato sia in SQL Server che nel Database SQL. Per connettersi come utente di database indipendente, la stringa di connessione deve sempre contenere un parametro per il database utente in modo che il Motore di database sappia quale database è responsabile della gestione del processo di autenticazione. L'attività dell'utente di database indipendente è limitata al database di autenticazione, pertanto durante la connessione come utente di database indipendente, l'account utente del database deve essere creato in modo indipendente in ogni database richiesto dall'utente. Per modificare i database, gli utenti del Database SQL devono creare una nuova connessione. Gli utenti di database indipendente in SQL Server possono modificare i database se è presente un utente identico in un altro database.

Azure: Database SQL e Azure Synapse Analytics supportano le identità di Azure Active Directory come utenti di database indipendente. Database SQL supporta gli utenti di database indipendente che usano l'autenticazione di SQL Server , mentre Azure Synapse Analytics non li supporta. Per altre informazioni, vedere Connessione al database SQL tramite l'autenticazione di Azure Active Directory. Quando si usa l'autenticazione di Azure Active Directory, è possibile stabilire una connessione da SQL Server Management Studio usando l'autenticazione universale di Active Directory. Gli amministratori possono configurare l'autenticazione universale per richiedere l'autenticazione a più fattori, che consente di verificare l'identità con una telefonata, SMS, smart card con pin o la notifica dell'app mobile. Per altre informazioni, vedere Supporto di SQL Server Management Studio (SSMS) per l'autenticazione MFA di Azure AD con il database SQL e Azure Synapse Analytics.

Per Database SQL e Azure Synapse Analytics, dal momento che il nome del database è sempre richiesto nella stringa di connessione, non sono necessarie modifiche della stringa di connessione quando si passa dal modello tradizionale al modello di utente di database indipendente. Per le connessioni a SQL Server , il nome del database deve essere aggiunto alla stringa di connessione, se non è già presente.

Importante

Quando si usa il modello tradizionale, i ruoli e le autorizzazioni a livello di server possono limitare l'accesso a tutti i database. Quando si usa il modello di database indipendente, i proprietari del database e gli utenti del database con autorizzazione ALTER ANY USER possono concedere l'accesso al database. In questo modo si riduce il controllo di accesso di account di accesso server con privilegi elevati e si espande il controllo di accesso per includere utenti di database con privilegi elevati.

Firewall

SQL Server

Le regole di Windows Firewall si applicano a tutte le connessioni e producono gli stessi effetti sugli account di accesso (connessioni con modello tradizionale) e sugli utenti di database indipendente. Per altre informazioni su Windows Firewall, vedere Configurazione di Windows Firewall per l'accesso al Motore di database.

Database SQL Firewall

Database SQL consente regole del firewall separate per connessioni a livello di server (account di accesso) e per connessioni a livello di database (utenti di database indipendente). Durante la connessione a un database utente vengono verificate per prime le regole del firewall a livello di database. Se non esistono regole che consentono l'accesso al database, vengono verificate le regole del firewall a livello di server, operazione che richiede l'accesso al database master del server di database SQL. L'uso combinato di regole del firewall a livello di database e utenti di database indipendente consente di non dover accedere al database master del server durante la connessione e implica di conseguenza un miglioramento della scalabilità della connessione.

Per altre informazioni sulle regole del firewall del Database SQL , vedere gli argomenti seguenti:

Differenze di sintassi

Modello tradizionale Modello di utente di database indipendente
Quando connesso al database master:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Quindi, quando connesso a un database utente:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Quando connesso a un database utente:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Modello tradizionale Modello di utente di database indipendente
Per cambiare la password, nel contesto del database master:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
Per cambiare la password, nel contesto del database utente:

ALTER USER user_name WITH PASSWORD = 'strong_password';

database SQL

Istanza gestita di SQL di Azure si comporta come SQL Server in locale nel contesto dei database indipendenti. Assicurarsi di modificare il contesto del database dal database master al database utente durante la creazione dell'utente indipendente. Quando si imposta l'opzione di indipendenza, inoltre, non devono essere presenti connessioni attive al database utente.

Ad esempio:

Avviso

Prima di eseguire lo script seguente, assicurarsi che non siano presenti altre connessioni attive nel database di Istanza gestita. Lo script potrebbe interrompere altri processi in esecuzione nel database.

Use MASTER;
GO 

ALTER DATABASE Test
SET RESTRICTED_USER
WITH ROLLBACK IMMEDIATE;

ALTER DATABASE Test
SET containment=partial;

ALTER DATABASE Test
SET MULTI_USER;

USE Test;  
GO 

CREATE USER Carlo  
WITH PASSWORD='Enterpwdhere*'  

SELECT containment_desc FROM sys.databases
WHERE name='Test'

Osservazioni

  • In SQL Servergli utenti di database indipendente devono essere abilitati per l'istanza di SQL Server. Per altre informazioni, vedere Opzione di configurazione del server contained database authentication.
  • Gli account di accesso e gli utenti di database indipendente con nomi diversi possono coesistere nelle applicazioni.
  • Se nel database master è presente un account di accesso denominato nome1 e si crea un utente di database indipendente denominato nome1, quando viene specificato un nome di database nella stringa di connessione il contesto dell'utente del database verrà preferito a quello dell'account di accesso durante la connessione al database, ovvero gli utenti di database indipendente avranno la precedenza rispetto agli account di accesso con lo stesso nome.
  • Nel Database SQL il nome dell'utente di database indipendente non può essere uguale a quello dell'account dell'amministratore del server.
  • L'account dell'amministratore del server Database SQL non può mai essere un utente di database indipendente. L'amministratore del server dispone di autorizzazioni sufficienti per creare e gestire utenti del database indipendente. L'amministratore del server può concedere a utenti di database indipendente autorizzazioni per i database utente.
  • Dal momento che gli utenti del database indipendente sono entità a livello di database, è necessario creare utenti del database indipendente in ogni database in cui verranno usati. L'identità è confinata al database ed è da ogni punto di vista indipendente rispetto a un utente con lo stesso nome e la stessa password in un altro database nello stesso server.
  • Usare le stesse password complesse usate in genere per gli account di accesso.

Vedere anche

Database indipendenti
Procedure consigliate per la sicurezza in database indipendenti
CREATE USER (Transact-SQL)
Connettersi al Database SQL utilizzando l’autenticazione di Azure Active Directory