Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureDatabase SQL in Microsoft Fabric
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 nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare invece fn_my_permissions e Has_Perms_By_Name. L'utilizzo della funzione PERMISSIONS può comportare una riduzione delle prestazioni.
Convenzioni relative alla sintassi Transact-SQL
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, 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:
I PERMESSI possono essere usati per determinare se l'utente attuale ha i permessi necessari per eseguire un'istruzione o per GRANT ottenere un permesso 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. Ad esempio, un valore restituito di 66 (valore esadecimale 0x42), quando non è specificato alcun oggetto , indica che l'utente ha il permesso di eseguire le CREATE TABLE istruzioni (valore decimale 2) e BACKUPDATABASE (valore decimale 64).
I 16 bit superiori riflettono i permessi che l'utente può GRANT ottenere ad altri utenti. 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, 0x8 (valore decimale 8) è il bit che indica INSERT il permesso quando viene specificato un oggetto . Mentre 0x80000 (valore decimale 524288) indica la possibilità di GRANTINSERT concedere permesso, perché 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) | Punta (esagono) | Autorizzazione per le istruzioni |
|---|---|---|
| 1 | 0x1 | CREATE DATABASE (solo 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 | Prenotato |
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) | Punta (esagono) | Autorizzazione per le istruzioni |
|---|---|---|
| 1 | 0x1 | SELEZIONA TUTTI |
| 2 | 0x2 | UPDATE TUTTI |
| 4 | 0x4 | RIFERIMENTI TUTTI |
| 8 | 0x8 | INSERT |
| 16 | 0x10 | DELETE |
| 32 | 0x20 | EXECUTE (solo procedure) |
| 4096 | 0x1000 | SELECT ANY (almeno una colonna) |
| 8192 | 0x2000 | UPDATE QUALSIASI |
| 16384 | 0x4000 | RIFERIMENTI QUALSIASI |
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) | Punta (esagono) | 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 AdventureWorks2025.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.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
Il seguente esempio determina se l'utente attuale può concedere il INSERT permesso sulla Address tabella nel AdventureWorks2025 database a un altro utente.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';
Vedi anche
DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Funzioni di sistema (Transact-SQL)