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
, ASSEMBLY
USER
TYPE
SYMMETRIC KEY
SERVICE
SCHEMA
SERVER
ROUTE
ROLE
ASYMMETRIC KEY
REMOTE SERVICE BINDING
OBJECT
CERTIFICATE
MESSAGE TYPE
LOGIN
DATABASE
CONTRACT
ENDPOINT
FULLTEXT 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
разрешения на вход WanidaBenshoof
SQL Server.
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO