Condividi tramite


Utenti contenuti nel database - Rendere il database portatile

Usare gli utenti contenuti del database per autenticare le connessioni a SQL Server e a SQL Database a livello di database. Un database indipendente è un database isolato da altri database e dall'istanza del database SQL Server/SQL (e dal database master) che ospita il database. SQL Server supporta gli utenti di database contenuti sia per l'autenticazione di Windows che di SQL Server. Quando si utilizza il database SQL, combinare gli utenti del database contenuto con le regole del firewall a livello di database. In questo argomento vengono esaminate le differenze e i vantaggi dell'uso del modello di database contenuto rispetto al modello tradizionale di accesso/utente e alle regole del firewall a livello di Windows o server. Scenari specifici, gestibilità o logica di business dell'applicazione possono comunque richiedere l'uso di regole firewall tradizionali di accesso/utente e a livello di server.

Annotazioni

Man mano che Microsoft evolve il servizio di database SQL e si sposta verso contratti di servizio garantiti più elevati, potrebbe essere necessario passare al modello utente del database indipendente e alle regole del firewall con ambito database per ottenere il contratto di servizio con disponibilità più elevata e una velocità di accesso massima superiore per un determinato database. Microsoft consiglia di prendere in considerazione tali modifiche oggi.

Accesso tradizionale e modello utente

Nel modello di connessione tradizionale, gli utenti o i membri di Windows si connettono al motore di database fornendo credenziali utente o gruppo autenticate da Windows. In alternativa, la connessione fornisce sia un nome che una password e si connette usando l'autenticazione di SQL Server , che è l'unica opzione per la connessione al database SQL. In entrambi i casi, il database master deve avere un account di accesso corrispondente alle credenziali di connessione. Dopo che il motore di database conferma le credenziali di autenticazione di Windows o autentica 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 essere mappato, ovvero associato, a un utente del database. La stringa di connessione può anche specificare la connessione a un database specifico, facoltativo in SQL Server, ma necessario nel database SQL.

Il principio importante è che sia l'account di accesso (nel database master) sia l'utente (nel database utente) devono esistere ed essere correlati tra loro. Ciò significa che la connessione al database degli utenti dipende dal login nel database master, e ciò limita la possibilità di spostare il database su un server SQL Server o Azure SQL Database diverso. Se, per qualsiasi motivo, una connessione al database master non è disponibile (ad esempio, è in corso un failover), il tempo di connessione complessivo verrà aumentato o potrebbe verificarsi un timeout della connessione. Di conseguenza, ciò può ridurre la scalabilità delle connessioni.

Modello utente contenuto nel database

Nel modello di utente del database contenuto, 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 utente del database contenuto supporta sia l'autenticazione di Windows (in SQL Server) che l'autenticazione di SQL Server (in SQL Server e SQL Database). 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 conosca il database responsabile della gestione del processo di autenticazione. L'attività dell'utente del database indipendente è limitata al database di autenticazione, pertanto quando ci si connette come utente del database indipendente, l'account utente del database deve essere creato in modo indipendente in ogni database necessario all'utente. Per modificare i database, gli utenti del database SQL devono creare una nuova connessione. Gli utenti di database indipendenti in SQL Server possono modificare i database se un utente identico è presente in un altro database.

Per il database SQL non sono necessarie modifiche alla stringa di connessione quando si passa dal modello tradizionale al modello utente del database indipendente. Per le connessioni di 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 a livello di server 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 di database e gli utenti del database con l'autorizzazione ALTER ANY USER possono concedere l'accesso al database. Ciò riduce il controllo di accesso ai login del server con privilegi elevati e lo estende per includere anche gli utenti del database con privilegi elevati.

Firewall

SQL Server

Le regole di Windows Firewall si applicano a tutte le connessioni e hanno gli stessi effetti sugli account di accesso (connessioni modello tradizionali) e sugli utenti di database indipendenti. Per altre informazioni su Windows Firewall, vedere Configurare Windows Firewall per l'accesso al motore di database.

Firewall del database SQL

Il database SQL consente regole del firewall separate per le connessioni a livello di server (account di accesso) e per le connessioni a livello di database (utenti di database indipendenti). Quando ci si connette a un database utente, vengono controllate prima le regole del firewall del database. Se non è presente alcuna regola che consente l'accesso al database, vengono controllate le regole del firewall a livello di server, che richiede l'accesso al database master del server logico. Le regole del firewall a livello di database combinate con gli utenti del database indipendente possono eliminare la necessità di accedere al database master del server durante la connessione offrendo una maggiore scalabilità della connessione.

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

Differenze di sintassi

Modello tradizionale Modello utente di database contenuto
Quando si è connessi al database master:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Quindi, quando si è connessi a un database utente:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Quando si è connessi a un database utente:

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

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

ALTER USER user_name WITH PASSWORD = 'strong_password';

Osservazioni:

  • In SQL Server, gli utenti del database contenuto devono essere abilitati per l'istanza di SQL Server. Per altre informazioni, vedere Opzione di configurazione del server di autenticazione del database contenuto.

  • Gli utenti di database indipendenti e gli account di accesso con nomi non sovrapposti possono coesistere nelle applicazioni.

  • Se nel database master è presente un account di accesso con il nome name1 e si crea un utente del database contenuto denominato name1, quando nella stringa di connessione viene specificato un nome di database, il contesto dell'utente del database verrà selezionato invece del contesto di accesso durante la connessione al database. Ovvero, l'utente del database contenuto avrà la precedenza sugli accessi con lo stesso nome.

  • Nel database SQL, il nome dell'utente del database contenuto non può corrispondere al nome dell'account amministratore del server.

  • L'account amministratore del server di database SQL non può mai essere un utente contenuto di un database. L'amministratore del server dispone di autorizzazioni sufficienti per creare e gestire utenti di database indipendenti. L'amministratore del server può concedere autorizzazioni agli utenti del database contenuti nei database degli utenti.

  • Poiché gli utenti del database contenuto sono entità a livello di database, è necessario creare utenti di database contenuti in ogni database in cui risulteranno necessari. L'identità è limitata al database ed è indipendente in tutti gli aspetti di un utente con lo stesso nome e la stessa password in un altro database nello stesso server.

  • Usare le stesse password di complessità usate normalmente per gli account di accesso.

Vedere anche

Database contenuti
Procedure di sicurezza consigliate con i database indipendenti
CREATE USER (Transact-SQL)