sys.fn_my_permissions (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Devuelve una lista de los permisos concedidos a la entidad de seguridad para un elemento protegible. Una función relacionada es HAS_PERMS_BY_NAME.

Convenciones de sintaxis de Transact-SQL

Sintaxis

fn_my_permissions ( securable , 'securable_class' )

Argumentos

securable

Nombre del elemento protegible. Si el elemento protegible es el servidor o una base de datos, este valor debe establecerse NULLen . securable es una expresión escalar de tipo sysname. securable puede ser un nombre de varias partes.

'securable_class'

Nombre de la clase de protegible para la que se enumeran los permisos. securable_class es sysname, con un valor predeterminado de NULL.

Este argumento debe ser uno de los siguientes valores: APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEYCERTIFICATECONTRACTDATABASE, ENDPOINT, . FULLTEXT CATALOGLOGINMESSAGE TYPEOBJECTREMOTE SERVICE BINDINGROLEROUTESCHEMASERVERSERVICESYMMETRIC KEYTYPEUSERXML SCHEMA COLLECTION Valor predeterminado de NULL para SERVER.

Columnas devueltas

En la tabla siguiente se enumeran las columnas que fn_my_permissions devuelven. En cada fila devuelta se describe un permiso correspondiente al contexto de seguridad actual del elemento protegible. Devuelve si se produce NULL un error en la consulta.

Nombre de la columna Tipo Descripción
entity_name sysname Nombre del elemento protegible en el que se conceden los permisos indicados.
subentity_name sysname Nombre de columna si el elemento protegible tiene columnas; de lo contrario NULL, .
permission_name nvarchar Nombre del permiso.

Observaciones

Esta función con valores de tabla devuelve una lista de los permisos efectivos correspondientes a la entidad de seguridad que realiza la llamada para un elemento protegible determinado. Un permiso efectivo es cualquiera de las siguientes opciones:

  • Un permiso concedido directamente a la entidad de seguridad, no denegado.
  • Un permiso implícito en un permiso de nivel superior de la entidad de seguridad, no denegado.
  • Un permiso concedido a un rol o grupo al que pertenece la entidad de seguridad, no denegado.
  • Un permiso de un rol o grupo al que pertenece la entidad de seguridad, no denegado.

La evaluación de permisos siempre se realiza en el contexto de seguridad del autor de la llamada. Para determinar si alguna otra entidad de seguridad tiene un permiso efectivo, el autor de la llamada debe tener IMPERSONATE permiso en esa entidad de seguridad.

En el caso de las entidades de nivel de esquema, se aceptan nombres no NULL de uno, dos o tres partes. En el caso de las entidades de nivel de base de datos, se acepta un nombre de una parte, con un valor NULL que significa la base de datos actual. Para el propio servidor, se requiere un valor NULL (es decir, el servidor actual). fn_my_permissions no puede comprobar los permisos en un servidor vinculado.

La consulta siguiente devuelve una lista de clases protegibles integradas:

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

Si DEFAULT se proporciona como el valor de protegible o securable_class, el valor se interpreta como NULL.

La fn_my_permissions función no se admite en grupos de SQL dedicados de Azure Synapse Analytics.

Permisos

Debe pertenecer al rol public .

Ejemplos

A Enumeración de permisos efectivos en el servidor

El ejemplo siguiente devuelve una lista de los permisos efectivos del autor de la llamada en el servidor.

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

B. Enumeración de permisos efectivos en la base de datos

El ejemplo siguiente devuelve una lista de los permisos efectivos del autor de la llamada en la base de datos AdventureWorks2022.

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

C. Enumeración de permisos efectivos en una vista

El ejemplo siguiente devuelve una lista de los permisos efectivos del autor de la llamada en la vista vIndividualCustomer del esquema Sales de la base de datos AdventureWorks2022.

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

D. Enumerar los permisos efectivos de otro usuario

El ejemplo siguiente devuelve una lista de los permisos efectivos del usuario de base de datos Wanida en la tabla Employee del esquema HumanResources de la base de datos AdventureWorks2022. El autor de la llamada requiere IMPERSONATE permiso en el usuario Wanida.

EXECUTE AS USER = 'Wanida';

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

REVERT;
GO

E. Enumeración de permisos efectivos en un certificado

El ejemplo siguiente devuelve una lista de los permisos efectivos del autor de la llamada en un certificado denominado Shipping47 en la base de datos actual.

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

F. Enumeración de permisos efectivos en una colección de esquemas XML

El ejemplo siguiente devuelve una lista de los permisos efectivos del autor de la llamada en una colección de esquemas XML denominada ProductDescriptionSchemaCollection de la base de datos AdventureWorks2022.

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

G. Enumeración de permisos efectivos en un usuario de base de datos

El ejemplo siguiente devuelve una lista de los permisos efectivos del autor de la llamada en un usuario denominado MalikAr en la base de datos actual.

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

H. Enumeración de permisos efectivos de otro inicio de sesión

El ejemplo siguiente devuelve una lista de los permisos efectivos del inicio de sesión WanidaBenshoof de SQL Server en la tabla Employee del esquema HumanResources de la base de datos AdventureWorks2022. El autor de la llamada requiere IMPERSONATE permiso en el inicio de sesión de WanidaBenshoofSQL Server .

EXECUTE AS LOGIN = 'WanidaBenshoof';

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

REVERT;
GO