Introduzione alle autorizzazioni del motore di databaseGetting Started with Database Engine Permissions

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2008)sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Le autorizzazioni del Motore di databaseDatabase Engine vengono gestite a livello di server tramite gli account di accesso e i ruoli del server e a livello di database tramite gli utenti e i ruoli del database.Permissions in the Motore di databaseDatabase Engine are managed at the server level through logins and server roles, and at the database level through database users and database roles. Il modello per il Database SQLSQL Database espone lo stesso sistema all'interno di ogni database, ma le autorizzazioni a livello di server non saranno disponibili.The model for Database SQLSQL Database exposes the same system within each database, but the server level permissions are not available. Questo argomento illustra alcuni concetti di base sulla sicurezza e quindi descrive un'implementazione tipica delle autorizzazioni.This topic reviews some basic security concepts and then describes a typical implementation of the permissions.

Entità di sicurezzaSecurity Principals

Con entità di sicurezza si definiscono le identità che usano SQL ServerSQL Server e a cui è possibile assegnare delle autorizzazioni per eseguire varie azioni.Security principal is the official name of the identities that use SQL ServerSQL Server and that can be assigned permission to take actions. Si tratta in genere di utenti o gruppi di utenti, ma possono essere altre entità che fingono di essere utenti.They are usually people or groups of people, but can be other entities that pretend to be people. Le entità di sicurezza possono essere create e gestite con il linguaggio Transact-SQLTransact-SQL elencato o con SQL Server Management StudioSQL Server Management Studio.The security principals can be created and managed using the Transact-SQLTransact-SQL listed, or by using SQL Server Management StudioSQL Server Management Studio.

Account di accessoLogins
Gli account di accesso sono account utente singoli per l'accesso al Motore di database di SQL ServerSQL Server Database Engine.Logins are individual user accounts for logging on to the Motore di database di SQL ServerSQL Server Database Engine. SQL ServerSQL Server e il Database SQLSQL Database supportano account di accesso basati sull'autenticazione di Windows e account di accesso basati sull'autenticazione di SQL ServerSQL Server . and Database SQLSQL Database support logins based on Windows authentication and logins based on SQL ServerSQL Server authentication. Per informazioni sui due tipi di account di accesso, vedere Choose an Authentication Mode.For information about the two types of logins, see Choose an Authentication Mode.

Ruoli predefiniti del serverFixed Server Roles
In SQL ServerSQL Serveri ruoli predefiniti del server sono costituiti da un set di ruoli preconfigurati che forniscono una serie appropriata di autorizzazioni a livello di server.In SQL ServerSQL Server, fixed server roles are a set of pre-configured roles that provide convenient group of server-level permissions. Gli account di accesso possono essere aggiunti ai ruoli con l'istruzione ALTER SERVER ROLE ... ADD MEMBER .Logins can be added to the roles using the ALTER SERVER ROLE ... ADD MEMBER statement. Per altre informazioni, vedere ALTER SERVER ROLE (Transact-SQL).For more information, see ALTER SERVER ROLE (Transact-SQL). Database SQLSQL Database non supporta i ruoli predefiniti del server, ma ha due ruoli nel database master (dbmanager e loginmanager) che fungono da ruoli del server. does not support the fixed server roles, but has two roles in the master database (dbmanager and loginmanager) that act like server roles.

Ruoli del server definiti dall'utenteUser-defined Server Roles
In SQL ServerSQL Serverè possibile creare ruoli del server personalizzati e assegnarvi autorizzazioni a livello di server.In SQL ServerSQL Server, you can create your own server roles and assign server-level permissions to them. Gli account di accesso possono essere aggiunti ai ruoli del server con l'istruzione ALTER SERVER ROLE ... ADD MEMBER .Logins can be added to the server roles using the ALTER SERVER ROLE ... ADD MEMBER statement. Per altre informazioni, vedere ALTER SERVER ROLE (Transact-SQL).For more information, see ALTER SERVER ROLE (Transact-SQL). Database SQLSQL Database non supporta i ruoli del server definiti dall'utente. does not support the user-defined server roles.

