sys.fn_my_permissions (Transact-SQL)

Gibt eine Liste der Berechtigungen zurück, die dem Prinzipal eines sicherungsfähigen Elements effektiv gewährt wurden. Eine verwandte Funktion lautet HAS_PERMS_BY_NAME.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

fn_my_permissions (securable,'securable_class')

Argumente

  • securable
    Der Name des sicherungsfähigen Elements. Handelt es sich bei dem sicherungsfähigen Element um den Server oder um eine Datenbank, sollte dieser Wert auf NULL festgelegt werden. securable ist ein skalarer Ausdruck des Typs sysname. securable kann ein mehrteiliger Name sein.

  • 'securable_class'
    Der Name der Klasse des sicherungsfähigen Elements, für das Berechtigungen aufgelistet sind. securable_class ist vom Datentyp sysname. Für das Argument securable_class stehen die folgenden Werte zur Verfügung: APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACT, DATABASE, ENDPOINT, FULLTEXT CATALOG, LOGIN, MESSAGE TYPE, OBJECT, REMOTE SERVICE BINDING, ROLE, ROUTE, SCHEMA, SERVER, SERVICE, SYMMETRIC KEY, TYPE, USER, XML SCHEMA COLLECTION.

Zurückgegebene Spalten

In der folgenden Tabelle sind die Spalten aufgeführt, die von fn_my_permissions zurückgegeben werden. Jede zurückgegebene Zeile beschreibt eine Berechtigung, über die der aktuelle Sicherheitskontext für das sicherungsfähige Element verfügt. Schlägt die Abfrage fehl, wird NULL zurückgegeben.

Spaltenname

Typ

Beschreibung

entity_name

sysname

Der Name des sicherungsfähigen Elements, für das die aufgelisteten Berechtigungen effektiv gewährt wurden.

subentity_name

sysname

Der Spaltenname, sofern das sicherungsfähige Element über Spalten verfügt; andernfalls NULL.

permission_name

nvarchar

Der Name der Berechtigung.

Hinweise

Diese Tabellenwertfunktion gibt eine Liste der gültigen Berechtigungen zurück, über die der aufrufende Prinzipal für ein bestimmtes sicherungsfähiges Element verfügt. Eine gültige Berechtigung ist eine der folgenden:

  • Eine Berechtigung, die dem Prinzipal direkt gewährt und nicht verweigert wurde.

  • Eine Berechtigung, die durch eine Berechtigung auf höherer Ebene des Prinzipals impliziert wird und nicht verweigert wird.

  • Eine Berechtigung, die einer Rolle oder Gruppe erteilt wird, der der Prinzipal als Mitglied angehört, und nicht verweigert wird.

  • Eine Berechtigung einer Rolle oder Gruppe, der der Prinzipal als Mitglied angehört, und die nicht verweigert wird.

Die Berechtigungsauswertung erfolgt immer im Sicherheitskontext des Aufrufers. Um zu ermitteln, ob ein anderer Prinzipal über eine gültige Berechtigung verfügt, muss der Aufrufer über die IMPERSONATE-Berechtigung für diesen Prinzipal verfügen.

Für Entitäten auf Schemaebene werden ein-, zwei- oder dreiteilige Namen akzeptiert, die ungleich NULL sind. Für Entitäten auf Datenbankebene werden einteilige Namen akzeptiert, wobei ein NULL-Wert für "aktuelle Datenbank" steht. Für den Server selbst ist ein NULL-Wert (der für "aktueller Server" steht) erforderlich. fn_my_permissions kann die Berechtigungen für einen Verbindungsserver nicht überprüfen.

Die folgende Abfrage gibt eine Liste integrierter sicherungsfähiger Klassen zurück:

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

Wenn DEFAULT als Wert für securable oder securable_class angegeben wird, wird der Wert als NULL interpretiert.

Beispiele

A. Auflisten der gültigen Berechtigungen auf dem Server

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Aufrufers auf dem Server zurück.

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

B. Auflisten der gültigen Berechtigungen für die Datenbank

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Aufrufers für die AdventureWorks2008R2-Datenbank zurück.

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

C. Auflisten der gültigen Berechtigungen für eine Sicht

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Aufrufers für die vIndividualCustomer-Sicht im Sales-Schema der AdventureWorks2008R2-Datenbank zurück.

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

D. Auflisten der gültigen Berechtigungen eines anderen Benutzers

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Datenbankbenutzers Wanida für die Employee-Tabelle im HumanResources-Schema der AdventureWorks2008R2-Datenbank zurück. Der Aufrufer benötigt die IMPERSONATE-Berechtigung für den Benutzer Wanida.

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

E. Auflisten der gültigen Berechtigungen für ein Zertifikat

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Aufrufers für ein Zertifikat namens Shipping47 in der aktuellen Datenbank zurück.

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

F. Auflisten der gültigen Berechtigungen für eine XML-Schemaauflistung

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Aufrufers für eine XML-Schemaauflistung namens ProductDescriptionSchemaCollection in der AdventureWorks2008R2-Datenbank zurück.

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

G. Auflisten der gültigen Berechtigungen für einen Datenbankbenutzer

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des Aufrufers für einen Benutzer namens MalikAr in der aktuellen Datenbank zurück.

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

D. Auflisten der gültigen Berechtigungen eines anderen Anmeldenamens

Das folgende Beispiel gibt eine Liste der gültigen Berechtigungen des SQL Server-Anmeldenamens WanidaBenshoof für die Employee-Tabelle im HumanResources-Schema der AdventureWorks2008R2-Datenbank zurück. Der Aufrufer benötigt die IMPERSONATE-Berechtigung für den SQL Server-Anmeldenamen WanidaBenshoof.

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