PERMISSIONS (Transact-SQL)

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

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 funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Usare in alternativa fn_my_permissions e Has_Perms_By_Name. L'utilizzo della funzione PERMISSIONS può comportare una riduzione delle prestazioni.

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

Sintassi

PERMISSIONS ( [ objectid [ , 'column' ] ] )  

Nota

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

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, la mappa di bit include le autorizzazioni per l'entità a protezione diretta dell'utente corrente. L'entità a sicurezza diretta specificata deve essere inclusa nel database corrente. Usare 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. Ad esempio il bit 0x8 (valore decimale 8) indica l'autorizzazione INSERT se è specificato objectid. 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 usati dalle 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 CREA TABELLA
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 Riservato

Nella tabella seguente vengono descritti i bit usati 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 usati dalle 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 parametro 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 ogni set di bit nella mappa di bit restituita dalla funzione PERMISSIONS, usare 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

R. 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 AdventureWorks2012.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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 AdventureWorks2012.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.Person.Address','U'))&0x80000=0x80000  
   PRINT 'INSERT on Person.Address is grantable.'  
ELSE  
   PRINT 'You may not GRANT INSERT permissions on Person.Address.';  

Vedere anche

DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Funzioni di sistema (Transact-SQL)