Utenti di databaseDatabase Users
Agli account di accesso viene concesso l'accesso a un database creando un utente in un database ed eseguendo il mapping di tale utente di database all'account di accesso.Logins are granted access to a database by creating a database user in a database and mapping that database user to login. In genere, il nome utente di database è identico al nome dell'account di accesso, anche se non è necessario.Typically the database user name is the same as the login name, though it does not have to be the same. Ogni utente di database esegue il mapping a un singolo account di accesso.Each database user maps to a single login. Il mapping di un account di accesso può essere eseguito a un solo utente in un database, ma può essere eseguito come utente di database in diversi database.A login can be mapped to only one user in a database, but can be mapped as a database user in several different databases.

Gli utenti di database possono anche essere creati senza avere un account di accesso corrispondenteDatabase users can also be created that do not have a corresponding login. e vengono denominati utenti di database indipendente.These are called contained database users. MicrosoftMicrosoft promuove l'uso di utenti di database indipendente perché semplifica lo spostamento di un database in un altro server. encourages the use of contained database users because it makes it easier to move your database to a different server. Analogamente agli account di accesso, gli utenti di database indipendente possono usare l'autenticazione di Windows o l'autenticazione di SQL ServerSQL Server .Like a login, a contained database user can use either Windows authentication or SQL ServerSQL Server authentication. Per altre informazioni, vedere Utenti di database indipendente: rendere portabile un database.For more information, see Contained Database Users - Making Your Database Portable.

Esistono 12 tipi di utenti con piccole differenze per la modalità di autenticazione e la relativa rappresentazione.There are 12 types of users with slight differences in how they authenticate, and who they represent. Per vedere un elenco di utenti, vedere CREATE USER (Transact-SQL).To see a list of users, see CREATE USER (Transact-SQL).

Ruoli predefiniti del databaseFixed Database Roles
I ruoli predefiniti del database sono costituiti da un set di ruoli preconfigurati che forniscono una serie appropriata di autorizzazioni a livello di database.Fixed database roles are a set of pre-configured roles that provide convenient group of database-level permissions. Gli utenti del database e i ruoli del database definiti dall'utente possono essere aggiunti ai ruoli predefiniti del database con l'istruzione ALTER ROLE ... ADD MEMBER.Database users and user-defined database roles can be added to the fixed database roles using the ALTER ROLE ... ADD MEMBER statement. Per altre informazioni, vedere ALTER ROLE (Transact-SQL).For more information, see ALTER ROLE (Transact-SQL).

Ruoli del database definiti dall'utenteUser-defined Database Roles
Gli utenti con l'autorizzazione CREATE ROLE possono creare nuovi ruoli del database definiti dall'utente per rappresentare gruppi di utenti con autorizzazioni comuni.Users with the CREATE ROLE permission can create new user-defined database roles to represent groups of users with common permissions. In genere, le autorizzazioni vengono concesse o negate per l'intero ruolo, semplificando la gestione e il monitoraggio delle autorizzazioni.Typically permissions are granted or denied to the entire role, simplifying permissions management and monitoring. Gli utenti di database possono essere aggiunti ai ruoli del database con l'istruzione ALTER ROLE ... ADD MEMBER .Database users can be added to the database roles by using the ALTER ROLE ... ADD MEMBER statement. Per altre informazioni, vedere ALTER ROLE (Transact-SQL).For more information, see ALTER ROLE (Transact-SQL).

Altre entitàOther principals
Altre entità di sicurezza non illustrate nel presente articolo includono ruoli applicazione nonché account di accesso e utenti basati su certificati o chiavi asimmetriche.Additional security principals not discussed here include application roles, and logins and users based on certificates or asymmetric keys.

Per un grafico che mostra le relazioni tra utenti di Windows, gruppi di Windows, account di accesso e utenti di database, vedere Create a Database User.For a graphic showing the relationships between Windows users, Windows groups, logins, and database users, see Create a Database User.

