Controllo e concessione dell'accesso al databaseControlling and granting database access

Dopo aver configurato le regole del firewall, gli utenti possono connettersi a un database SQL come uno degli account di amministratore, il proprietario del database o un utente del database nel database.When firewall rules have been configured, people can connect to a SQL Database as one of the administrator accounts, as the database owner, or as a database user in the database.

Nota

Questo argomento è applicabile al server SQL di Azure e ai database SQL e di SQL Data Warehouse creati nel server SQL di Azure.This topic applies to Azure SQL server, and to both SQL Database and SQL Data Warehouse databases that are created on the Azure SQL server. Per semplicità, "database SQL" viene usato per fare riferimento sia al database SQL che al database di SQL Data Warehouse.For simplicity, SQL Database is used when referring to both SQL Database and SQL Data Warehouse.

Suggerimento

Per un'esercitazione, vedere Proteggere il database SQL di Azure.For a tutorial, see Secure your Azure SQL Database.

Account amministrativi senza restrizioniUnrestricted administrative accounts

Sono disponibili due account amministrativi, Amministratore del server e Amministratore di Active Directory, che agiscono come amministratori.There are two administrative accounts (Server admin and Active Directory admin) that act as administrators. Per identificare questi account amministrativi per il server SQL, aprire il portale di Azure e passare alle proprietà del server SQL.To identify these administrator accounts for your SQL server, open the Azure portal, and navigate to the properties of your SQL server.

Amministratori del server SQL

  • Amministratore del server Server admin
    Quando si crea un server SQL di Azure è necessario designare un accesso amministratore server.When you create an Azure SQL server, you must designate a Server admin login. Il server SQL crea l'account come account di accesso nel database master.SQL server creates that account as a login in the master database. Tale account, che effettua la connessione con l'autenticazione di SQL Server (nome utente e password),This account connects using SQL Server authentication (user name and password). Può esistere un solo account di questo tipo.Only one of these accounts can exist.
  • Amministratore di Azure Active Directory Azure Active Directory admin
    È possibile configurare come amministratore anche un account singolo o di gruppo di sicurezza di Azure Active Directory.One Azure Active Directory account, either an individual or security group account, can also be configured as an administrator. La configurazione di un amministratore di Azure AD è facoltativa, ma è necessaria se si vuole usare gli account di Azure AD per la connessione al database SQL.It is optional to configure an Azure AD administrator, but an Azure AD administrator must be configured if you want to use Azure AD accounts to connect to SQL Database. Per altre informazioni sulla configurazione dell'accesso con Azure Active Directory, vedere Connessione al database SQL oppure a SQL Data Warehouse con l'autenticazione di Azure Active Directory e Supporto di SSMS per l'autenticazione MFA di Azure AD con database SQL e SQL Data Warehouse.For more information about configuring Azure Active Directory access, see Connecting to SQL Database or SQL Data Warehouse By Using Azure Active Directory Authentication and SSMS support for Azure AD MFA with SQL Database and SQL Data Warehouse.

Gli account Amministratore del server e Amministratore di Azure Active Directory hanno le caratteristiche seguenti:The Server admin and Azure AD admin accounts has the following characteristics:

  • Questi sono gli unici account che possono connettersi automaticamente a qualsiasi database SQL nel server.These are the only accounts that can automatically connect to any SQL Database on the server. Per connettersi a un database utente, gli altri account devono essere il proprietario del database o avere un account utente nel database utente.(To connect to a user database, other accounts must either be the owner of the database, or have a user account in the user database.)
  • Questi account accedono ai database utente come utente dbo e hanno a disposizione tutte le autorizzazioni nei database utente.These accounts enter user databases as the dbo user and they have all the permissions in the user databases. Anche il proprietario di un database utente accede al database come utente dbo.(The owner of a user database also enters the database as the dbo user.)
  • Questi account non accedono al database master come utente dbo e hanno autorizzazioni limitate nel database master.These accounts do not enter the master database as the dbo user and they have limited permissions in master.
  • Questi account non sono membri del ruolo predefinito sysadmin di SQL Server, che non è disponibile nel database SQL.These accounts are not members of the standard SQL Server sysadmin fixed server role, which is not available in SQL database.
  • Questi account possono creare, modificare ed eliminare database, account di accesso, utenti nel database master e regole firewall a livello di server.These accounts can create, alter, and drop databases, logins, users in master, and server-level firewall rules.
  • Questi account possono aggiungere e rimuovere membri per i ruoli dbmanager e loginmanager.These accounts can add and remove members to the dbmanager and loginmanager roles.
  • Questi account possono visualizzare la tabella di sistema sys.sql_logins.These accounts can view the sys.sql_logins system table.

Configurazione del firewallConfiguring the firewall

Quando è configurato un firewall a livello di server per un singolo indirizzo IP o per un intervallo di indirizzi IP, l'amministratore del server SQL e l'amministratore di Azure Active Directory possono connettersi al database master e a tutti i database utente.When the server-level firewall is configured for an individual IP address or range, the SQL server admin and the Azure Active Directory admin can connect to the master database and all the user databases. Il firewall iniziale a livello di server può essere configurato tramite il portale di Azure, usando PowerShell o l'API REST.The initial server-level firewall can be configured through the Azure portal, using PowerShell or using the REST API. Dopo che è stata stabilita una connessione, è possibile configurare anche regole aggiuntive del firewall a livello di server con l'istruzione Transact-SQL.Once a connection is made, additional server-level firewall rules can also be configured by using Transact-SQL.

Percorso di accesso degli amministratoriAdministrator access path

Quando il firewall a livello di server è configurato correttamente, l'amministratore del server SQL e l'amministratore di Azure Active Directory possono connettersi usando strumenti client come SQL Server Management Studio o SQL Server Data Tools.When the server-level firewall is properly configured, the SQL server admin and the Azure Active Directory admin can connect using client tools such as SQL Server Management Studio or SQL Server Data Tools. Solo gli strumenti più recenti offrono tutte le caratteristiche e le funzionalità.Only the latest tools provide all the features and capabilities. Il diagramma seguente illustra una configurazione tipica per i due account amministratore.The following diagram shows a typical configuration for the two administrator accounts.

Percorso di accesso degli amministratori

Quando viene usata una porta aperta nel firewall a livello di server, gli amministratori possono connettersi a qualsiasi database SQL.When using an open port in the server-level firewall, administrators can connect to any SQL Database.

Connettersi a un database con SQL Server Management StudioConnecting to a database by using SQL Server Management Studio

Per una procedura dettagliata sulla creazione di un server, un database, regole del firewall a livello di server e sull'uso di SQL Server Management Studio per eseguire query in un database, vedere Introduzione ai server del database SQL di Azure, ai database e alle regole del firewall usando il portale di Azure ed SQL Server Management Studio.For a walk-through of creating a server, a database, server-level firewall rules, and using SQL Server Management Studio to query a database, see Get started with Azure SQL Database servers, databases, and firewall rules by using the Azure portal and SQL Server Management Studio.

Importante

È consigliabile usare sempre la versione più aggiornata di Management Studio per restare sincronizzati con gli aggiornamenti di Microsoft Azure e del database SQL.It is recommended that you always use the latest version of Management Studio to remain synchronized with updates to Microsoft Azure and SQL Database. Aggiornare SQL Server Management Studio.Update SQL Server Management Studio.

Ruoli amministrativi aggiuntivi a livello di serverAdditional server-level administrative roles

Oltre ai ruoli amministrativi a livello di server illustrati in precedenza, il database SQL offre due ruoli amministrativi con restrizioni nel database master, a cui è possibile aggiungere account utente che concedono autorizzazioni per la creazione di database o la gestione degli accessi.In addition to the server-level administrative roles discussed previously, SQL Database provides two restricted administrative roles in the master database to which user accounts can be added that grant permissions to either create databases or manage logins.

Autori di databaseDatabase creators

