GRANT (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure SìIstanza gestita di SQL di Azure sìAzure Synapse Analytics sìParallel Data Warehouse

Concede a un'entità autorizzazioni per un'entità a protezione diretta. Il formato da usare è GRANT <some permission> ON <some object> TO <some user, login, or group>. Per una descrizione generale delle autorizzazioni, vedere Autorizzazioni (Motore di database).

Icona di collegamento a un articolo Convenzioni della sintassi Transact-SQL

Sintassi

-- 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 Synapse Analytics 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  
}  

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

ALL
Questa opzione è deprecata ed è stata mantenuta solo a scopo di compatibilità con le versioni precedenti. Non concede tutte le possibili autorizzazioni. L'impostazione di ALL equivale a concedere le autorizzazioni seguenti:

  • 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.

  • Se l'entità a protezione diretta è una funzione scalare, ALL corrisponde a EXECUTE e REFERENCES.

  • Se l'entità a protezione diretta è una funzione con valori di tabella, ALL corrisponde a DELETE, INSERT, REFERENCES, SELECT e UPDATE.

  • Se l'entità a protezione diretta è una stored procedure, ALL corrisponde a EXECUTE.

  • Se l'entità a protezione diretta è una tabella, ALL corrisponde a DELETE, INSERT, REFERENCES, SELECT e UPDATE.

  • Se l'entità a protezione diretta è una vista, ALL corrisponde a DELETE, INSERT, REFERENCES, SELECT e UPDATE.

PRIVILEGES
Opzione inclusa per compatibilità con lo standard ISO. Non modifica il funzionamento di ALL.

permission
Nome di un'autorizzazione. I mapping validi di autorizzazioni ed entità a protezione diretta sono descritti negli argomenti correlati elencati di seguito.

column
Specifica il nome di una colonna in una tabella per la quale vengono concesse autorizzazioni. È necessario utilizzare le parentesi ().

class
Specifica la classe dell'entità a protezione diretta per la quale viene concessa l'autorizzazione. Il qualificatore di ambito :: è obbligatorio.

securable
Specifica l'entità a protezione diretta a cui viene concessa l'autorizzazione.

TO principal
Nome di un'entità. Le entità a cui è possibile concedere le autorizzazioni per un'entità a protezione diretta variano in base all'entità a protezione diretta specifica. Per altre informazioni sulle combinazioni valide, vedere gli argomenti secondari elencati di seguito.

GRANT OPTION
Indica che l'utente autorizzato potrà inoltre concedere l'autorizzazione specificata ad altre entità.

AS 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. Si supponga ad esempio che l'utente Mary sia principal_id 12 e l'utente Raul sia 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).

L'uso della clausola AS in genere non è consigliabile, a meno che non sia necessario definire in modo esplicito la catena di autorizzazione. Per altre informazioni, vedere la sezione Riepilogo delle informazioni sull'algoritmo di controllo delle autorizzazioni di Autorizzazioni (Motore di database).

L'uso di AS in questa istruzione non implica la possibilità di rappresentare un altro utente.

Osservazioni

La sintassi completa dell'istruzione GRANT è complessa. Il diagramma della sintassi precedente è stato semplificato per evidenziarne la struttura. La sintassi completa per la concessioni di autorizzazioni per entità a protezione diretta specifiche viene descritta negli articoli riportati di seguito.

È 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.

La concessione di un'autorizzazione rimuove l'istruzione DENY o REVOKE di tale autorizzazione per l'entità a protezione diretta specificata. 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. Tuttavia, la revoca dell'autorizzazione concessa a un ambito superiore non ha la precedenza.

Le autorizzazioni a livello di database vengono concesse nell'ambito del database specificato. 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.

Attenzione

Un'istruzione DENY a livello di tabella non ha la precedenza rispetto a un'istruzione GRANT a livello di colonna. Questa incongruenza nella gerarchia di autorizzazioni è stata mantenuta per garantire la compatibilità con le versioni precedenti Verrà rimosso in una versione futura.

La stored procedure di sistema sp_helprotect visualizza le autorizzazioni per un'entità a protezione diretta a livello di database.