Scenario tipicoTypical Scenario

L'esempio seguente rappresenta un metodo comune e consigliato di configurazione delle autorizzazioni.The following example represents a common and recommended method of configuring permissions.

In Active Directory o Azure Active Directory:In Active Directory or Azure Active Directory:

  1. Creare un utente di Windows per ogni utente.Create a Windows user for each person.

  2. Creare gruppi di Windows che rappresentano le unità di lavoro e le funzioni di lavoro.Create Windows groups that represent the work units and the work functions.

  3. Aggiungere gli utenti di Windows ai gruppi di Windows.Add the Windows users to the Windows groups.

Se l'utente che si connette verrà connesso a molti databaseIf the person connecting will be connecting to many databases

  1. Creare un account di accesso per i gruppi di Windows.Create a login for the Windows groups. Se si usa l'autenticazione di SQL ServerSQL Server , ignorare i passaggi di Active Directory e creare qui gli account di accesso con autenticazione di SQL ServerSQL Server .(If using SQL ServerSQL Server authentication, skip the Active Directory steps, and create SQL ServerSQL Server authentication logins here.)

  2. Nel database utente creare un utente di database per l'account di accesso che rappresenta i gruppi di Windows.In the user database, create a database user for the login representing the Windows groups.

  3. Nel database utente creare uno o più ruoli del database definiti dall'utente, ognuno dei quali rappresenta una funzione simile,In the user database, create one or more user-defined database roles, each representing a similar function. ad esempio analista finanziario e analista vendite.For example financial analyst, and sales analyst.

  4. Aggiungere gli utenti di database a uno o più ruoli del database definiti dall'utente.Add the database users to one or more user-defined database roles.

  5. Concedere le autorizzazioni ai ruoli del database definiti dall'utente.Grant permissions to the user-defined database roles.

