Compartilhar via


sys.fn_my_permissions (Transact-SQL)

Retorna uma lista das permissões efetivamente concedidas à entidade em um protegível. Uma função relacionada é HAS_PERMS_BY_NAME.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

fn_my_permissions (securable,'securable_class')

Argumentos

  • securable
    É o nome do protegível. Se o protegível for o servidor ou um banco de dados, esse valor deverá ser definido como NULL. securable é uma expressão escalar do tipo sysname. securable pode ser um nome de várias partes.

  • 'securable_class'
    É o nome da classe de protegível para a qual são listadas as permissões. securable_class é um sysname. securable_class deve ser um dos seguintes itens: 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.

Colunas retornadas

A tabela a seguir lista as colunas retornadas por fn_my_permissions. Cada linha retornada descreve uma permissão mantida pelo contexto de segurança atual no protegível. Retornará NULL se a consulta falhar.

Nome da coluna

Tipo

Descrição

entity_name

sysname

Nome do protegível no qual as permissões listadas estão efetivamente concedidas.

subentity_name

sysname

Nome da coluna se o protegível tiver colunas; caso contrário, NULL.

permission_name

nvarchar

Nome da permissão.

Comentários

Esta função com valor de tabela retorna uma lista das permissões efetivas mantidas pela entidade de chamada em um protegível especificado. Uma permissão efetiva é qualquer uma das seguintes:

  • Uma permissão concedida diretamente à entidade, e não negada.

  • Uma permissão indicada por uma permissão de nível maior mantida pelo principal e não negada.

  • Uma permissão concedida a uma função ou grupo do qual o principal é um membro e não negada.

  • Uma permissão mantida por uma função ou grupo do qual o principal é um membro e não negada.

A avaliação da permissão é sempre executada no contexto de segurança do chamador. Para determinar se alguma outra entidade tem uma permissão efetiva, o chamador deve ter a permissão IMPERSONATE nessa entidade.

Para entidades no nível de esquema, nomes não nulos de uma, duas ou três partes são aceitos. Para entidades no nível de banco de dados, um nome de uma parte é aceito, com um valor nulo que significa "banco de dados atual". Para o próprio servidor, um valor nulo (significando "servidor atual") é necessário. fn_my_permissions não pode verificar permissões em um servidor vinculado.

A consulta a seguir retornará uma lista de classes de protegíveis internos:

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

Se DEFAULT for fornecido como o valor de securable ou securable_class, o valor será interpretado como NULL.

Exemplos

A. Listando permissões efetivas no servidor

O exemplo a seguir retorna uma lista de permissões efetivas do chamador no servidor.

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

B. Listando permissões efetivas no banco de dados

O exemplo a seguir retorna uma lista de permissões efetivas do chamador no banco de dados AdventureWorks2008R2.

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

C. Listando permissões efetivas em uma exibição

O exemplo a seguir retorna uma lista de permissões efetivas do chamador na exibição vIndividualCustomer no esquema Sales do banco de dados AdventureWorks2008R2.

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

D. Listando permissões efetivas de outro usuário

O exemplo a seguir retorna uma lista de permissões efetivas do usuário de banco de dados Wanida na tabela Employee no esquema HumanResources do banco de dados AdventureWorks2008R2. O chamador requer a permissão IMPERSONATE no usuário Wanida.

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

E. Listando permissões efetivas em um certificado

O exemplo a seguir retorna uma lista das permissões efetivas do chamador em um certificado denominado Shipping47 no banco de dados atual.

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

F. Listando permissões efetivas em uma coleção de esquemas XML

O exemplo a seguir retorna uma lista das permissões efetivas do chamador em uma coleção de esquemas XML denominada ProductDescriptionSchemaCollection no banco de dados AdventureWorks2008R2.

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

G. Listando permissões efetivas em um usuário de banco de dados

O exemplo a seguir retorna uma lista das permissões efetivas do chamador em um usuário denominado MalikAr no banco de dados atual.

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

H. Listando permissões efetivas de outro logon

O exemplo a seguir retorna uma lista de permissões efetivas do logon do SQL ServerWanidaBenshoof na tabela Employee no esquema HumanResourcesdo banco de dados AdventureWorks2008R2. O chamador requer a permissão IMPERSONATE no logon do SQL ServerWanidaBenshoof.

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