fn_my_permissions (Transact-SQL)

Actualizado: 12 de diciembre de 2006

Devuelve una lista de los permisos concedidos a la entidad de seguridad en un asegurable.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

fn_my_permissions ( securable , 'securable_class')

Argumentos

  • securable
    Es el nombre del asegurable. Si el asegurable es el servidor o una base de datos, este valor se debe establecer en NULL. securable es una expresión escalar de tipo sysname. securable puede ser un nombre de varias partes.
  • 'securable_class'
    Es el nombre de la clase de asegurable de la que se indican los permisos. securable_class es de tipo sysname. securable_class debe tener uno de los siguientes 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.

    [!NOTA] Si usa una intercalación que diferencia entre mayúsculas y minúsculas, deberá escribir toda la clase de asegurable en caracteres en minúscula.

Notas

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

  • Un permiso concedido directamente a la entidad de seguridad y que no se ha denegado.
  • Un permiso implícito de un permiso de nivel superior correspondiente a la entidad de seguridad y que no se ha denegado.
  • Un permiso concedido a una función o un grupo de los cuales es miembro la entidad de seguridad y que no se ha denegado.
  • Un permiso correspondiente a una función o un grupo de los cuales es miembro la entidad de seguridad y que no se ha denegado.

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

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

La consulta siguiente devolverá una lista de clases asegurables integradas:

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

Si se especifica DEFAULT como el valor de securable o securable_class, se interpretará como NULL.

Columnas devueltas

En la tabla siguiente se enumeran las columnas que devuelve fn_my_permissions. En cada fila devuelta se describe un permiso correspondiente al contexto de seguridad actual del asegurable. Devuelve NULL si la consulta provoca un error.

Nombre de columna Tipo Descripción

entity_name

sysname

Nombre del asegurable en el que se conceden los permisos indicados.

subentity_name

sysname

Nombre de columna si el asegurable tiene columnas; de lo contrario, es NULL.

permission_name

nvarchar

Nombre del permiso.

Ejemplos

A. Enumerar los permisos efectivos del 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. Enumerar los permisos efectivos de la base de datos

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

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

C. Enumerar los permisos efectivos de 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 AdventureWorks.

USE AdventureWorks;
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 AdventureWorks. El autor de la llamada requiere el permiso IMPERSONATE 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. Enumerar los permisos efectivos de 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. Enumerar los permisos efectivos de 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 AdventureWorks.

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

G. Enumerar los permisos efectivos de 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. Enumerar los permisos efectivos de otro inicio de sesión

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

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

Vea también

Referencia

Funciones de seguridad (Transact-SQL)
sys.fn_builtin_permissions (Transact-SQL)
Vistas de catálogo de seguridad (Transact-SQL)
EXECUTE AS (Transact-SQL)

Otros recursos

Permisos
Asegurables
Jerarquía de permisos

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido nuevo:
  • Se agregó una nota acerca del uso de caracteres en minúscula al escribir securable_class en entornos donde se usan intercalaciones que distinguen entre mayúsculas y minúsculas.