sys.fn_my_permissions (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
返回有效授予主体对安全对象的权限的列表。 一个相关的函数是 HAS_PERMS_BY_NAME。
语法
fn_my_permissions ( securable , 'securable_class' )
参数
securable
安全对象的名称。 如果安全对象是服务器或数据库,则应将此值设置为 NULL
。 securable 是 sysname 类型的标量表达式。 securable 可以是由多个部分构成的名称。
'securable_class'
列出其权限的安全对象的类的名称。 securable_class为 sysname,默认值为 NULL
.
此参数必须是下列值之一:APPLICATION ROLE
、、ASSEMBLY
、ASYMMETRIC KEY
、、ENDPOINT
USER
SERVER
TYPE
SCHEMA
XML SCHEMA COLLECTION
SYMMETRIC KEY
SERVICE
ROUTE
ROLE
REMOTE SERVICE BINDING
OBJECT
LOGIN
DATABASE
MESSAGE TYPE
CERTIFICATE
CONTRACT
FULLTEXT CATALOG
。 默认值为 NULL
SERVER
.
返回的列
下表列出了返回的 fn_my_permissions
列。 返回的每一行说明了当前安全上下文拥有的对安全对象的一种权限。 如果查询失败,则返回 NULL
。
列名称 | 类型 | 描述 |
---|---|---|
entity_name |
sysname | 对其有效授予所列权限的安全对象的名称。 |
subentity_name |
sysname | 如果安全对象具有列,则为列名,否则 NULL 为列名。 |
permission_name |
nvarchar | 权限的名称。 |
备注
该表值函数返回调用主体持有的对指定安全对象的有效权限的列表。 有效权限是以下任一选项:
- 直接授予主体并且不被拒绝的权限。
- 由主体持有的更高级权限暗含的、且不被拒绝的权限。
- 授予主体所属的角色或组的、且不被拒绝的权限。
- 由主体所属的角色或组持有的、且不被拒绝的权限。
权限评估始终在调用方的安全上下文中执行。 若要确定其他主体是否具有有效权限,调用方必须具有 IMPERSONATE
该主体的权限。
对于架构级实体,接受一部分、两部分或三部分的非空名称。 对于数据库级实体,将接受一部分名称,其 null 值表示 当前数据库。 对于服务器本身,需要 null 值(表示 当前服务器)。 fn_my_permissions
无法检查链接服务器上的权限。
以下查询返回内置安全类的列表:
SELECT DISTINCT class_desc
FROM fn_builtin_permissions(DEFAULT)
ORDER BY class_desc;
GO
如果DEFAULT
作为安全对象或securable_class的值提供,则将该值解释为 NULL
。
Azure Synapse Analytics 专用 SQL 池不支持该 fn_my_permissions
函数。
权限
要求 公共 角色具有成员身份。
示例
A. 列出服务器上的有效权限
以下示例返回调用方对服务器的有效权限的列表。
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO
B. 列出对数据库的有效权限
以下示例返回调用方对 AdventureWorks2022
数据库的有效权限的列表。
USE AdventureWorks2022;
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
°C 列出对视图的有效权限
以下示例返回调用方对 AdventureWorks2022
数据库内 vIndividualCustomer
架构中 Sales
视图的有效权限的列表。
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT')
ORDER BY subentity_name, permission_name;
GO
D. 列出其他用户的有效权限
以下示例返回数据库用户 Wanida
对 AdventureWorks2022
数据库内 Employee
架构中 HumanResources
表的有效权限的列表。 调用方需要 IMPERSONATE
对用户 Wanida
具有权限。
EXECUTE AS USER = 'Wanida';
SELECT *
FROM fn_my_permissions('HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO
E. 列出对证书的有效权限
以下示例返回调用方对当前数据库中证书 Shipping47
的有效权限的列表。
SELECT * FROM fn_my_permissions('Shipping47', 'CERTIFICATE');
GO
F. 列出对 XML 架构集合的有效权限
以下示例返回调用方对 AdventureWorks2022
数据库中 XML 架构集合 ProductDescriptionSchemaCollection
的有效权限的列表。
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions(
'ProductDescriptionSchemaCollection',
'XML SCHEMA COLLECTION'
);
GO
G. 列出数据库用户的有效权限
以下示例返回调用方对当前数据库中用户 MalikAr
的有效权限的列表。
SELECT * FROM fn_my_permissions('MalikAr', 'USER');
GO
H. 列出另一个登录名的有效权限
以下示例返回 SQL Server 登录 WanidaBenshoof
对 AdventureWorks2022
数据库内 HumanResources
架构中 Employee
表的有效权限的列表。 调用方需要 IMPERSONATE
对 SQL Server 登录 WanidaBenshoof
名具有权限。
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO