Utenti di database indipendente: rendere portabile un databaseContained Database Users - Making Your Database Portable

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzureSìAzure SQL Data Warehouse Sì Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Usare gli utenti di database indipendente per autenticare le connessioni SQL ServerSQL Server e Database SQLSQL Database a livello di database.Use contained database users to authenticate SQL ServerSQL Server and Database SQLSQL Database connections at the database level. Un database indipendente è un database isolato dagli altri database e dall'istanza di SQL ServerSQL Server/ Database SQLSQL Database (e del database master) che ospita il database.A contained database is a database that is isolated from other databases and from the instance of SQL ServerSQL Server/ Database SQLSQL Database (and the master database) that hosts the database. SQL ServerSQL Server supporta gli utenti di database indipendente per l'autenticazione di Windows e SQL ServerSQL Server . supports contained database users for both Windows and SQL ServerSQL Server authentication. Quando si usa Database SQLSQL Database, combinare gli utenti di del database indipendente con le regole firewall a livello di database.When using Database SQLSQL Database, combine contained database users with database level firewall rules. 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.This topic reviews the differences and benefits of using the contained database model compared to traditional login/user model and Windows or server-level firewall rules. 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.Specific scenarios, manageability or application business logic may still require use of traditional login/user model and server-level firewall rules.

Nota

Quando MicrosoftMicrosoft evolverà il servizio Database SQLSQL Database 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.As MicrosoftMicrosoft evolves the Database SQLSQL Database service and moves towards higher guaranteed SLAs you may be required to switch to the contained database user model and database-scoped firewall rules to attain the higher availability SLA and higher max login rates for a given database. MicrosoftMicrosoft invita quindi ad adottare questo approccio già a partire da oggi. encourage you to consider such changes today.

Modello tradizionale basato su account di accesso e utenteTraditional Login and User Model

Nel modello di connessione tradizionale gli utenti di Windows o i membri di gruppi di Windows si connettono al Motore di databaseDatabase Engine fornendo le credenziali utente o di gruppo autenticate da Windows.In the traditional connection model, Windows users or members of Windows groups connect to the Motore di databaseDatabase Engine by providing user or group credentials authenticated by Windows. In alternativa si può specificare un nome e una password e connettersi usando l'autenticazione di SQL ServerSQL Server .Or you can provide both a name and password and connects by using SQL ServerSQL Server authentication. In entrambi i casi, il database master deve disporre di un account di accesso corrispondente alle credenziali di connessione.In both cases, the master database must have a login that matches the connecting credentials. Dopo che il Motore di databaseDatabase Engine ha verificato le credenziali di autenticazione di Windows o ha autenticato le credenziali di autenticazione di SQL ServerSQL Server , la connessione in genere tenta di connettersi a un database utente.After the Motore di databaseDatabase Engine confirms the Windows authentication credentials or authenticates the SQL ServerSQL Server authentication credentials, the connection typically attempts to connect to a user database. 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.To connect to a user database, the login must be able to be mapped to (that is, associated with) a database user in the user database. La stringa di connessione può inoltre specificare la connessione a un database specifico. Questo è facoltativo in SQL ServerSQL Server , ma obbligatorio nel Database SQLSQL Database.The connection string may also specify connecting to a specific database which is optional in SQL ServerSQL Server but required in Database SQLSQL Database.

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.The important principal is that both the login (in the master database) and the user (in the user database) must exist and be related to each other. 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 ServerSQL Server o Database SQL di AzureAzure SQL Database di hosting diverso.This means that the connection to the user database has a dependency upon the login in the master database, and this limits the ability of the database to be moved to a different hosting SQL ServerSQL Server or Database SQL di AzureAzure SQL Database server. 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.And if, for any reason, a connection to the master database is not available (for example, a failover is in progress), the overall connection time will be increased or connection might time out. Consequently this may reduce connection scalability.

Modello di utente di database indipendenteContained Database User Model

Nel modello di utente di database indipendente l'account di accesso nel database master non è presente.In the contained database user model, the login in the master database is not present. 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.Instead, the authentication process occurs at the user database, and the database user in the user database does not have an associated login in the master database. Il modello di utente di database indipendente supporta sia l'autenticazione di Windows che l'autenticazione di SQL ServerSQL Server e può essere usato sia in SQL ServerSQL Server che nel Database SQLSQL Database.The contained database user model supports both Windows authentication and SQL ServerSQL Server authentication, and can be used in both SQL ServerSQL Server and Database SQLSQL 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 databaseDatabase Engine sappia quale database è responsabile della gestione del processo di autenticazione.To connect as a contained database user, the connection string must always contain a parameter for the user database so that the Motore di databaseDatabase Engine knows which database is responsible for managing the authentication process. 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.The activity of the contained database user is limited to the authenticating database, so when connecting as a contained database user, the database user account must be independently created in each database that the user will need. Per modificare i database, gli utenti del Database SQLSQL Database devono creare una nuova connessione.To change databases, Database SQLSQL Database users must create a new connection. Gli utenti di database indipendente in SQL ServerSQL Server possono modificare i database se è presente un utente identico in un altro database.Contained database users in SQL ServerSQL Server can change databases if an identical user is present in another database.