Se l'utente che si connette verrà connesso a un solo databaseIf the person connecting will be connecting to only one database

  1. Creare un account di accesso per i gruppi di Windows.Create a login for the Windows groups. Se si usa l'autenticazione di SQL ServerSQL Server , ignorare i passaggi di Active Directory e creare qui gli account di accesso con autenticazione di SQL ServerSQL Server .(If using SQL ServerSQL Server authentication, skip the Active Directory steps, and create SQL ServerSQL Server authentication logins here.)

  2. Nel database utente creare un utente di database indipendente per il gruppo di Windows.In the user database, create a contained database user for the Windows group. Se si usa l'autenticazione di SQL ServerSQL Server , ignorare i passaggi di Active Directory e creare qui l'autenticazione di SQL ServerSQL Server per gli utenti di database indipendente.(If using SQL ServerSQL Server authentication, skip the Active Directory steps, and create contained database user SQL ServerSQL Server authentication here.

  3. Nel database utente creare uno o più ruoli del database definiti dall'utente, ognuno dei quali rappresenta una funzione simile,In the user database, create one or more user-defined database roles, each representing a similar function. ad esempio analista finanziario e analista vendite.For example financial analyst, and sales analyst.

  4. Aggiungere gli utenti di database a uno o più ruoli del database definiti dall'utente.Add the database users to one or more user-defined database roles.

  5. Concedere le autorizzazioni ai ruoli del database definiti dall'utente.Grant permissions to the user-defined database roles.

    Il risultato tipico a questo punto è che un utente di Windows è un membro di un gruppo di Windows.The typical result at this point, is that a Windows user is a member of a Windows group. Il gruppo di Windows ha un account di accesso in SQL ServerSQL Server o nel Database SQLSQL Database.The Windows group has a login in SQL ServerSQL Server or Database SQLSQL Database. Viene eseguito il mapping dell'account di accesso a un'identità utente nel database utente.The login is mapped to a user identity in the user-database. L'utente è un membro di un ruolo del database.The user is a member of a database role. È necessario ora aggiungere le autorizzazioni al ruolo.Now you need to add permissions to the role.

Assegnazione delle autorizzazioniAssigning Permissions

Di seguito è riportato il formato della maggior parte delle istruzioni di autorizzazione:Most permission statements have the format:

AUTHORIZATION  PERMISSION  ON  SECURABLE::NAME  TO  PRINCIPAL;  
  • AUTHORIZATION deve essere GRANT, REVOKE o DENY.AUTHORIZATION must be GRANT, REVOKE or DENY.

  • PERMISSION stabilisce l'azione consentita o quella non consentita.The PERMISSION establishes what action is allowed or prohibited. SQL Server 2016SQL Server 2016 può specificare 230 autorizzazioni. can specify 230 permissions. Database SQLSQL Database contiene meno autorizzazioni perché alcune azioni non sono rilevanti in Azure. has fewer permissions because some actions are not relevant in Azure. Le autorizzazioni sono elencate nell'argomento Autorizzazioni (motore di database) e nel grafico riportato più avanti.The permissions are listed in the topic Permissions (Database Engine) and in the chart referenced below.

  • ON SECURABLE::NAME specifica il tipo di oggetto a protezione diretta (server, oggetto server, database o oggetto di database) e il nome corrispondente.ON SECURABLE::NAME is the type of securable (server, server object, database, or database object) and its name. Alcune autorizzazioni non richiedono ON SECURABLE::NAME perché non è ambiguo o non è appropriato nel contesto.Some permissions do not require ON SECURABLE::NAME because it is unambiguous or inappropriate in the context. Ad esempio, l'autorizzazione CREATE TABLE non richiede la clausola ON SECURABLE::NAME .For example the CREATE TABLE permission doesn’t require the ON SECURABLE::NAME clause. Ad esempio, l'istruzione GRANT CREATE TABLE TO Mary; consente a Mary di creare tabelle.(For example GRANT CREATE TABLE TO Mary; allows Mary to create tables.)

  • PRINCIPAL è l'entità di sicurezza (account di accesso, utente o ruolo) che riceve o perde l'autorizzazione.PRINCIPAL is the security principal (login, user, or role) which receives or loses the permission. Concedere le autorizzazioni ai ruoli quando possibile.Grant permissions to roles whenever possible.

    L'istruzione di concessione dell'esempio seguente concede l'autorizzazione UPDATE per la tabella o vista Parts contenuta nello schema Production al ruolo denominato PartsTeam:The following example grant statement, grants the UPDATE permission on the Parts table or view which is contained in the Production schema to the role named PartsTeam:

GRANT UPDATE ON OBJECT::Production.Parts TO PartsTeam;  

Le autorizzazioni vengono concesse alle entità di sicurezza (account di accesso, utenti e ruoli) con l'istruzione GRANT .Permissions are granted to security principals (logins, users, and roles) by using the GRANT statement. Le autorizzazioni vengono negate in modo esplicito con il comando DENY .Permissions are explicitly denied by using the DENY command. Un'autorizzazione concessa o negata in precedenza viene rimossa con l'istruzione REVOKE .A previously granted or denied permission is removed by using the REVOKE statement. Le autorizzazioni sono cumulative, con l'utente che riceve tutte le autorizzazioni concesse all'utente, all'account di accesso e a qualsiasi appartenenza a un gruppo. Tuttavia, la negazione di un'autorizzazione prevale su tutte le concessioni.Permissions are cumulative, with the user receiving all the permissions granted to the user, login, and any group memberships; however any permission denial overrides all grants.

Suggerimento

Un errore comune consiste nel provare a rimuovere l'autorizzazione GRANT con DENY anziché REVOKE.A common mistake is to attempt to remove a GRANT by using DENY instead of REVOKE. Ciò può causare problemi quando un utente riceve autorizzazioni da più origini, e tale circostanza è piuttosto comune.This can cause problems when a user receives permissions from multiple sources; which is quite common. L'esempio seguente illustra l'uso delle entità.The following example demonstrates the principal.

Il gruppo Sales riceve le autorizzazioni SELECT per la tabella OrderStatus con l'istruzione GRANT SELECT ON OBJECT::OrderStatus TO Sales;.The Sales group receives SELECT permissions on the OrderStatus table through the statement GRANT SELECT ON OBJECT::OrderStatus TO Sales;. L'utente Ted è un membro del ruolo Sales.User Ted is a member of the Sales role. A Ted è stata concessa anche l'autorizzazione SELECT per la tabella OrderStatus con il proprio nome utente con l'istruzione GRANT SELECT ON OBJECT::OrderStatus TO Ted;.Ted has also been granted SELECT permission to the OrderStatus table under his own user name through the statement GRANT SELECT ON OBJECT::OrderStatus TO Ted;. Si supponga che l'amministratore voglia rimuovere l'autorizzazione GRANT al ruolo Sales.Presume the administer wishes to remove the GRANT to the Sales role.

  • Se l'amministratore esegue REVOKE SELECT ON OBJECT::OrderStatus TO Sales;in modo corretto, Ted conserverà l'accesso SELECT alla tabella OrderStatus con l'istruzione GRANT personale.If the administrator correctly executes REVOKE SELECT ON OBJECT::OrderStatus TO Sales;, then Ted will retain SELECT access to the OrderStatus table through his individual GRANT statement.

  • Se l'amministratore esegue DENY SELECT ON OBJECT::OrderStatus TO Sales; in modo non corretto, a Ted, come membro del ruolo Sales, verrà negata l'autorizzazione SELECT perché l'istruzione DENY per il gruppo Sales prevale sull'istruzione GRANTpersonale.If the administrator incorrectly executes DENY SELECT ON OBJECT::OrderStatus TO Sales; then Ted, as a member of the Sales role, will be denied the SELECT permission because the DENY to Sales overrides his individual GRANT.

Nota

Le autorizzazioni possono essere configurate con Management StudioManagement Studio.Permissions can be configured using Management StudioManagement Studio. Cercare l'oggetto a protezione diretta in Esplora oggetti, fare clic con il pulsante destro del mouse sull'oggetto e quindi scegliere Proprietà.Find the securable in Object Explorer, right-click the securable, and then click Properties. Selezionare la pagina Autorizzazioni .Select the Permissions page. Per informazioni sull'uso della pagina delle autorizzazioni, vedere Permissions or Securables Page.For help on using the permission page, see Permissions or Securables Page.

Gerarchia delle autorizzazioniPermission Hierarchy

Le autorizzazioni hanno una gerarchia padre/figlio,Permissions have a parent/child hierarchy. ovvero se si concede l'autorizzazione SELECT per un database, tale autorizzazione include l'autorizzazione SELECT per tutti gli schemi (figlio) presenti nel database.That is, if you grant SELECT permission on a database, that permission includes SELECT permission on all (child) schemas in the database. Se si concede l'autorizzazione SELECT per uno schema, tale autorizzazione include l'autorizzazione SELECT per tutte le tabelle e le viste (figlio) presenti nello schema.If you grant SELECT permission on a schema, it includes SELECT permission on all the (child) tables and views in the schema. Le autorizzazioni sono transitive, ovvero se si concede l'autorizzazione SELECT per un database, tale autorizzazione include l'autorizzazione SELECT per tutti gli schemi (figlio) e tutte le tabelle e le viste (nipote).The permissions are transitive; that is, if you grant SELECT permission on a database, it includes SELECT permission on all (child) schemas, and all (grandchild) tables and views.

Le autorizzazioni contengono anche le autorizzazioni implicite.Permissions also have covering permissions. L'autorizzazione CONTROL per un oggetto concede in genere tutte le altre autorizzazioni per l'oggetto.The CONTROL permission on an object, normally gives you all other permissions on the object.

Poiché sia la gerarchia padre/figlio che la gerarchia implicita possono agire sulla stessa autorizzazione, il sistema di autorizzazioni può diventare complicato.Because both the parent/child hierarchy and the covering hierarchy can act on the same permission, the permission system can get complicated. Prendiamo ad esempio una tabella (Region) di uno schema (Customers) in un database (SalesDB).For example, let's take a table (Region), in a schema (Customers), in a database (SalesDB).

  • CONTROL per la tabella Region include tutte le altre autorizzazioni per la tabella Region, tra cui ALTER, SELECT, INSERT, UPDATE, DELETEe altre autorizzazioni.CONTROL permission on table Region includes all the other permissions on the table Region, including ALTER, SELECT, INSERT, UPDATE, DELETE, and some other permissions.

  • SELECT per lo schema Customers a cui appartiene la tabella Region include l'autorizzazione SELECT per la tabella Region.SELECT on the Customers schema that owns the Region table includes the SELECT permission on the Region table.

    L'autorizzazione SELECT per la tabella Region può quindi essere ottenuta con una di queste sei istruzioni:So SELECT permission on the Region table can be achieved through any of these six statements:

GRANT SELECT ON OBJECT::Region TO Ted;   

GRANT CONTROL ON OBJECT::Region TO Ted;   

GRANT SELECT ON SCHEMA::Customers TO Ted;   

GRANT CONTROL ON SCHEMA::Customers TO Ted;   

GRANT SELECT ON DATABASE::SalesDB TO Ted;   

GRANT CONTROL ON DATABASE::SalesDB TO Ted;  

Concedere l'autorizzazione minimaGrant the Least Permission

La prima autorizzazione elencata in precedenza (GRANT SELECT ON OBJECT::Region TO Ted;) è la più granulare, ovvero tale istruzione è l'autorizzazione minima possibile che concede l'autorizzazione SELECT.The first permission listed above (GRANT SELECT ON OBJECT::Region TO Ted;) is the most granular, that is, that statement is the least permission possible that grants the SELECT. Non sono incluse autorizzazioni per gli oggetti subordinati.No permissions to subordinate objects come with it. È un ottimo principio concedere sempre l'autorizzazione minima possibile, ma (contraddicendo ciò) concederla a livelli superiori per semplificare il sistema di concessione.It's a good principal to always grant the least permission possible, but (contradicting that) grant at higher levels in order to simplify the granting system. Se quindi Ted deve ottenere le autorizzazioni per l'intero schema, concedere SELECT una sola volta a livello di schema, anziché concedere SELECT molte volte a livello di tabella o di vista.So if Ted needs permissions to the entire schema, grant SELECT once at the schema level, instead of granting SELECT at the table or view level many times. La progettazione del database ha un notevole impatto sull'efficacia di questa strategia.The design of the database has a great deal of impact on how successful this strategy can be. Questa strategia funziona meglio quando il database viene progettato in modo tale che gli oggetti che devono ottenere autorizzazioni identiche vengano inclusi in un singolo schema.This strategy will work best when your database is designed so that objects needing identical permissions are included in a single schema.

Elenco di autorizzazioniList of Permissions

SQL Server 2016SQL Server 2016 contiene 230 autorizzazioni. has 230 permissions. SQL Server 2014SQL Server 2014 contiene 219 autorizzazioni. has 219 permissions. SQL Server 2012SQL Server 2012 contiene 214 autorizzazioni. has 214 permissions. SQL Server 2008 R2SQL Server 2008 R2 contiene 195 autorizzazioni. has 195 permissions. Database SQLSQL Database, SQL Data WarehouseSQL Data Warehousee la Sistema della piattaforma di analisiAnalytics Platform System contengono meno autorizzazioni perché espongono solo una parte del motore di database, anche se contengono alcune autorizzazioni che non si applicano a SQL ServerSQL Server., SQL Data WarehouseSQL Data Warehouse, and Sistema della piattaforma di analisiAnalytics Platform System have fewer permissions because they expose only a portion of the database engine, though each have some permissions that do not apply to SQL ServerSQL Server. La figura seguente illustra le autorizzazioni e le relative relazioni.The following graphic shows the permissions and their relationships to each other. Alcune delle autorizzazioni di livello superiore (ad esempio CONTROL SERVER) sono elencate più volte.Some of the higher level permissions (such as CONTROL SERVER) are listed many times. In questo argomento il poster è molto piccolo e non può essere consultato.In this topic, the poster is far to small to read. Fare clic sull'immagine per scaricare il poster relativo alle autorizzazioni del motore di database in formato pdf.Click the image to download the Database Engine Permissions Poster in pdf format.

Autorizzazioni del motore di databaseDatabase Engine Permissions

Per una rappresentazione grafica delle relazioni tra le entità del Motore di databaseDatabase Engine e gli oggetti server e di database, vedere Gerarchia delle autorizzazioni (motore di database).For a graphic showing the relationships among the Motore di databaseDatabase Engine principals and server and database objects, see Permissions Hierarchy (Database Engine).

Autorizzazioni e ruoli predefiniti del server e ruoli predefiniti del databasePermissions vs. Fixed Server and Fixed Database Roles

Le autorizzazioni dei ruoli predefiniti del server e dei ruoli predefiniti del database sono simili ma non esattamente uguali alle autorizzazioni granulari.The permissions of the fixed server roles and fixed database roles are similar but not exactly the same as the granular permissions. Ad esempio, i membri del ruolo predefinito del server sysadmin hanno tutte le autorizzazioni per l'istanza di SQL ServerSQL Server, come gli account di accesso con l'autorizzazione CONTROL SERVER .For example, members of the sysadmin fixed server role have all permissions on the instance of SQL ServerSQL Server, as do logins with the CONTROL SERVER permission. Ma concedere l'autorizzazione CONTROL SERVER non rende un account di accesso membro del ruolo predefinito del server sysadmin e aggiungere un account di accesso al ruolo predefinito del server sysadmin non concede in modo esplicito l'autorizzazione CONTROL SERVER all'account di accesso.But granting the CONTROL SERVER permission does not make a login a member of the sysadmin fixed server role, and adding a login to the sysadmin fixed server role does not explicitly grant the login the CONTROL SERVER permission. Una stored procedure potrebbe talvolta verificare le autorizzazioni controllando il ruolo predefinito e non controllando l'autorizzazione granulare.Sometimes a stored procedure will check permissions by checking the fixed role and not checking the granular permission. Ad esempio, per scollegare un database è necessaria l'appartenenza al ruolo predefinito del database db_owner .For example detaching a database requires membership in the db_owner fixed database role. L'autorizzazione CONTROL DATABASE equivalente non è sufficiente.The equivalent CONTROL DATABASE permission is not enough. Questi due sistemi operano in parallelo ma raramente interagiscono tra loro.These two systems operate in parallel but rarely interact with each other. Se possibile, Microsoft consiglia di usare il sistema più recente di autorizzazioni granulari anziché i ruoli predefiniti.Microsoft recommends using the newer, granular permission system instead of the fixed roles whenever possible.

Monitoraggio delle autorizzazioniMonitoring Permissions

Le viste seguenti restituiscono informazioni sulla sicurezza.The following views return security information.

  • Gli account di accesso e i ruoli del server definiti dall'utente in un server possono essere esaminati con la vista sys.server_principals .The logins and user-defined server roles on a server can be examined by using the sys.server_principals view. Questa vista non è disponibile nel Database SQLSQL Database.This view is not available in Database SQLSQL Database.

  • Gli utenti e i ruoli definiti dall'utente in un database possono essere esaminati con la vista sys.database_principals .The users and user-defined roles in a database can be examined by using the sys.database_principals view.

  • Le autorizzazioni concesse agli account di accesso e ai ruoli predefiniti del server definiti dall'utente possono essere esaminate con la vista sys.server_permissions .The permissions granted to logins and user-defined fixed server roles can be examined by using the sys.server_permissions view. Questa vista non è disponibile nel Database SQLSQL Database.This view is not available in Database SQLSQL Database.

  • Le autorizzazioni concesse agli utenti e ai ruoli predefiniti del database definiti dall'utente possono essere esaminate con la vista sys.database_permissions .The permissions granted to users and user-defined fixed database roles can be examined by using the sys.database_permissions view.

  • L'appartenenza ai ruoli del database può essere esaminata con la vista sys. sys.database_role_members .Database role membership can be examined by using the sys. sys.database_role_members view.

  • L'appartenenza ai ruoli del server può essere esaminata con la vista sys.server_role_members .Server role membership can be examined by using the sys.server_role_members view. Questa vista non è disponibile nel Database SQLSQL Database.This view is not available in Database SQLSQL Database.

  • Per altre viste correlate alla sicurezza, vedere Viste del catalogo relative alla sicurezza (Transact-SQL) .For additional security related views, see Security Catalog Views (Transact-SQL) .

Istruzioni Transact-SQL utiliUseful Transact-SQL Statements

Le istruzioni seguenti restituiscono informazioni utili sulle autorizzazioni.The following statements return useful information about permissions.

Per restituire le autorizzazioni esplicite concesse o negate in un database ( SQL ServerSQL Server e Database SQLSQL Database), eseguire l'istruzione seguente nel database.To return the explicit permissions granted or denied in a database ( SQL ServerSQL Server and Database SQLSQL Database), execute the following statement in the database.

SELECT   
    perms.state_desc AS State,   
    permission_name AS [Permission],   
    obj.name AS [on Object],   
    dPrinc.name AS [to User Name]  
FROM sys.database_permissions AS perms  
JOIN sys.database_principals AS dPrinc  
    ON perms.grantee_principal_id = dPrinc.principal_id  
JOIN sys.objects AS obj  
    ON perms.major_id = obj.object_id;  

Per restituire i membri dei ruoli del server (solo SQL ServerSQL Server ), eseguire l'istruzione seguente.To return the members of the server roles ( SQL ServerSQL Server only), execute the following statement.

SELECT sRole.name AS [Server Role Name] , sPrinc.name AS [Members]  
FROM sys.server_role_members AS sRo  
JOIN sys.server_principals AS sPrinc  
    ON sRo.member_principal_id = sPrinc.principal_id  
JOIN sys.server_principals AS sRole  
    ON sRo.role_principal_id = sRole.principal_id;  

Per restituire i membri dei ruoli del database ( SQL ServerSQL Server e Database SQLSQL Database), eseguire l'istruzione seguente nel database.To return the members of the database roles ( SQL ServerSQL Server and Database SQLSQL Database), execute the following statement in the database.

SELECT dRole.name AS [Database Role Name], dPrinc.name AS [Members]  
FROM sys.database_role_members AS dRo  
JOIN sys.database_principals AS dPrinc  
    ON dRo.member_principal_id = dPrinc.principal_id  
JOIN sys.database_principals AS dRole  
    ON dRo.role_principal_id = dRole.principal_id;  

Passaggi successiviNext Steps

Per altri argomenti introduttivi, vedere:For more topics to get you started, see:

Vedere ancheSee Also

Centro di sicurezza per il motore di database di SQL Server e il database SQL di Azure Security Center for SQL Server Database Engine and Azure SQL Database
Funzioni di sicurezza (Transact-SQL) Security Functions (Transact-SQL)
Funzioni e viste a gestione dinamica relative alla sicurezza (Transact-SQL) Security-Related Dynamic Management Views and Functions (Transact-SQL)
Viste del catalogo relative alla sicurezza (Transact-SQL) Security Catalog Views (Transact-SQL)
sys.fn_builtin_permissions (Transact-SQL) sys.fn_builtin_permissions (Transact-SQL)
Determinare le autorizzazioni valide per il motore di databaseDetermining Effective Database Engine Permissions