Uno di questi ruoli amministrativi è il ruolo dbmanager.One of these administrative roles is the dbmanager role. I membri di questo ruolo possono creare nuovi database.Members of this role can create new databases. Per usare questo ruolo, creare un utente nel database master e quindi aggiungere l'utente al ruolo dbmanager del database.To use this role, you create a user in the master database and then add the user to the dbmanager database role. Per creare un database, l'utente deve essere basato su un account di accesso di SQL Server nel database master o essere un utente di database indipendente basato su un utente di Azure Active Directory.To create a database, the user must be a user based on a SQL Server login in the master database or contained database user based on an Azure Active Directory user.

  1. Connettersi al database master usando un account amministratore.Using an administrator account, connect to the master database.
  2. Passaggio facoltativo: creare un account di accesso con autenticazione di SQL Server con l'istruzione CREATE LOGIN .Optional step: Create a SQL Server authentication login, using the CREATE LOGIN statement. Istruzione di esempio:Sample statement:

    CREATE LOGIN Mary WITH PASSWORD = '<strong_password>';
    

    Nota

    Quando si crea un account di accesso o un utente di database indipendente, usare una password complessa.Use a strong password when creating a login or contained database user. Per ulteriori informazioni, vedere Password complesse.For more information, see Strong Passwords.

    Per migliorare le prestazioni, gli account di accesso (entità a livello di server) vengono temporaneamente memorizzati nella cache a livello di database.To improve performance, logins (server-level principals) are temporarily cached at the database level. Per aggiornare la cache di autenticazione, vedere DBCC FLUSHAUTHCACHE.To refresh the authentication cache, see DBCC FLUSHAUTHCACHE.

  3. Nel database master creare un utente con l'istruzione CREATE USER .In the master database, create a user by using the CREATE USER statement. L'utente può essere un utente di database indipendente con autenticazione di Azure Active Directory (se l'ambiente è stato configurato per l'autenticazione di Azure AD), un utente di database indipendente con autenticazione di SQL Server oppure un utente con autenticazione di SQL Server basato su un account di accesso con autenticazione di SQL Server (creato nel passaggio precedente). Istruzioni di esempio:The user can be an Azure Active Directory authentication contained database user (if you have configured your environment for Azure AD authentication), or a SQL Server authentication contained database user, or a SQL Server authentication user based on a SQL Server authentication login (created in the previous step.) Sample statements:

    CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER;
    CREATE USER Tran WITH PASSWORD = '<strong_password>';
    CREATE USER Mary FROM LOGIN Mary; 
    
  4. Aggiungere il nuovo utente al ruolo del database dbmanager con l'istruzione ALTER ROLE .Add the new user, to the dbmanager database role by using the ALTER ROLE statement. Istruzioni di esempio:Sample statements:

    ALTER ROLE dbmanager ADD MEMBER Mary; 
    ALTER ROLE dbmanager ADD MEMBER [mike@contoso.com];
    

    Nota

    Poiché dbmanager è un ruolo del database nel database master, è possibile aggiungere solo un utente di database al ruolo dbmanager.The dbmanager is a database role in master database so you can only add a database user to the dbmanager role. Non si può aggiungere un account di accesso a livello di server a un ruolo a livello di database.You cannot add a server-level login to database-level role.

  5. Se necessario, configurare una regola firewall per consentire la connessione del nuovo utente.If necessary, configure a firewall rule to allow the new user to connect. Il nuovo utente può essere gestito da una regola firewall esistente.(The new user might be covered by an existing firewall rule.)

L'utente potrà così connettersi al database master e creare nuovi database.Now the user can connect to the master database and can create new databases. L'account che crea il database ne diventa il proprietario.The account creating the database becomes the owner of the database.

Gestione degli account di accessoLogin managers

L'altro ruolo amministrativo è il ruolo di gestione degli account di accesso.The other administrative role is the login manager role. I membri di questo ruolo possono creare nuovi account di accesso nel database master.Members of this role can create new logins in the master database. Se si vuole, è possibile completare la stessa procedura (ovvero creare un account di accesso e aggiungere un utente al ruolo loginmanager) per consentire a un utente di creare nuovi account di accesso nel database master.If you wish, you can complete the same steps (create a login and user, and add a user to the loginmanager role) to enable a user to create new logins in the master. Gli account di accesso non sono generalmente necessari perché è consigliabile usare utenti di database indipendente che eseguono l'autenticazione a livello di database anziché utenti basati su account di accesso.Usually logins are not necessary as Microsoft recommends using contained database users, which authenticate at the database-level instead of using users based on logins. Per altre informazioni, vedere Utenti di database indipendente: rendere portabile un database.For more information, see Contained Database Users - Making Your Database Portable.

Utenti non amministratoriNon-administrator users