Azure: Database SQLSQL Database e SQL Data WarehouseSQL Data Warehouse supportano le identità di Azure Active Directory come utenti di database indipendente.Azure: Database SQLSQL Database and SQL Data WarehouseSQL Data Warehouse support Azure Active Directory identities as contained database users. Database SQLSQL Database supporta gli utenti di database indipendente che usano l'autenticazione di SQL ServerSQL Server , mentre SQL Data WarehouseSQL Data Warehouse non li supporta. supports contained database users using SQL ServerSQL Server authentication, but SQL Data WarehouseSQL Data Warehouse does not. Per altre informazioni, vedere Connessione al database SQL oppure a SQL Data Warehouse con l'autenticazione di Azure Active Directory.For more information, see Connecting to SQL Database By Using Azure Active Directory Authentication. 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.When using Azure Active Directory authentication, connections from SSMS can be made using Active Directory Universal Authentication. 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.Administrators can configure Universal Authentication to require Multi-Factor Authentication, which verifies identity by using a phone call, text message, smart card with pin, or mobile app notification. Per altre informazioni, vedere Supporto di SQL Server Management Studio (SSMS) per l'autenticazione MFA di Azure AD con database SQL e SQL Data Warehouse.For more information, see SSMS support for Azure AD MFA with SQL Database and SQL Data Warehouse.

Per Database SQLSQL Database e SQL Data WarehouseSQL Data Warehouse, 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.For Database SQLSQL Database and SQL Data WarehouseSQL Data Warehouse, since the database name is always required in the connection string, no changes are required to the connection string when switching from the traditional model to the contained database user model. Per le connessioni a SQL ServerSQL Server , il nome del database deve essere aggiunto alla stringa di connessione, se non è già presente.For SQL ServerSQL Server connections, the name of the database must be added to the connection string, if it is not already present.

Importante

Quando si usa il modello tradizionale, i ruoli e le autorizzazioni a livello di server possono limitare l'accesso a tutti i database.When using the traditional model, the server level roles and server level permissions can limit access to all databases. 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.When using the contained database model, database owners and database users with the ALTER ANY USER permission can grant access to the 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.This reduces the access control of high privileged server logins and expands the access control to include high privileged database users.

FirewallFirewalls

SQL ServerSQL 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.Windows firewall rules apply to all connections and have the same effects on logins (traditional model connections) and contained database users. Per altre informazioni su Windows Firewall, vedere Configurare Windows Firewall per l'accesso al motore di database.For more information about the Windows firewall, see Configure a Windows Firewall for Database Engine Access.

Database SQLSQL Database Firewall Firewalls

Database SQLSQL Database 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). allows separate firewall rules for sever level connections (logins) and for database level connections (contained database users). Durante la connessione a un database utente vengono verificate per prime le regole del firewall a livello di database.When connecting to a user database, first database firewall rules are checked. 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 logico.If there is no rule that allows access to the database, the server level firewall rules are checked, which requires access to the logical server master database. 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.Database level firewall rules combined with contained database users can eliminate necessity to access master database of the server during connection providing improved connection scalability.

Per altre informazioni sulle regole del firewall del Database SQLSQL Database , vedere gli argomenti seguenti:For more information about Database SQLSQL Database firewall rules, see the following topics:

Differenze di sintassiSyntax Differences

Modello tradizionaleTraditional model Modello di utente di database indipendenteContained database user model
Quando connesso al database master:When connected to the master database:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Quindi, quando connesso a un database utente:Then when connected to a user database:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Quando connesso a un database utente:When connected to a user database:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Modello tradizionaleTraditional model Modello di utente di database indipendenteContained database user model
Per cambiare la password, nel contesto del database master:To change password, in context of master DB:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
Per cambiare la password, nel contesto del database utente:To change password, in context of user DB:

ALTER USER user_name WITH PASSWORD = 'strong_password';

OsservazioniRemarks

  • In SQL ServerSQL Servergli utenti di database indipendente devono essere abilitati per l'istanza di SQL ServerSQL Server.In SQL ServerSQL Server, contained database users must be enabled for the instance of SQL ServerSQL Server. Per altre informazioni, vedere Opzione di configurazione del server contained database authentication.For more information, see contained database authentication Server Configuration Option.

  • Gli account di accesso e gli utenti di database indipendente con nomi diversi possono coesistere nelle applicazioni.Contained database users and logins with non-overlapping names can co-exist in your applications.

  • 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, ovveroIf there is a login in master database with the name name1 and you create a contained database user named name1, when a database name is provided in the connection string, the context of the database user will be picked over login context when connecting to the database. gli utenti di database indipendente avranno la precedenza rispetto agli account di accesso con lo stesso nome.That is, contained database user will take precedence over logins with the same name.

  • Nel Database SQLSQL Database il nome dell'utente di database indipendente non può essere uguale a quello dell'account dell'amministratore del server.In Database SQLSQL Database the name of contained database user cannot be the same as the name of the server admin account.

  • L'account dell'amministratore del server Database SQLSQL Database non può mai essere un utente di database indipendente.The Database SQLSQL Database server admin account can never be a contained database user. L'amministratore del server dispone di autorizzazioni sufficienti per creare e gestire utenti del database indipendente.The server admin has sufficient permissions to create and manage contained database users. L'amministratore del server può concedere a utenti di database indipendente autorizzazioni per i database utente.The server admin can grant permissions to contained database users on user databases.

  • 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.Since contained database users are database level principals, you need to create contained database users in every database that you would use them. 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.The identity is confined to the database and is independent in all aspects from a user with same name and same password in another database in the same server.

  • Usare le stesse password complesse usate in genere per gli account di accesso.Use the same strength passwords that you would normally use for logins.

Vedere ancheSee Also

Database indipendenti Contained Databases
Procedure consigliate per la sicurezza in database indipendenti Security Best Practices with Contained Databases
CREATE USER (Transact-SQL) CREATE USER (Transact-SQL)
Connessione al database SQL oppure a SQL Data Warehouse con l'autenticazione di Azure Active DirectoryConnecting to SQL Database By Using Azure Active Directory Authentication