fn_my_permissions (Transact-SQL)

更新日期: 2006 年 12 月 12 日

返回有效授予主体对安全对象的权限的列表。

主题链接图标Transact-SQL 语法约定

语法

fn_my_permissions ( securable , 'securable_class')

参数

  • securable
    安全对象的名称。如果安全对象为服务器或数据库,则该值应设置为 NULL。securable 是类型为 sysname 的标量表达式。securable 可以是多部分名称。
  • 'securable_class'
    为其列出权限的安全对象的类的名称。securable_class 是一个 sysnamesecurable_class 必须为下列值之一: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。

    ms176097.note(zh-cn,SQL.90).gif注意:
    如果使用的是区分大小写的排序规则,则您必须全部以小写字符键入安全对象类。

备注

该表值函数返回调用主体持有的对指定安全对象的有效权限的列表。有效权限包括下列任何一种权限:

  • 直接授予主体并且未被拒绝的权限。
  • 主体持有的更高级权限隐含的并且未被拒绝的权限。
  • 授予主体所属的角色或组并且未被拒绝的权限。
  • 主体所属的角色或组持有并且未被拒绝的权限。

应始终在调用方的安全上下文中执行权限计算。若要确定其他某个主体是否具有有效的权限,调用方必须对该主体具有 IMPERSONATE 权限。

对于架构级实体,可接受一部分、两部分或三部分构成的非空名称。对于数据库级实体,可接受一部分构成的名称,而空值表示“当前数据库**”。对于服务器本身,需要空值(表示“当前数据库”)。fn_my_permissions 不能检查对链接服务器的权限。

以下查询将返回内置安全对象类的列表:

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

如果将 DEFAULT 作为 securablesecurable_class 的值提供,则该值将被解释为 NULL。

返回的列

下表列出了 fn_my_permissions 返回的列。返回的每一行说明了当前安全上下文拥有的对安全对象的一种权限。如果查询失败,则返回 NULL。

列名 类型 说明

entity_name

sysname

对其有效授予所列权限的安全对象的名称。

subentity_name

sysname

如果安全对象具有列,则为列名;否则为 NULL。

permission_name

nvarchar

权限的名称。

示例

A. 列出对服务器的有效权限

以下示例返回调用方对服务器的有效权限的列表。

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

GO

B. 列出对数据库的有效权限

以下示例返回调用方对 AdventureWorks 数据库的有效权限的列表。

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

C. 列出对视图的有效权限

以下示例返回调用方对 AdventureWorks 数据库内 Sales 架构中 vIndividualCustomer 视图的有效权限的列表。

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

D. 列出另一个用户的有效权限

以下示例返回数据库用户 WanidaAdventureWorks 数据库内 HumanResources 架构中 Employee 表的有效权限的列表。调用方需要对用户 Wanida 具有 IMPERSONATE 权限。

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 架构集合的有效权限

以下示例返回调用方对 AdventureWorks 数据库中 XML 架构集合 ProductDescriptionSchemaCollection 的有效权限的列表。

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

G. 列出对数据库用户的有效权限

以下示例返回调用方对当前数据库中用户 MalikAr 的有效权限的列表。

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

H. 列出另一个登录名的有效权限

以下示例返回 SQL Server 登录名 WanidaBenshoofAdventureWorks 数据库内 HumanResources 架构中 Employee 表的有效权限的列表。调用方需要对 SQL Server 登录名 WanidaBenshoof 具有 IMPERSONATE 权限。

EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT * FROM fn_my_permissions('AdventureWorks.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)

其他资源

权限
安全对象
权限层次结构

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 增加了有关在使用区分大小写的排序规则的环境中键入 securable_class 时使用小写字符的说明。