Per gli account non amministratore non è in genere necessario l'accesso al database master.Generally, non-administrator accounts do not need access to the master database. Creare utenti di database indipendente a livello di database con l'istruzione CREATE USER (Transact-SQL) .Create contained database users at the database level using the CREATE USER (Transact-SQL) statement. L'utente può essere un utente di database indipendente con autenticazione di Azure Active Directory (se l'ambiente è stato configurato per l'autenticazione di Azure AD), un utente di database indipendente con autenticazione di SQL Server oppure un utente con autenticazione di SQL Server basato su un account di accesso con autenticazione di SQL Server (creato nel passaggio precedente). Per altre informazioni, vedere Utenti di database indipendente: rendere portabile un database.The user can be an Azure Active Directory authentication contained database user (if you have configured your environment for Azure AD authentication), or a SQL Server authentication contained database user, or a SQL Server authentication user based on a SQL Server authentication login (created in the previous step.) For more information, see Contained Database Users - Making Your Database Portable.

Per creare utenti, connettersi al database ed eseguire istruzioni simili ai seguenti esempi:To create users, connect to the database, and execute statements similar to the following examples:

CREATE USER Mary FROM LOGIN Mary; 
CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER;

Inizialmente, solo gli amministratori o il proprietario del database possono creare utenti.Initially, only one of the administrators or the owner of the database can create users. Per autorizzare utenti aggiuntivi a creare nuovi utenti, concedere all'utente selezionato l'autorizzazione ALTER ANY USER con un'istruzione come la seguente:To authorize additional users to create new users, grant that selected user the ALTER ANY USER permission, by using a statement such as:

GRANT ALTER ANY USER TO Mary;

Per concedere a utenti aggiuntivi il controllo completo del database, rendere tali utenti membri del ruolo predefinito del database db_owner con l'istruzione ALTER ROLE.To give additional users full control of the database, make them a member of the db_owner fixed database role using the ALTER ROLE statement.

Nota

Il motivo più comune per creare utenti di database basati su account di accesso è la presenza di utenti con autenticazione di SQL Server che devono accedere a più database.The most common reason to create database users based on logins, is when you have SQL Server authentication users that need access to multiple databases. Gli utenti basati su account di accesso sono associati all'account di accesso, per il quale viene gestita una sola password.Users based on logins are tied to the login, and only one password that is maintained for that login. Gli utenti di database indipendente in singoli database sono ognuno una singola entità che gestisce una propria password.Contained database users in individual databases are each individual entities and each maintains its own password. Questo può creare confusione se gli utenti di database indipendente non usano password identiche.This can confuse contained database users if they do not maintain their passwords as identical.

Configurazione del firewall a livello di databaseConfiguring the database-level firewall

Come procedura consigliata, gli utenti non amministratori dovrebbero avere accesso tramite il firewall solo ai database usati.As a best practice, non-administrator users should only have access through the firewall to the databases that they use. Invece di autorizzarne gli indirizzi IP tramite il firewall a livello di server e concedere loro l'accesso a tutti i database, usare l'istruzione sp_set_database_firewall_rule per configurare il firewall a livello di database.Instead of authorizing their IP addresses through the server-level firewall and giving them access to all databases, use the sp_set_database_firewall_rule statement to configure the database-level firewall. Il firewall a livello di database non può essere configurato usando il portale.The database-level firewall cannot be configured by using the portal.

Percorso di accesso degli utenti non amministratoriNon-administrator access path

Quando il firewall a livello di database è configurato correttamente, gli utenti di database possono connettersi usando strumenti client come SQL Server Management Studio o SQL Server Data Tools.When the database-level firewall is properly configured, the database users can connect using client tools such as SQL Server Management Studio or SQL Server Data Tools. Solo gli strumenti più recenti offrono tutte le caratteristiche e le funzionalità.Only the latest tools provide all the features and capabilities. Il diagramma seguente illustra un percorso di accesso tipico degli utenti non amministratori.The following diagram shows a typical non-administrator access path.

Percorso di accesso degli utenti non amministratori

Gruppi e ruoliGroups and roles

