Partilhar via


sys.fn_my_permissions (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric

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

Convenções de sintaxe de 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 as permissões estão listadas. securable_class é sysname, com um padrão de NULL.

Esse argumento deve ser um dos seguintes valores: , , , SYMMETRIC KEYLOGINFULLTEXT CATALOGMESSAGE TYPEENDPOINTCONTRACTUSERSCHEMATYPEREMOTE SERVICE BINDINGROLEROUTESERVICEXML SCHEMA COLLECTIONDATABASESERVERCERTIFICATEOBJECTASYMMETRIC KEYASSEMBLYAPPLICATION ROLE Um valor padrão de NULL SERVER.

Colunas retornadas

A tabela a seguir lista as colunas retornadas 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 Type 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 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 opções:

  • Uma permissão concedida diretamente à entidade de segurança, 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 de segurança tem uma permissão efetiva, o chamador deve ter IMPERSONATE permissão nessa entidade de segurança.

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

A consulta a seguir retorna uma lista de classes protegíveis internas:

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

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

Não há suporte para a fn_my_permissions função em pools de SQL dedicados do Azure Synapse Analytics.

Permissões

Requer associação à função pública .

Exemplos

R. Listar 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. Listar permissões efetivas no banco de dados

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

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

C. Listar 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 AdventureWorks2022.

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

D. Listar 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 AdventureWorks2022. O chamador requer IMPERSONATE permissão 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. Listar 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. Listar 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 AdventureWorks2022.

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

G. Listar 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. Listar permissões efetivas de outro login

O exemplo a seguir retorna uma lista de permissões efetivas do logon WanidaBenshoof do SQL Server na tabela Employee no esquema HumanResources do banco de dados AdventureWorks2022. O chamador requer IMPERSONATE permissão no logon WanidaBenshoofdo SQL Server.

EXECUTE AS LOGIN = 'WanidaBenshoof';

SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;

REVERT;
GO