WITH 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. 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. 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. Nell'esempio seguente viene illustrato l'uso di WITH GRANT OPTION quando viene concesso a un ruolo o a un gruppo di Windows.

-- 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 Server

Per un'anteprima di grandi dimensioni di tutte le autorizzazioni del Motore di database in formato pdf, vedere https://aka.ms/sql-permissions-poster.

Autorizzazioni

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. Se si utilizza l'opzione AS, sono previsti requisiti aggiuntivi. Per altre informazioni dettagliate, vedere l'articolo relativo alle entità a protezione diretta.

I proprietari degli oggetti possono concedere autorizzazioni per gli oggetti di cui sono proprietari. Le entità con l'autorizzazione CONTROL per un'entità a sicurezza diretta possono concedere l'autorizzazione per quella entità.

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. 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. Gli utenti che dispongono dell'autorizzazione CONTROL in uno schema, possono concedere qualsiasi autorizzazione per qualsiasi oggetto all'interno dello schema.

Esempi

Nella tabella seguente vengono elencate le entità a protezione diretta e gli articoli in cui viene descritta la relativa sintassi specifica.

Entità a protezione diretta Sintassi GRANT
Ruolo applicazione GRANT - Autorizzazioni per entità di database (Transact-SQL)
Assembly GRANT - Autorizzazioni per assembly (Transact-SQL)
Chiave asimmetrica GRANT - Autorizzazioni per chiavi asimmetriche (Transact-SQL)
Gruppo di disponibilità GRANT - Autorizzazioni del gruppo di disponibilità (Transact-SQL)
Certificato GRANT - Autorizzazioni per certificati (Transact-SQL)
Contratto GRANT - Autorizzazioni di Service Broker (Transact-SQL)
Database GRANT - Autorizzazioni per database (Transact-SQL)
Credenziali con ambito database GRANT - Credenziali con ambito database (Transact-SQL)
Endpoint GRANT - Autorizzazioni per endpoint (Transact-SQL)
Catalogo full-text GRANT - Autorizzazioni per il catalogo full-text (Transact-SQL)
Elenco di parole non significative full-text GRANT - Autorizzazioni per il catalogo full-text (Transact-SQL)
Funzione GRANT - Autorizzazioni per oggetti (Transact-SQL)
Login GRANT - Autorizzazioni per entità server (Transact-SQL)
Tipo di messaggio GRANT - Autorizzazioni di Service Broker (Transact-SQL)
Oggetto GRANT - Autorizzazioni per oggetti (Transact-SQL)
Coda GRANT - Autorizzazioni per oggetti (Transact-SQL)
Associazione al servizio remoto GRANT - Autorizzazioni di Service Broker (Transact-SQL)
Ruolo GRANT - Autorizzazioni per entità di database (Transact-SQL)
Route GRANT - Autorizzazioni di Service Broker (Transact-SQL)
SCHEMA GRANT - Autorizzazioni per schemi (Transact-SQL)
Elenco delle proprietà di ricerca GRANT - Autorizzazioni per l'elenco delle proprietà di ricerca (Transact-SQL)
Server GRANT - autorizzazioni per server (Transact-SQL)
Service GRANT - Autorizzazioni di Service Broker (Transact-SQL)
Stored Procedure GRANT - Autorizzazioni per oggetti (Transact-SQL)
Chiave simmetrica GRANT - Autorizzazioni per chiavi asimmetriche (Transact-SQL)
Sinonimo GRANT - Autorizzazioni per oggetti (Transact-SQL)
Oggetti di sistema GRANT - autorizzazioni per oggetti di sistema (Transact-SQL)
Tabella GRANT - Autorizzazioni per oggetti (Transact-SQL)
Type GRANT - Autorizzazioni per tipi (Transact-SQL)
Utente GRANT - Autorizzazioni per entità di database (Transact-SQL)
Visualizzazione GRANT - Autorizzazioni per oggetti (Transact-SQL)
Raccolta di XML Schema GRANT - Autorizzazioni per raccolte di XML Schema (Transact-SQL)

Vedere anche