In una gestione efficiente degli accessi vengono usate autorizzazioni assegnate a gruppi e ruoli anziché singoli utenti.Efficient access management uses permissions assigned to groups and roles instead of individual users.

  • Quando si usa l'autenticazione di Azure Active Directory, inserire gli utenti di Azure Active Directory in un gruppo di Azure Active Directory.When using Azure Active Directory authentication, put Azure Active Directory users into an Azure Active Directory group. Creare un utente di database indipendente per il gruppo.Create a contained database user for the group. Inserire uno o più utenti di database in un ruolo del database e quindi assegnare autorizzazioni al ruolo del database.Place one or more database users into a database role and then assign permissions to the database role.

  • Quando si usa l'autenticazione di SQL Server, creare utenti di database indipendenti nel database.When using SQL Server authentication, create contained database users in the database. Inserire uno o più utenti di database in un ruolo del database e quindi assegnare autorizzazioni al ruolo del database.Place one or more database users into a database role and then assign permissions to the database role.

I ruoli del database possono essere ruoli predefiniti come db_owner, db_ddladmin, db_datawriter, db_datareader, db_denydatawriter e db_denydatareader.The database roles can be the built-in roles such as db_owner, db_ddladmin, db_datawriter, db_datareader, db_denydatawriter, and db_denydatareader. Per concedere autorizzazioni complete a un numero limitato di utenti viene usato comunemente db_owner.db_owner is commonly used to grant full permission to only a few users. Gli altri ruoli predefiniti del database sono utili per ottenere rapidamente un database semplice nello sviluppo, ma non sono consigliabili per la maggior parte dei database di produzione.The other fixed database roles are useful for getting a simple database in development quickly, but are not recommended for most production databases. Il ruolo predefinito del database db_datareader, ad esempio, concede l'accesso in lettura a tutte le tabelle del database, che in genere è più di quanto strettamente necessario.For example, the db_datareader fixed database role grants read access to every table in the database, which is usually more than is strictly necessary. È preferibile usare l'istruzione CREATE ROLE per creare ruoli del database definiti dall'utente e concedere con attenzione a ogni ruolo le autorizzazioni minime necessarie per le esigenze aziendali.It is far better to use the CREATE ROLE statement to create your own user-defined database roles and carefully grant each role the least permissions necessary for the business need. Quando un utente è membro di più ruoli, vengono aggregate le autorizzazioni di tutti.When a user is a member of multiple roles, they aggregate the permissions of them all.

AutorizzazioniPermissions

Nel database SQL possono essere concesse o negate singolarmente oltre 100 autorizzazioni.There are over 100 permissions that can be individually granted or denied in SQL Database. Molte di queste autorizzazioni sono annidate.Many of these permissions are nested. L'autorizzazione UPDATE per uno schema, ad esempio, include l'autorizzazione UPDATE per ogni tabella all'interno di tale schema.For example, the UPDATE permission on a schema includes the UPDATE permission on each table within that schema. Come nella maggior parte dei sistemi di autorizzazioni, la negazione di un'autorizzazione determina l'override di una concessione.As in most permission systems, the denial of a permission overrides a grant. A causa dell'annidamento e del numero delle autorizzazioni, progettare un sistema di autorizzazioni appropriato per proteggere correttamente il database può richiedere un attento studio.Because of the nested nature and the number of permissions, it can take careful study to design an appropriate permission system to properly protect your database. Per iniziare, vedere l'elenco di autorizzazioni in Autorizzazioni (Motore di database) e la grafica in formato di poster relativa alle autorizzazioni.Start with the list of permissions at Permissions (Database Engine) and review the poster size graphic of the permissions.

Considerazioni e restrizioniConsiderations and restrictions

