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


sys.fn_my_permissions (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

fn_my_permissions ( securable , 'securable_class' )

Аргументы

securable

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

"securable_class"

Имя класса защищаемого объекта, для которого перечислены разрешения. securable_class имеет имя sysname с значением по умолчаниюNULL.

Этот аргумент должен быть одним из следующих значений: APPLICATION ROLE, ASSEMBLYUSERTYPESYMMETRIC KEYSERVICESCHEMASERVERROUTEROLEASYMMETRIC KEYREMOTE SERVICE BINDINGOBJECTCERTIFICATEMESSAGE TYPELOGINDATABASECONTRACTENDPOINTFULLTEXT CATALOG. XML SCHEMA COLLECTION Значение NULL по умолчанию SERVER.

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

В следующей таблице перечислены возвращаемые 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_class, значение интерпретируется как NULL.

Эта fn_my_permissions функция не поддерживается в выделенных пулах SQL Azure Synapse Analytics.

Разрешения

Необходимо быть членом роли public.

Примеры

А. Вывод списка эффективных разрешений на сервере

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

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

B. Вывод списка эффективных разрешений в базе данных

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

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

В. Вывод списка эффективных разрешений в представлении

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

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

D. Вывод списка эффективных разрешений другого пользователя

Следующий пример возвращает список действующих разрешений пользователя базы данных Wanida для таблицы Employee в схеме HumanResources базы данных AdventureWorks2022. Вызывающий объект требует 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

F. Вывод списка эффективных разрешений для коллекции схем XML

В следующем примере возвращается список эффективных разрешений вызывающего объекта в коллекции схем XML с именем ProductDescriptionSchemaCollection в AdventureWorks2022 базе данных.

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

G. Вывод списка эффективных разрешений для пользователя базы данных

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

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

H. Вывод списка эффективных разрешений для другого имени входа

В следующем примере возвращается список эффективных разрешений для входа WanidaBenshoof SQL Server в Employee таблицу в HumanResources схеме AdventureWorks2022 базы данных. Вызывающий объект требует IMPERSONATE разрешения на вход WanidaBenshoofSQL Server.

EXECUTE AS LOGIN = 'WanidaBenshoof';

SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;

REVERT;
GO