GRANT (Transact-SQL)GRANT (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Concede a un'entità autorizzazioni per un'entità a protezione diretta.Grants permissions on a securable to a principal. Il formato da usare è GRANT <autorizzazione> ON <oggetto> TO <utente, account di accesso o gruppo>.The general concept is to GRANT <some permission> ON <some object> TO <some user, login, or group>. Per una descrizione generale delle autorizzazioni, vedere Autorizzazioni (Motore di database).For a general discussion of permissions, see Permissions (Database Engine).

Icona di collegamento a un articoloConvenzioni della sintassi Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintassiSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
-- Simplified syntax for GRANT  
GRANT { ALL [ PRIVILEGES ] }  
      | permission [ ( column [ ,...n ] ) ] [ ,...n ]  
      [ ON [ class :: ] securable ] TO principal [ ,...n ]   
      [ WITH GRANT OPTION ] [ AS principal ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
GRANT   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

ArgomentiArguments

ALLALL
Questa opzione è deprecata ed è stata mantenuta solo a scopo di compatibilità con le versioni precedenti.This option is deprecated and maintained only for backward compatibility. Non concede tutte le possibili autorizzazioni.It does not grant all possible permissions. L'impostazione di ALL equivale a concedere le autorizzazioni seguenti:Granting ALL is equivalent to granting the following permissions:

  • Se l'entità a protezione diretta è un database, ALL corrisponde a BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE e CREATE VIEW.If the securable is a database, ALL means BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, and CREATE VIEW.

  • Se l'entità a protezione diretta è una funzione scalare, ALL corrisponde a EXECUTE e REFERENCES.If the securable is a scalar function, ALL means EXECUTE and REFERENCES.

  • Se l'entità a protezione diretta è una funzione con valori di tabella, ALL corrisponde a DELETE, INSERT, REFERENCES, SELECT e UPDATE.If the securable is a table-valued function, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

  • Se l'entità a protezione diretta è una stored procedure, ALL corrisponde a EXECUTE.If the securable is a stored procedure, ALL means EXECUTE.

  • Se l'entità a protezione diretta è una tabella, ALL corrisponde a DELETE, INSERT, REFERENCES, SELECT e UPDATE.If the securable is a table, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

  • Se l'entità a protezione diretta è una vista, ALL corrisponde a DELETE, INSERT, REFERENCES, SELECT e UPDATE.If the securable is a view, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

PRIVILEGESPRIVILEGES
Opzione inclusa per compatibilità con lo standard ISO.Included for ISO compliance. Non modifica il funzionamento di ALL.Does not change the behavior of ALL.

permissionpermission
Nome di un'autorizzazione.Is the name of a permission. I mapping validi di autorizzazioni ed entità a protezione diretta sono descritti negli argomenti correlati elencati di seguito.The valid mappings of permissions to securables are described in the subtopics listed below.

columncolumn
Specifica il nome di una colonna in una tabella per la quale vengono concesse autorizzazioni.Specifies the name of a column in a table on which permissions are being granted. È necessario utilizzare le parentesi ().The parentheses () are required.

classclass
Specifica la classe dell'entità a protezione diretta per la quale viene concessa l'autorizzazione.Specifies the class of the securable on which the permission is being granted. Il qualificatore di ambito :: è obbligatorio.The scope qualifier :: is required.

securablesecurable
Specifica l'entità a protezione diretta a cui viene concessa l'autorizzazione.Specifies the securable on which the permission is being granted.

TO principalTO principal
Nome di un'entità.Is the name of a principal. Le entità a cui è possibile concedere le autorizzazioni per un'entità a protezione diretta variano in base all'entità a protezione diretta specifica.The principals to which permissions on a securable can be granted vary, depending on the securable. Per altre informazioni sulle combinazioni valide, vedere gli argomenti secondari elencati di seguito.See the subtopics listed below for valid combinations.

GRANT OPTIONGRANT OPTION
Indica che l'utente autorizzato potrà inoltre concedere l'autorizzazione specificata ad altre entità.Indicates that the grantee will also be given the ability to grant the specified permission to other principals.

AS principalAS principal
Usare la clausola AS principal per indicare che l'entità registrata come l'utente che concede l'autorizzazione deve essere un'entità diversa dalla persona che esegue l'istruzione.Use the AS principal clause to indicate that the principal recorded as the grantor of the permission should be a principal other than the person executing the statement. Si supponga ad esempio che l'utente Mary sia principal_id 12 e l'utente Raul sia principal 15.For example, presume that user Mary is principal_id 12 and user Raul is principal 15. Mary esegue GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Ora la tabella sys.database_permissions indica che il grantor_prinicpal_id è 15 (Raul) anche se l'istruzione è stata effettivamente eseguita dall'utente 13 (Mary).Mary executes GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Now the sys.database_permissions table will indicate that the grantor_prinicpal_id was 15 (Raul) even though the statement was actually executed by user 13 (Mary).

L'uso della clausola AS in genere non è consigliabile, a meno che non sia necessario definire in modo esplicito la catena di autorizzazione.Using the AS clause is typically not recommended unless you need to explicitly define the permission chain. Per altre informazioni, vedere la sezione Riepilogo delle informazioni sull'algoritmo di controllo delle autorizzazioni di Autorizzazioni (Motore di database).For more information, see the Summary of the Permission Check Algorithm section of Permissions (Database Engine).

L'uso di AS in questa istruzione non implica la possibilità di rappresentare un altro utente.The use of AS in this statement does not imply the ability to impersonate another user.

RemarksRemarks

La sintassi completa dell'istruzione GRANT è complessa.The full syntax of the GRANT statement is complex. Il diagramma della sintassi precedente è stato semplificato per evidenziarne la struttura.The syntax diagram above was simplified to draw attention to its structure. La sintassi completa per la concessioni di autorizzazioni per entità a protezione diretta specifiche viene descritta negli articoli riportati di seguito.Complete syntax for granting permissions on specific securables is described in the articles listed below.

È possibile utilizzare l'istruzione REVOKE per rimuovere le autorizzazioni concesse e l'istruzione DENY per negare un'autorizzazione specifica a un'entità anche in caso di esecuzione di un'istruzione GRANT.The REVOKE statement can be used to remove granted permissions, and the DENY statement can be used to prevent a principal from gaining a specific permission through a GRANT.

La concessione di un'autorizzazione rimuove l'istruzione DENY o REVOKE di tale autorizzazione per l'entità a protezione diretta specificata.Granting a permission removes DENY or REVOKE of that permission on the specified securable. Se la stessa autorizzazione viene negata a un livello superiore e in tale livello è inclusa l'entità a protezione diretta, l'istruzione DENY ha la precedenza.If the same permission is denied at a higher scope that contains the securable, the DENY takes precedence. Tuttavia, la revoca dell'autorizzazione concessa a un ambito superiore non ha la precedenza.But revoking the granted permission at a higher scope does not take precedence.

Le autorizzazioni a livello di database vengono concesse nell'ambito del database specificato.Database-level permissions are granted within the scope of the specified database. Se un utente deve ottenere autorizzazioni per gli oggetti di un database diverso da quello corrente, è necessario creare un account utente nel secondo database o consentire all'account utente di accedere a tale database oltre che al database corrente.If a user needs permissions to objects in another database, create the user account in the other database, or grant the user account access to the other database, as well as the current database.

Attenzione

Un'istruzione DENY a livello di tabella non ha la precedenza rispetto a un'istruzione GRANT a livello di colonna.A table-level DENY does not take precedence over a column-level GRANT. Questa incongruenza nella gerarchia di autorizzazioni è stata mantenuta per garantire la compatibilità con le versioni precedentiThis inconsistency in the permissions hierarchy has been preserved for the sake of backward compatibility. Verrà rimosso in una versione futura.It will be removed in a future release.

La stored procedure di sistema sp_helprotect visualizza le autorizzazioni per un'entità a protezione diretta a livello di database.The sp_helprotect system stored procedure reports permissions on a database-level securable.

WITH GRANT OPTIONWITH GRANT OPTION

GRANT ... WITH GRANT OPTION specifica che l'entità di sicurezza che riceve l'autorizzazione ha la possibilità di concedere l'autorizzazione specificata ad altri account di sicurezza.The GRANT ... WITH GRANT OPTION specifies that the security principal receiving the permission is given the ability to grant the specified permission to other security accounts. Se l'entità che riceve l'autorizzazione è un ruolo o un gruppo di Windows, è necessario usare la clausola AS quando l'autorizzazione per gli oggetti deve essere concessa ulteriormente a utenti che non sono membri del gruppo o del ruolo.When the principal that receives the permission is a role or a Windows group, the AS clause must be used when the object permission needs to be further granted to users who are not members of the group or role. Poiché un'istruzione GRANT può essere eseguita solo da un utente, anziché da un gruppo o da un ruolo, è necessario che un membro specifico del gruppo o del ruolo usi la clausola AS per chiamare in modo esplicito l'appartenenza a un gruppo o a un ruolo per la concessione dell'autorizzazione.Because only a user, rather than a group or role, can execute a GRANT statement, a specific member of the group or role must use the AS clause to explicitly invoke the role or group membership when granting the permission. Nell'esempio seguente viene illustrato l'uso di WITH GRANT OPTION quando viene concesso a un ruolo o a un gruppo di Windows.The following example shows how the WITH GRANT OPTION is used when granted to a role or Windows group.

-- Execute the following as a database owner  
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION;  
EXEC sp_addrolemember TesterRole, User1;  
-- Execute the following as User1  
-- The following fails because User1 does not have the permission as the User1  
GRANT EXECUTE ON TestMe TO User2;  
-- The following succeeds because User1 invokes the TesterRole membership  
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;  

Grafico delle autorizzazioni di SQL ServerChart of SQL Server Permissions

Per un'anteprima di grandi dimensioni di tutte le autorizzazioni del Motore di databaseDatabase Engine in formato pdf, vedere https://aka.ms/sql-permissions-poster.For a poster sized chart of all Motore di databaseDatabase Engine permissions in pdf format, see https://aka.ms/sql-permissions-poster.

AutorizzazioniPermissions

L'utente che concede le autorizzazioni (o l'entità specificata con l'opzione AS) deve disporre della relativa autorizzazione con GRANT OPTION oppure di un'autorizzazione di livello superiore che include l'autorizzazione che viene concessa.The grantor (or the principal specified with the AS option) must have either the permission itself with GRANT OPTION, or a higher permission that implies the permission being granted. Se si utilizza l'opzione AS, sono previsti requisiti aggiuntivi.If using the AS option, additional requirements apply. Per altre informazioni dettagliate, vedere l'articolo relativo alle entità a protezione diretta.See the securable-specific article for details.

I proprietari degli oggetti possono concedere autorizzazioni per gli oggetti di cui sono proprietari.Object owners can grant permissions on the objects they own. Le entità con l'autorizzazione CONTROL per un'entità a sicurezza diretta possono concedere l'autorizzazione per quella entità.Principals with CONTROL permission on a securable can grant permission on that securable.

Gli utenti che dispongono dell'autorizzazione CONTROL SERVER, ad esempio i membri del ruolo predefinito del server sysadmin, possono concedere qualsiasi autorizzazione per qualsiasi entità a protezione diretta nel server.Grantees of CONTROL SERVER permission, such as members of the sysadmin fixed server role, can grant any permission on any securable in the server. Gli utenti che dispongono dell'autorizzazione CONTROL in un database, ad esempio i membri del ruolo predefinito del database db_owner, possono concedere qualsiasi autorizzazione per qualsiasi entità a protezione diretta nel database.Grantees of CONTROL permission on a database, such as members of the db_owner fixed database role, can grant any permission on any securable in the database. Gli utenti che dispongono dell'autorizzazione CONTROL in uno schema, possono concedere qualsiasi autorizzazione per qualsiasi oggetto all'interno dello schema.Grantees of CONTROL permission on a schema can grant any permission on any object within the schema.

EsempiExamples

Nella tabella seguente vengono elencate le entità a protezione diretta e gli articoli in cui viene descritta la relativa sintassi specifica.The following table lists the securables and the articles that describe the securable-specific syntax.

Ruolo applicazioneApplication Role GRANT - Autorizzazioni per entità di database (Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
AssemblyAssembly GRANT - Autorizzazioni per assembly (Transact-SQL)GRANT Assembly Permissions (Transact-SQL)
Chiave asimmetricaAsymmetric Key GRANT - Autorizzazioni per chiavi asimmetriche (Transact-SQL)GRANT Asymmetric Key Permissions (Transact-SQL)
Gruppo di disponibilitàAvailability Group GRANT - Autorizzazioni del gruppo di disponibilità (Transact-SQL)GRANT Availability Group Permissions (Transact-SQL)
CertificatoCertificate GRANT - Autorizzazioni per certificati (Transact-SQL)GRANT Certificate Permissions (Transact-SQL)
ContrattoContract GRANT - Autorizzazioni di Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
DatabaseDatabase GRANT - Autorizzazioni per database (Transact-SQL)GRANT Database Permissions (Transact-SQL)
Credenziali con ambito databaseDatabase Scoped Credential GRANT - Credenziali con ambito database (Transact-SQL)GRANT Database Scoped Credential (Transact-SQL)
EndpointEndpoint GRANT - Autorizzazioni per endpoint (Transact-SQL)GRANT Endpoint Permissions (Transact-SQL)
Catalogo full-textFull-Text Catalog GRANT - Autorizzazioni per il catalogo full-text (Transact-SQL)GRANT Full-Text Permissions (Transact-SQL)
Elenco di parole non significative full-textFull-Text Stoplist GRANT - Autorizzazioni per il catalogo full-text (Transact-SQL)GRANT Full-Text Permissions (Transact-SQL)
FunzioneFunction GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Account di accessoLogin GRANT - Autorizzazioni per entità server (Transact-SQL)GRANT Server Principal Permissions (Transact-SQL)
Tipo di messaggioMessage Type GRANT - Autorizzazioni di Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
ObjectObject GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
CodaQueue GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Associazione al servizio remotoRemote Service Binding GRANT - Autorizzazioni di Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
RoleRole GRANT - Autorizzazioni per entità di database (Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
RouteRoute GRANT - Autorizzazioni di Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
schemaSchema GRANT - Autorizzazioni per schemi (Transact-SQL)GRANT Schema Permissions (Transact-SQL)
Elenco delle proprietà di ricercaSearch Property List GRANT - Autorizzazioni per l'elenco delle proprietà di ricerca (Transact-SQL)GRANT Search Property List Permissions (Transact-SQL)
ServerServer GRANT - autorizzazioni per server (Transact-SQL)GRANT Server Permissions (Transact-SQL)
ServizioService GRANT - Autorizzazioni di Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
Stored procedureStored Procedure GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Chiave simmetricaSymmetric Key GRANT - Autorizzazioni per chiavi asimmetriche (Transact-SQL)GRANT Symmetric Key Permissions (Transact-SQL)
SinonimoSynonym GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Oggetti di sistemaSystem Objects GRANT - autorizzazioni per oggetti di sistema (Transact-SQL)GRANT System Object Permissions (Transact-SQL)
TabellaTable GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
TipoType GRANT - Autorizzazioni per tipi (Transact-SQL)GRANT Type Permissions (Transact-SQL)
UtenteUser GRANT - Autorizzazioni per entità di database (Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
VistaView GRANT - Autorizzazioni per oggetti (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Raccolta di XML SchemaXML Schema Collection GRANT - Autorizzazioni per raccolte di XML Schema (Transact-SQL)GRANT XML Schema Collection Permissions (Transact-SQL)

Vedere ancheSee Also

DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
sp_addlogin (Transact-SQL) sp_addlogin (Transact-SQL)
sp_adduser (Transact-SQL) sp_adduser (Transact-SQL)
sp_changedbowner (Transact-SQL) sp_changedbowner (Transact-SQL)
sp_dropuser (Transact-SQL) sp_dropuser (Transact-SQL)
sp_helprotect (Transact-SQL) sp_helprotect (Transact-SQL)
sp_helpuser (Transact-SQL)sp_helpuser (Transact-SQL)