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.

Aplica-se a: SQL Server (SQL Server 2008 à versão atual).

Ícone de vínculo de tópico Convenções da 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 é sysname. securable_class deve ser um dos seguintes valores: 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. Retorna NULL se a consulta falhar.

Nome da coluna

Tipo

Descrição

entity_name

sysname

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

subentity_name

sysname

Nome da coluna se o protegível tiver colunas; caso contrário, será 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 ao principal e não negada.

  • Uma permissão implicada por uma permissão de nível superior mantida pela entidade de segurança, e não negada.

  • Uma permissão concedida a uma função ou grupo do qual a entidade de segurança é membro, e não negada.

  • Uma permissão mantida por uma função ou grupo de qual a entidade de segurança é 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 do 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 servidor propriamente dito, um valor nulo (que significa “servidor atual”) é obrigatório. fn_my_permissions não podem inspecionar permissões um servidor vinculado.

A consulta a seguir retornará uma lista de classes de itens 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 AdventureWorks2012 .

USE AdventureWorks2012;
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 AdventureWorks2012 .

USE AdventureWorks2012;
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 AdventureWorks2012 . 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 AdventureWorks2012 .

USE AdventureWorks2012;
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 Server WanidaBenshoof na tabela Employee no esquema HumanResourcesdo banco de dados AdventureWorks2012 . O chamador requer a permissão IMPERSONATE no logon do SQL Server WanidaBenshoof.

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

Consulte também

Referência

Funções de segurança (Transact-SQL)

sys.fn_builtin_permissions (Transact-SQL)

Exibições do catálogo de segurança (Transact-SQL)

EXECUTE AS (Transact-SQL)

Conceitos

Permissões (Mecanismo de Banco de Dados)

Protegíveis

Hierarquia de permissões (Mecanismo de Banco de Dados)