GRANT - autorizzazioni per oggetti (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Concede le autorizzazioni per tabelle, viste, funzioni con valori di tabella, stored procedure, stored procedure estese, funzioni scalari, funzioni di aggregazione, code di servizi o sinonimi.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

GRANT <permission> [ ,...n ] ON   
    [ OBJECT :: ][ schema_name ]. object_name [ ( column_name [ ,...n ] ) ]  
    TO <database_principal> [ ,...n ]   
    [ WITH GRANT OPTION ]  
    [ AS <database_principal> ]  
  
<permission> ::=  
    ALL [ PRIVILEGES ] | permission [ ( column_name [ ,...n ] ) ]  
  
<database_principal> ::=   
        Database_user   
    | Database_role   
    | Application_role   
    | Database_user_mapped_to_Windows_User   
    | Database_user_mapped_to_Windows_Group   
    | Database_user_mapped_to_certificate   
    | Database_user_mapped_to_asymmetric_key   
    | Database_user_with_no_login  

Argomenti

permission

Specifica un'autorizzazione che può essere concessa per un oggetto contenuto nello schema. Per un elenco delle autorizzazioni, vedere Osservazioni.

ALL

L'opzione ALL non concede tutte le autorizzazioni possibili. L'opzione ALL equivale a concedere tutte le autorizzazioni ANSI-92 applicabili all'oggetto specificato. Il significato di ALL è variabile, come indicato di seguito:

  • Autorizzazioni per funzioni scalari: EXECUTE, REFERENCES.
  • Autorizzazioni per funzioni con valori di tabella: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Autorizzazioni per stored procedure: EXECUTE.
  • Autorizzazioni per tabelle: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Autorizzazioni per viste: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

Attenzione

L'autorizzazione ALL è deprecata e viene mantenuta solo per garantire la compatibilità.

PRIVILEGES

Opzione inclusa per compatibilità con ANSI-92. Non modifica il funzionamento di ALL.

column_name

Specifica il nome di una colonna in una tabella, vista o funzione con valori di tabella per la quale viene concessa l'autorizzazione. Le parentesi ( ) sono obbligatorie. Solo le autorizzazioni SELECT, REFERENCES, UPDATE e UNMASK possono essere concesse in una colonna. column_name possibile specificare nella clausola permissions o dopo il nome dell'entità a protezione diretta.

Attenzione

Un'istruzione DENY a livello di tabella non ha la precedenza rispetto a un'istruzione GRANT a livello di colonna. Questa incoerenza nella gerarchia delle autorizzazioni è stata mantenuta per compatibilità con le versioni precedenti.

ON [ OBJECT :: ] [ schema_name ] . object_name

Specifica l'oggetto per cui viene concessa l'autorizzazione. L'utilizzo di OBJECT è facoltativo se si specifica schema_name. Se si utilizza OBJECT, il qualificatore di ambito :: è obbligatorio. Se si omette schema_name, viene usato lo schema predefinito. Se si specifica schema_name, il qualificatore di ambito dello schema (.) è obbligatorio.

TO <database_principal>

Specifica l'entità a cui viene concessa l'autorizzazione.

WITH GRANT OPTION

Indica che l'entità potrà inoltre concedere l'autorizzazione specificata ad altre entità.

AS <database_principal>

Specifica un'entità dalla quale l'entità che esegue la query ottiene il diritto di concedere l'autorizzazione.

Database_user
Specifica un utente di database.

Database_role
Specifica un ruolo del database.

Application_role
Specifica un ruolo applicazione.

Database_user_mapped_to_Windows_User
Specifica un utente del database sul quale viene eseguito il mapping a un utente di Windows.

Database_user_mapped_to_Windows_Group
Specifica un utente del database sul quale viene eseguito il mapping a un gruppo di Windows.

Database_user_mapped_to_certificate
Specifica un utente del database sul quale viene eseguito il mapping a un certificato.

Database_user_mapped_to_asymmetric_key
Specifica un utente del database sul quale viene eseguito il mapping a una chiave asimmetrica.

Database_user_with_no_login
Specifica un utente del database per cui non esiste un'entità corrispondente a livello del server.

Osservazioni:

Importante

Una combinazione di ALTER autorizzazioni e REFERENCE in alcuni casi può consentire all'utente autorizzato di visualizzare i dati o eseguire funzioni non autorizzate. Ad esempio: un utente con ALTER autorizzazione per una tabella e REFERENCE l'autorizzazione per una funzione può creare una colonna calcolata su una funzione e eseguirla. In questo caso, l'utente necessita SELECT anche dell'autorizzazione per la colonna calcolata.

Le informazioni sugli oggetti sono visibili in varie viste del catalogo. Per altre informazioni, vedere Viste del catalogo oggetti (Transact-SQL).

Un oggetto è un'entità a protezione diretta a livello di schema contenuta nello schema padre nella gerarchia delle autorizzazioni. Nella tabella seguente sono elencate le autorizzazioni più specifiche e limitate che è possibile concedere per un oggetto, insieme alle autorizzazioni più generali che le includono in modo implicito.

Autorizzazione per l'oggetto Autorizzazione dell'oggetto in cui è inclusa Autorizzazione dello schema in cui è inclusa
ALTER CONTROL ALTER
CONTROL CONTROL CONTROL
DELETE CONTROL DELETE
EXECUTE CONTROL EXECUTE
INSERT CONTROL INSERT
RECEIVE CONTROL CONTROL
REFERENCES CONTROL REFERENCES
SELECT RECEIVE SELECT
TAKE OWNERSHIP CONTROL CONTROL
UPDATE CONTROL UPDATE
VIEW CHANGE TRACKING CONTROL VIEW CHANGE TRACKING
VIEW DEFINITION CONTROL VIEW DEFINITION

Autorizzazioni

L'utente autorizzato (o l'entità specificata con l'opzione AS) deve avere l'autorizzazione stessa con GRANT OPTIONo un'autorizzazione superiore che implica l'autorizzazione concessa.

Se si utilizza l'opzione AS, sono previsti i requisiti aggiuntivi seguenti.

AS Autorizzazione aggiuntiva necessaria
Utente del database IMPERSONATE autorizzazione per l'utente, l'appartenenza al ruolo predefinito del db_securityadmin database, l'appartenenza al ruolo predefinito del db_owner database o l'appartenenza al ruolo predefinito del sysadmin server.
Utente del database di cui è stato eseguito il mapping a un account di accesso di Windows IMPERSONATE autorizzazione per l'utente, l'appartenenza al ruolo predefinito del db_securityadmin database, l'appartenenza al ruolo predefinito del db_owner database o l'appartenenza al ruolo predefinito del sysadmin server.
Utente del database di cui è stato eseguito il mapping a un gruppo di Windows Appartenenza al gruppo di Windows, appartenenza al ruolo predefinito del db_securityadmin database, appartenenza al ruolo predefinito del db_owner database o appartenenza al ruolo predefinito del sysadmin server.
Utente del database di cui è stato eseguito il mapping a un certificato Appartenenza al ruolo predefinito del db_securityadmin database, appartenenza al ruolo predefinito del db_owner database o appartenenza al ruolo predefinito del sysadmin server.
Utente del database di cui è stato eseguito il mapping a una chiave asimmetrica Appartenenza al ruolo predefinito del db_securityadmin database, appartenenza al ruolo predefinito del db_owner database o appartenenza al ruolo predefinito del sysadmin server.
Utente del database di cui non è stato eseguito il mapping ad alcuna entità server IMPERSONATE autorizzazione per l'utente, l'appartenenza al ruolo predefinito del db_securityadmin database, l'appartenenza al ruolo predefinito del db_owner database o l'appartenenza al ruolo predefinito del sysadmin server.
Ruolo del database ALTER autorizzazione per il ruolo, l'appartenenza al ruolo predefinito del db_securityadmin database, l'appartenenza al ruolo predefinito del db_owner database o l'appartenenza al ruolo predefinito del sysadmin server.
Ruolo applicazione ALTER autorizzazione per il ruolo, l'appartenenza al ruolo predefinito del db_securityadmin database, l'appartenenza al ruolo predefinito del db_owner database o l'appartenenza al ruolo predefinito del sysadmin server.

Esempi

R. Concedere l'autorizzazione SELECT per una tabella

Nell'esempio seguente viene concessa l'autorizzazione SELECT all'utente RosaQdM per la tabella Person.Address nel database AdventureWorks2022.

Questo esempio come scritto non funziona in Microsoft Fabric perché usa un utente per un account di accesso autenticato sql, ma questo stesso esempio funziona per un utente di Microsoft Entra ID Fabric, RosaQdM@contoso.comad esempio .

GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;  
GO  

B. Concedere l'autorizzazione EXECUTE per una stored procedure

Nell'esempio seguente viene concessa l'autorizzazione EXECUTE per la stored procedure HumanResources.uspUpdateEmployeeHireInfo a un ruolo applicazione denominato Recruiting11.

USE AdventureWorks2022;   
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo  
    TO Recruiting11;  
GO   

C. Concedere l'autorizzazione REFERENCES per una vista con GRANT OPTION

Nell'esempio seguente viene concessa l'autorizzazione REFERENCES per la colonna BusinessEntityID nella vista HumanResources.vEmployee all'utente Wanida con GRANT OPTION.

Questo esempio come scritto non funziona in Microsoft Fabric perché usa un utente per un account di accesso autenticato sql, ma questo stesso esempio funziona per un utente di Microsoft Entra ID Fabric, Wanida@contoso.comad esempio .

GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee   
    TO Wanida WITH GRANT OPTION;  
GO  

D. Concedere l'autorizzazione SELECT per una tabella senza usare la frase OBJECT

Nell'esempio seguente viene concessa l'autorizzazione SELECT all'utente RosaQdM per la tabella Person.Address nel database AdventureWorks2022.

Questo esempio come scritto non funziona in Microsoft Fabric perché usa un utente per un account di accesso autenticato sql, ma questo stesso esempio funziona per un utente di Microsoft Entra ID Fabric, RosaQdM@contoso.comad esempio .

GRANT SELECT ON Person.Address TO RosaQdM;  
GO  

E. Concedere l'autorizzazione SELECT per una tabella a un account di dominio

Nell'esempio seguente viene concessa l'autorizzazione SELECT all'utente AdventureWorks2022\RosaQdM per la tabella Person.Address nel database AdventureWorks2022.

Questo esempio come scritto non funziona in Microsoft Fabric perché usa un account di dominio, ma questo stesso esempio funziona per un utente di Microsoft Entra ID Fabric, RosaQdM@contoso.comad esempio .

GRANT SELECT ON Person.Address TO [AdventureWorks2022\RosaQdM];  
GO  

F. Concedere l'autorizzazione EXECUTE per una routine a un ruolo

Nell'esempio seguente viene creato un ruolo a cui viene concessa l'autorizzazione EXECUTE per la stored procedure uspGetBillOfMaterials nel database AdventureWorks2022 .

CREATE ROLE newrole ;  
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;  
GO  

G. Concedere l'autorizzazione UNMASK per una colonna

Nell'esempio seguente viene concessa l'autorizzazione UNMASK , parte della maschera dati dinamica, per la colonna email nella tabella Data.Membership all'utente OutreachCoordinator.

La maschera dati dinamica non è attualmente supportata in Microsoft Fabric.

GRANT UNMASK ON OBJECT::Data.Membership (email) to OutreachCoordinator;
GO