Quando si gestiscono gli accessi e gli utenti nel database SQL, prendere in considerazione quanto segue:When managing logins and users in SQL Database, consider the following:

  • È necessario essere connessi al database master durante l'esecuzione delle istruzioni CREATE/ALTER/DROP DATABASE.You must be connected to the master database when executing the CREATE/ALTER/DROP DATABASE statements.
  • L'utente corrispondente all'account di accesso Amministratore del server non può essere modificato o eliminato.The database user corresponding to the Server admin login cannot be altered or dropped.
  • L'inglese americano è la lingua predefinita dell'account di accesso Amministratore del server.US-English is the default language of the Server admin login.
  • Soltanto gli amministratori (amministratore del server o amministratore di Azure AD) e i membri del ruolo di database dbmanager nel database master sono autorizzati a eseguire le istruzioni CREATE DATABASE e DROP DATABASE.Only the administrators (Server admin login or Azure AD administrator) and the members of the dbmanager database role in the master database have permission to execute the CREATE DATABASE and DROP DATABASE statements.
  • È necessario essere connessi al database master durante l'esecuzione delle istruzioni CREATE/ALTER/DROP LOGIN .You must be connected to the master database when executing the CREATE/ALTER/DROP LOGIN statements. È tuttavia sconsigliato l'uso di account di accesso.However using logins is discouraged. Usare invece gli utenti del database indipendente.Use contained database users instead.
  • Per connettersi a un database utente è necessario specificare il nome del database nella stringa di connessione.To connect to a user database, you must provide the name of the database in the connection string.
  • Soltanto gli utenti con accesso dell’entità di livello server e i membri del ruolo del database loginmanager nel database master sono autorizzati a eseguire le istruzioni CREATE LOGIN, ALTER LOGIN e DROP LOGIN.Only the server-level principal login and the members of the loginmanager database role in the master database have permission to execute the CREATE LOGIN, ALTER LOGIN, and DROP LOGIN statements.
  • Quando si esegue le istruzioni CREATE/ALTER/DROP LOGIN e CREATE/ALTER/DROP DATABASE in un'applicazione ADO.NET, non è consentito utilizzare i comandi con parametri.When executing the CREATE/ALTER/DROP LOGIN and CREATE/ALTER/DROP DATABASE statements in an ADO.NET application, using parameterized commands is not allowed. Per ulteriori informazioni, vedere Comandi e parametri.For more information, see Commands and Parameters.
  • Quando si esegue le istruzioni CREATE/ALTER/DROP DATABASE e CREATE/ALTER/DROP LOGIN, ognuna di queste istruzioni deve essere l'unica istruzione in un batch Transact-SQL.When executing the CREATE/ALTER/DROP DATABASE and CREATE/ALTER/DROP LOGIN statements, each of these statements must be the only statement in a Transact-SQL batch. In caso contrario, si verifica un errore.Otherwise, an error occurs. Ad esempio, il seguente Transact-SQL controlla se il database esiste.For example, the following Transact-SQL checks whether the database exists. Se esiste, un’istruzione DROP DATABASE viene chiamata per rimuovere il database.If it exists, a DROP DATABASE statement is called to remove the database. Poiché l’istruzione DROP DATABASE non è l'unica istruzione nel batch, l'esecuzione della seguente istruzione Transact-SQL genera un errore.Because the DROP DATABASE statement is not the only statement in the batch, executing the following Transact-SQL statement results in an error.

    IF EXISTS (SELECT [name]
             FROM   [sys].[databases]
             WHERE  [name] = N'database_name')
    DROP DATABASE [database_name];
    GO
    
  • Quando si esegue l’istruzione CREATE USER con l’opzione FOR/FROM LOGIN, l’istruzione deve essere l'unica in un batch Transact-SQL.When executing the CREATE USER statement with the FOR/FROM LOGIN option, it must be the only statement in a Transact-SQL batch.

  • Quando si esegue l’istruzione ALTER USER con l’opzione WITH LOGIN, l’istruzione deve essere l'unica in un batch Transact-SQL.When executing the ALTER USER statement with the WITH LOGIN option, it must be the only statement in a Transact-SQL batch.
  • Per CREATE/ALTER/DROP un utente richiede l’autorizzazione ALTER ANY USER per il database.To CREATE/ALTER/DROP a user requires the ALTER ANY USER permission on the database.
  • Quando il proprietario di un ruolo del database tenta di aggiungere o rimuovere un altro utente del database in o da tale ruolo del database, potrebbe verificarsi il seguente errore: L’utente o il ruolo 'Name' non esiste nel database.When the owner of a database role tries to add or remove another database user to or from that database role, the following error may occur: User or role 'Name' does not exist in this database. Questo errore si verifica perché l'utente non è visibile al proprietario.This error occurs because the user is not visible to the owner. Per risolvere questo problema, concedere al proprietario del ruolo l’autorizzazione VIEW DEFINITION per l'utente.To resolve this issue, grant the role owner the VIEW DEFINITION permission on the user.

Passaggi successiviNext steps