sys.fn_my_permissions (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics Platform System (PDW) in Microsoft Fabric Warehouse in Microsoft Fabric
Restituisce un elenco delle autorizzazioni valide concesse all'entità per un'entità a protezione diretta. Una funzione correlata è HAS_PERMS_BY_NAME.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
fn_my_permissions ( securable , 'securable_class' )
Argomenti
securable
Nome dell'entità a protezione diretta. Se l'entità a protezione diretta è il server o un database, questo valore deve essere impostato su NULL
. securable è un'espressione scalare di tipo sysname. l'entità a protezione diretta può essere un nome multipart.
'securable_class'
Nome della classe di entità a protezione diretta per cui sono elencate le autorizzazioni. securable_class è sysname, con un valore predefinito .NULL
Questo argomento deve essere uno dei valori seguenti: APPLICATION ROLE
, ASSEMBLY
, CERTIFICATE
ASYMMETRIC KEY
, , ENDPOINT
TYPE
USER
SYMMETRIC KEY
SERVICE
SERVER
SCHEMA
ROUTE
CONTRACT
ROLE
REMOTE SERVICE BINDING
FULLTEXT CATALOG
DATABASE
LOGIN
MESSAGE TYPE
OBJECT
. XML SCHEMA COLLECTION
Il valore NULL
predefinito è SERVER
.
Colonne restituite
Nella tabella seguente sono elencate le colonne restituite fn_my_permissions
. Ogni riga restituita descrive un'autorizzazione assegnata al contesto di sicurezza corrente per l'entità a protezione diretta. Restituisce NULL
se la query non riesce.
Nome colonna | Tipo | Descrizione |
---|---|---|
entity_name |
sysname | Nome dell'entità a sicurezza diretta per la quale sono state concesse le autorizzazioni valide elencate. |
subentity_name |
sysname | Nome colonna se l'entità a protezione diretta contiene colonne; in caso contrario NULL , . |
permission_name |
nvarchar | Nome dell'autorizzazione. |
Osservazioni:
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. Un'autorizzazione valida è una delle opzioni 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 un'altra entità dispone di un'autorizzazione valida, il chiamante deve disporre IMPERSONATE
dell'autorizzazione per tale entità.
Per le entità a livello di schema, vengono accettati nomi non null a due o due parti. Per le entità a livello di database, viene accettato un nome in una sola parte, con un valore Null che indica il database corrente. Per il server stesso, è necessario un valore Null (ovvero il server corrente). fn_my_permissions
non è possibile controllare le autorizzazioni in un server collegato.
La query seguente restituisce un elenco di classi 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 entità a protezione diretta o securable_class, il valore viene interpretato come NULL
.
La fn_my_permissions
funzione non è supportata nei pool SQL dedicati di Azure Synapse Analytics.
Autorizzazioni
È richiesta l'appartenenza al ruolo public .
Esempi
R. Elencare le 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. Elencare le autorizzazioni valide per il database
Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per il database AdventureWorks2022
.
USE AdventureWorks2022;
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
C. Elencare le autorizzazioni valide per una visualizzazione
Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide di cui il chiamante dispone per la vista vIndividualCustomer
nello schema Sales
del database AdventureWorks2022
.
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT')
ORDER BY subentity_name, permission_name;
GO
D. Elencare le 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 AdventureWorks2022
. Il chiamante richiede IMPERSONATE
l'autorizzazione 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. Elencare le 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. Elencare le 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 denominata ProductDescriptionSchemaCollection
nel AdventureWorks2022
database.
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions(
'ProductDescriptionSchemaCollection',
'XML SCHEMA COLLECTION'
);
GO
G. Elencare le 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. Elencare le autorizzazioni valide di un altro account di accesso
Nell'esempio seguente viene restituito un elenco delle autorizzazioni valide dell'account di accesso WanidaBenshoof
di SQL Server nella Employee
tabella nello HumanResources
schema del AdventureWorks2022
database. Il chiamante richiede IMPERSONATE
l'autorizzazione per l'account di accesso di WanidaBenshoof
SQL Server.
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO