sys.fn_my_permissions (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

Restituisce un elenco delle autorizzazioni valide concesse all'entità per un'entità a protezione diretta. Una funzione correlata è HAS_PERMS_BY_NAME.

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

Sintassi

  
fn_my_permissions ( securable , 'securable_class' )  

Argomenti

securable
Nome dell'entità a protezione diretta. Se l'entità a sicurezza diretta è il server o un database, questo valore deve essere impostato su NULL. securable è un'espressione scalare di tipo sysname. securable può essere un nome multipart.

'securable_class'
Nome della classe dell'entità a sicurezza diretta per cui vengono elencate le autorizzazioni. securable_class è un sysname. securable_class deve essere uno dei seguenti: RUOLO APPLICAZIONE, ASSEMBLY, CHIAVE ASIMMETRICA, CERTIFICATO, CONTRATTO, DATABASE, ENDPOINT, CATALOGO FULL-TEXT, ACCESSO, TIPO DI MESSAGGIO, OGGETTO, REMOTE SERVICE BINDING, ROLE, ROUTE, SCHEMA, SERVER, SERVIZIO, CHIAVE SIMMETRICA, TIPO, UTENTE, RACCOLTA XML SCHEMA.

Colonne restituite

Nella tabella seguente sono elencate le colonne fn_my_permissions restituite. Ogni riga restituita descrive un'autorizzazione assegnata al contesto di sicurezza corrente per l'entità a protezione diretta. Restituisce NULL se la query non viene eseguita correttamente.

Nome colonna Type Descrizione
nome_entità sysname Nome dell'entità a sicurezza diretta per la quale sono state concesse le autorizzazioni valide elencate.
subentity_name sysname Nome della colonna nel caso in cui l'entità a sicurezza diretta contenga colonne. In caso contrario, NULL.
permission_name nvarchar Nome dell'autorizzazione.

Commenti

Questa funzione con valori di tabella restituisce un elenco delle autorizzazioni valide assegnate all'entità di protezione chiamante per un'entità a sicurezza diretta specificata. Per autorizzazione valida si intende una qualsiasi delle autorizzazioni seguenti:

  • Autorizzazione concessa direttamente all'entità di protezione e non negata.

  • Un'autorizzazione inclusa in un'autorizzazione di livello superiore assegnata all'entità di protezione e non negata.

  • Un'autorizzazione concessa a un ruolo o a un gruppo cui appartiene l'entità di protezione e non negata.

  • Un'autorizzazione di cui dispone un ruolo o un gruppo a cui appartiene l'entità di protezione e non negata.

La valutazione dell'autorizzazione viene sempre eseguita nel contesto di sicurezza del chiamante. Per determinare se è stata assegnata un'autorizzazione valida a un'altra entità di protezione, il chiamante deve disporre dell'autorizzazione IMPERSONATE per tale entità.

Per le entità a livello di schema, sono accettati i nomi non Null composti da una, due o tre parti. Per le entità a livello di database, viene accettato un nome in una parte, con un valore Null che significa "database corrente". Per il server stesso, è richiesto un valore Null, ad indicare il server corrente. fn_my_permissions non è possibile controllare le autorizzazioni in un server collegato.

La query seguente restituirà un elenco di classi di entità a protezione diretta predefinite:

SELECT DISTINCT class_desc FROM fn_builtin_permissions(default)  
    ORDER BY class_desc;  
GO  

Se DEFAULT viene specificato come valore di a protezione diretta o securable_class, il valore verrà interpretato come NULL.

Autorizzazioni

È richiesta l'appartenenza al ruolo public.

Esempi

R. Elenco delle autorizzazioni valide per il server

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per il server.

SELECT * FROM fn_my_permissions(NULL, 'SERVER');  
GO  

B. Elenco delle autorizzazioni valide per il database

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per il database AdventureWorks2012.

USE AdventureWorks2012;  
SELECT * FROM fn_my_permissions (NULL, 'DATABASE');  
GO  

C. Elenco delle autorizzazioni valide per una vista

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per la vista vIndividualCustomer nello schema Sales del database AdventureWorks2012.

USE AdventureWorks2012;  
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT')   
    ORDER BY subentity_name, permission_name ;   
GO   

D. Elenco delle autorizzazioni valide di un altro utente

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui l'utente del database Wanida dispone per la tabella Employee nello schema HumanResources del database AdventureWorks2012. Il chiamante deve disporre dell'autorizzazione IMPERSONATE per l'utente Wanida.

EXECUTE AS USER = 'Wanida';  
SELECT * FROM fn_my_permissions('HumanResources.Employee', 'OBJECT')   
    ORDER BY subentity_name, permission_name ;    
REVERT;  
GO  

E. Elenco delle autorizzazioni valide per un certificato

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per un certificato denominato Shipping47 nel database corrente.

SELECT * FROM fn_my_permissions('Shipping47', 'CERTIFICATE');  
GO  

F. Elenco delle autorizzazioni valide per una raccolta di XML Schema

Nell'esempio seguente viene restituito un elenco delle autorizzazioni effettive del chiamante in una raccolta di XML Schema ProductDescriptionSchemaCollection denominata nel AdventureWorks2012 database .

USE AdventureWorks2012;  
SELECT * FROM fn_my_permissions('ProductDescriptionSchemaCollection',  
    'XML SCHEMA COLLECTION');  
GO  

G. Elenco delle autorizzazioni valide per un utente del database

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per un utente denominato MalikAr nel database corrente.

SELECT * FROM fn_my_permissions('MalikAr', 'USER');  
GO  

H. Elenco delle autorizzazioni valide di un altro account di accesso

Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui l'account di accesso di SQL ServerWanidaBenshoof dispone per la tabella Employee nello schema HumanResources del database AdventureWorks2012. Il chiamante deve disporre dell'autorizzazione IMPERSONATE per l'account di accesso di SQL ServerWanidaBenshoof.

EXECUTE AS LOGIN = 'WanidaBenshoof';  
SELECT * FROM fn_my_permissions('AdventureWorks2012.HumanResources.Employee', 'OBJECT')   
    ORDER BY subentity_name, permission_name ;    
REVERT;  
GO  

Vedere anche

Funzioni di sicurezza (Transact-SQL)
Autorizzazioni (motore di database)
Securables
Gerarchia delle autorizzazioni (Motore di database)
sys.fn_builtin_permissions (Transact-SQL)
Viste del catalogo relative alla sicurezza (Transact-SQL)
EXECUTE AS (Transact-SQL)