PERMISSIONS (Transact-SQL)
Restituisce un valore contenente una mappa di bit che indica le autorizzazioni per le istruzioni, gli oggetti o le colonne associati all'utente corrente.
Importante Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare fn_my_permissions e Has_Perms_By_Name in alternativa. L'utilizzo della funzione PERMISSIONS può comportare una riduzione delle prestazioni.
Sintassi
PERMISSIONS ( [ objectid [ , 'column' ] ] )
Argomenti
objectid
ID di un'entità a sicurezza diretta. Se objectid viene omesso, il valore della mappa di bit include le autorizzazioni per le istruzioni dell'utente corrente. In caso contrario, include le autorizzazioni per l'entità a sicurezza diretta dell'utente corrente. L'entità a sicurezza diretta specificata deve essere inclusa nel database corrente. Utilizzare la funzione OBJECT_ID per determinare il valore di objectid.'column'
Nome facoltativo di una colonna di cui si desidera ottenere informazioni sulle autorizzazioni. Il nome della colonna deve essere valido nella tabella specificata da objectid.
Tipi restituiti
int
Osservazioni
È possibile utilizzare l'istruzione PERMISSIONS per determinare se l'utente corrente dispone delle autorizzazioni necessarie per eseguire un'istruzione o per concedere un'autorizzazione a un altro utente.
Le informazioni restituite sono mappe di 32 bit.
I 16 bit inferiori indicano autorizzazioni concesse all'utente e autorizzazioni valide per i gruppi di Windows o per i ruoli predefiniti del server di cui l'utente corrente è membro. Se, ad esempio, viene restituito il valore 66 (valore esadecimale 0x42) e l'argomento objectid è stato omesso, significa che l'utente dispone delle autorizzazioni per eseguire le istruzioni CREATE TABLE (valore decimale 2) e BACKUP DATABASE (valore decimale 64).
I 16 bit superiori indicano le autorizzazioni che l'utente può concedere ad altri utenti tramite l'istruzione GRANT. Questi bit vengono interpretati esattamente come i 16 bit inferiori descritti nelle tabelle riportate di seguito, con la sola differenza che sono spostati a sinistra di 16 bit, ovvero moltiplicati per 65536. Se si specifica objectid, il bit 0x8 (valore decimale 8), ad esempio, indica l'autorizzazione INSERT. 0x80000 (valore decimale 524288) indica invece la capacità di concedere l'autorizzazione INSERT tramite l'istruzione GRANT in quanto 524288 = 8 x 65536.
A causa dell'appartenenza ai ruoli è possibile che un utente che non dispone delle autorizzazioni necessarie per eseguire un'istruzione sia comunque in grado di concedere tale autorizzazione a un altro utente.
Nella tabella seguente vengono illustrati i bit utilizzati per le autorizzazioni per le istruzioni quando objectid viene omesso.
Bit (dec) |
Bit (hex) |
Autorizzazione per le istruzioni |
---|---|---|
1 |
0x1 |
CREATE DATABASE (solo per il database master) |
2 |
0x2 |
CREATE TABLE |
4 |
0x4 |
CREATE PROCEDURE |
8 |
0x8 |
CREATE VIEW |
16 |
0x10 |
CREATE RULE |
32 |
0x20 |
CREATE DEFAULT |
64 |
0x40 |
BACKUP DATABASE |
128 |
0x80 |
BACKUP LOG |
256 |
0x100 |
Riservata. |
Nella tabella seguente vengono descritti i bit utilizzati per le autorizzazioni per gli oggetti che vengono restituiti quando viene specificato solo l'argomento objectid.
Bit (dec) |
Bit (hex) |
Autorizzazione per le istruzioni |
---|---|---|
1 |
0x1 |
SELECT ALL |
2 |
0x2 |
UPDATE ALL |
4 |
0x4 |
REFERENCES ALL |
8 |
0x8 |
INSERT |
16 |
0x10 |
DELETE |
32 |
0x20 |
EXECUTE (solo procedure) |
4096 |
0x1000 |
SELECT ANY (almeno una colonna) |
8192 |
0x2000 |
UPDATE ANY |
16384 |
0x4000 |
REFERENCES ANY |
Nella tabella seguente vengono descritti i bit utilizzati per le autorizzazioni per gli oggetti a livello di colonna che vengono restituiti quando sono stati specificati entrambi gli argomenti objectid e column.
Bit (dec) |
Bit (hex) |
Autorizzazione per le istruzioni |
---|---|---|
1 |
0x1 |
SELECT |
2 |
0x2 |
UPDATE |
4 |
0x4 |
REFERENCES |
Se un argomento risulta NULL oppure non è valido, ad esempio se l'oggetto specificato in objectid o la colonna specificata in column non esiste, viene restituito NULL. I valori in bit delle autorizzazioni non applicabili, ad esempio l'autorizzazione EXECUTE (bit 0x20) per una tabella, non sono definiti.
Per determinare i vari set di bit della mappa di bit restituita dalla funzione PERMISSIONS, utilizzare l'operatore AND bit per bit (&).
Per ottenere un elenco delle autorizzazioni per un utente del database corrente, è inoltre possibile eseguire la stored procedure di sistema sp_helprotect .
Esempi
A. Utilizzo della funzione PERMISSIONS con le autorizzazioni per le istruzioni
Nell'esempio seguente si determina se l'utente corrente può eseguire l'istruzione CREATE TABLE.
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.';
B. Utilizzo della funzione PERMISSIONS con le autorizzazioni per gli oggetti
Nell'esempio seguente si determina se l'utente corrente può inserire una riga di dati nella tabella Address del database AdventureWorks2008R2.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2008R2.Person.Address','U'))&8=8
PRINT 'The current user can insert data into Person.Address.'
ELSE
PRINT 'ERROR: The current user cannot insert data into Person.Address.';
C. Utilizzo della funzione PERMISSIONS con autorizzazioni che possono essere concesse
Nell'esempio seguente si determina se l'utente corrente può concedere a un altro utente l'autorizzazione INSERT per la tabella Address del database AdventureWorks2008R2.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2008R2.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';