Condividi tramite


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.

Icona di collegamento a un argomentoConvenzioni della 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, 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.';