Поделиться через


sys.fn_my_permissions (Transact-SQL)

Возвращает список разрешений на защищаемый объект, фактически предоставленных участнику. Связанная функция — HAS_PERMS_BY_NAME.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

fn_my_permissions ( securable , 'securable_class' )

Аргументы

  • securable
    Имя защищаемого объекта. Если защищаемым объектом является сам сервер или база данных, то этому аргументу должно быть присвоено значение NULL. Аргумент securable является скалярным выражением типа sysname. Аргумент securable может быть именем, состоящим из нескольких частей.

  • 'securable_class'
    Имя класса защищаемых объектов, для которого перечислены разрешения. securable_class имеет тип sysname. Аргумент securable_class должен содержать одно из следующих значений: APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACT, DATABASE, FULLTEXT CATALOG, MESSAGE TYPE, OBJECT, REMOTE SERVICE BINDING, ROLE, ROUTE, SCHEMA, SERVICE, SYMMETRIC KEY, TYPE, USER, XML SCHEMA COLLECTION.

Возвращаемые столбцы

Следующая таблица содержит список столбцов, возвращаемых функцией fn_my_permissions. Каждая возвращаемая строка описывает разрешение относительно защищаемого объекта в текущем контексте безопасности. Возвращает NULL в случае неудачного завершения запроса.

Имя столбца

Тип

Описание

entity_name

sysname

Имя защищаемого объекта, на который предоставлены перечисленные разрешения.

subentity_name

sysname

Имя столбца, если у защищаемого объекта есть столбцы, в противном случае — NULL.

permission_name

nvarchar

Имя разрешения.

Замечания

Эта функция возвращает список действующих разрешений вызывающего участника в отношении указанного защищаемого объекта. Действующим разрешением будет одно из следующих:

  • разрешение было предоставлено непосредственно участнику и не было запрещено;

  • Действующее разрешение, следующее из разрешений более высокого уровня, которыми обладает участник.

  • Действующее разрешение, предоставленное роли или группе, членом которой является участник.

  • Действующее разрешение, принадлежащее роли или группе, членом которой является участник.

Оценка разрешений всегда производится в контексте безопасности вызывающей стороны. Для определения того, имеют ли какие-либо другие участники действующее разрешение, вызывающая сторона должна иметь разрешение IMPERSONATE в отношении такого участника.

Для сущностей уровня схемы допустимы одно-, двух- и трехчастные имена, значением которых не является NULL. Для сущностей уровня базы данных допустимо имя, состоящее из одной части, значение NULL означает «текущая база данных». Для самого сервера значение NULL является обязательным и означает текущий сервер. Функция fn_my_permissions не может проверить разрешения на связанном сервере.

Приведенный ниже запрос возвращает список встроенных классов защищаемых объектов:

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

Если значение DEFAULT передано как securable или securable_class, значение будет интерпретировано как NULL.

Примеры

А.Перечисление действующих разрешений на сервере

Следующий пример возвращает список действующих разрешений вызывающей стороны на сервере.

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

Б.Перечисление действующих разрешений в базе данных

Следующий пример возвращает список действующих разрешений для вызывающей стороны в базе данных AdventureWorks2012 .

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

В.Перечисление действующих разрешений в представлении

Следующий пример возвращает список действующих разрешений вызывающей стороны в представлении vIndividualCustomer в схеме Sales базы данных AdventureWorks2012 .

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

Г.Перечисление действующих разрешений другого пользователя

Следующий пример возвращает список действующих разрешений пользователя базы данных Wanida для таблицы Employee в схеме HumanResources базы данных AdventureWorks2012 . Для вызывающей стороны требуется разрешение IMPERSONATE для пользователя Wanida.

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

Д.Перечисление действующих разрешений для сертификата

Следующий пример возвращает список действующих разрешений вызывающей стороны для сертификата с именем Shipping47 в текущей базе данных.

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

Е.Перечисляет действующие разрешения для коллекции XML-схем

Следующий пример возвращает список действующих разрешений вызывающей стороны на коллекцию XML-схем по имени ProductDescriptionSchemaCollection в базе данных AdventureWorks2012 .

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

Ж.Перечисление действующих разрешений для пользователя базы данных

Следующий пример возвращает список действующих разрешений вызывающей стороны для пользователя по имени MalikAr в текущей базе данных.

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

З.Перечисление действующих разрешений другого имени входа

Следующий пример возвращает список действующих разрешений SQL Server имени входа WanidaBenshoof для таблицы Employee в схеме HumanResources базы данных AdventureWorks2012 . Для вызывающей стороны требуется разрешение IMPERSONATE для имени входа SQL Server WanidaBenshoof.

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

См. также

Справочник

Функции безопасности (Transact-SQL)

sys.fn_builtin_permissions (Transact-SQL)

Представления каталога безопасности (Transact-SQL)

EXECUTE AS (Transact-SQL)

Основные понятия

Разрешения (компонент Database Engine)

Защищаемые объекты

Иерархия разрешений (компонент Database Engine)