GRANT - autorizzazioni per oggetti (Transact-SQL)
Si applica a: SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
endpoint di analisi SQL di Azure Synapse Analytics
Platform System (PDW)
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
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.
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 OPTION
o 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.com
ad 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.com
ad 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.com
ad 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.com
ad 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
Contenuto correlato
- Autorizzazioni oggetto DENY (Transact-SQL)
- REVOKE - Autorizzazioni per oggetti (Transact-SQL)
- Viste del catalogo oggetti (Transact-SQL)
- Autorizzazioni (Motore di database)
- Entità di sicurezza (Motore di database)
- Entità a protezione diretta
- sys.fn_builtin_permissions (Transact-SQL)
- HAS_PERMS_BY_NAME (Transact-SQL)
- sys.fn_my_permissions (Transact-SQL)
- Maschera dati dinamica
- Sicurezza a livello di riga