GRANT (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse AnalyticsPlatform System (PDW)in Microsoft FabricWarehouse nel database SQL di Microsoft Fabricin Microsoft Fabric
Concede a un'entità autorizzazioni per un'entità a protezione diretta. Il concetto generale è .GRANT <some permission> ON <some object> TO <some user, login, or group>
Per una descrizione generale delle autorizzazioni, vedere Autorizzazioni (motore di database).
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Sintassi per SQL Server, database SQL di Azure e database SQL dell'infrastruttura.
-- Simplified syntax for GRANT
GRANT { ALL [ PRIVILEGES ] }
| permission [ ( column [ , ...n ] ) ] [ , ...n ]
[ ON [ class :: ] securable ] TO principal [ , ...n ]
[ WITH GRANT OPTION ] [ AS principal ]
Sintassi per Azure Synapse Analytics, Parallel Data Warehouse e Microsoft Fabric 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
}
Argomenti
ALL
Questa opzione è deprecata ed è stata mantenuta solo a scopo di compatibilità con le versioni precedenti. Non concede tutte le autorizzazioni possibili. La concessione ALL
equivale a concedere le autorizzazioni seguenti.
Entità a protezione diretta | Autorizzazioni |
---|---|
Database |
BACKUP DATABASE , BACKUP LOG , , CREATE DATABASE CREATE DEFAULT , CREATE FUNCTION , CREATE PROCEDURE , , CREATE RULE e CREATE TABLE CREATE VIEW |
Funzioni scalari |
EXECUTE e REFERENCES |
Funzione con valori di tabella |
DELETE , INSERT , REFERENCES , SELECT e UPDATE |
Stored procedure | EXECUTE |
Tabella |
DELETE , INSERT , REFERENCES , SELECT e UPDATE |
Visualizza |
DELETE , INSERT , REFERENCES , SELECT e UPDATE |
PRIVILEGES
Opzione inclusa per compatibilità con lo standard ISO. Non modifica il comportamento di ALL
.
permission
Nome di un'autorizzazione. I mapping validi delle autorizzazioni per le entità a protezione diretta sono descritti nelle sezioni seguenti.
column
Specifica il nome di una colonna in una tabella per la quale vengono concesse autorizzazioni. Le parentesi (
e )
sono obbligatorie.
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 le combinazioni valide, vedere le sezioni seguenti.
GRANT OPTION
Indica che l'utente autorizzato potrà inoltre concedere l'autorizzazione specificata ad altre entità.
AS principal
Usare la AS <principal>
clausola per indicare che l'entità registrata come grantor dell'autorizzazione deve essere un'entità diversa dalla persona che esegue l'istruzione. Si supponga, ad esempio, che l'utente disponga di un oggetto e Mary
che l'utente principal_id
12
sia principaleRaul
.15
Mary esegue GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;
Now la sys.database_permissions
tabella indica che grantor_principal_id
era 15
(Raul
) anche se l'istruzione è stata effettivamente eseguita dall'utente 12
(Mary
).
L'uso della AS
clausola non è in genere consigliato a meno che non sia necessario definire in modo esplicito la catena di autorizzazioni. Per altre informazioni, vedere Riepilogo dell'algoritmo di controllo delle autorizzazioni.
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 attirare l'attenzione sulla struttura. La sintassi completa per concedere le autorizzazioni per entità a protezione diretta specifiche è descritta negli articoli elencati più avanti in questo articolo.
L'istruzione REVOKE
può essere usata per rimuovere le autorizzazioni concesse e l'istruzione può essere usata per impedire a un'entità DENY
di ottenere un'autorizzazione specifica tramite un oggetto GRANT
.
La concessione di un'autorizzazione rimuove DENY
o REVOKE
di tale autorizzazione per l'entità a protezione diretta specificata. Se la stessa autorizzazione viene negata in un ambito superiore che contiene l'entità a protezione diretta, ha la DENY
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 livello DENY
di tabella non ha la precedenza su un livello GRANT
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 sp_helprotect
sistema segnala le autorizzazioni per un'entità a protezione diretta a livello di database.
In Microsoft Fabric CREATE USER
non è possibile eseguire in modo esplicito attualmente. Quando GRANT
o DENY
viene eseguito, l'utente viene creato automaticamente.
WITH GRANT OPTION
GRANT ... WITH GRANT OPTION
Specifica che all'entità di sicurezza che riceve l'autorizzazione viene concessa la possibilità di concedere l'autorizzazione specificata ad altri account di sicurezza. Quando l'entità che riceve l'autorizzazione è un ruolo o un gruppo di Windows, la AS
clausola deve essere usata quando l'autorizzazione dell'oggetto deve essere concessa ulteriormente agli utenti che non sono membri del gruppo o del ruolo. Poiché solo un utente, anziché un gruppo o un ruolo, può eseguire un'istruzione GRANT
, un membro specifico del gruppo o del ruolo deve usare la AS
clausola per richiamare in modo esplicito l'appartenenza al ruolo o al gruppo quando si concede l'autorizzazione. Nell'esempio seguente viene illustrato come viene usato quando WITH GRANT OPTION
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 TestProc TO User2;
-- The following succeeds because User1 invokes the TesterRole membership
GRANT EXECUTE ON TestProc TO User2 AS TesterRole;
Grafico delle autorizzazioni di SQL Server
Per un grafico con dimensioni poster di tutte le autorizzazioni di 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 usa l'opzione AS
, si applicano 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 CONTROL
autorizzazione per un'entità a protezione diretta possono concedere l'autorizzazione per l'entità a protezione diretta.
Gli utenti autorizzati 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 autorizzati dell'autorizzazione CONTROL
per 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 autorizzati dell'autorizzazione CONTROL
per 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.