fn_my_permissions (Transact-SQL)
Devuelve una lista de los permisos concedidos a la entidad de seguridad en un asegurable. Una función relacionada es HAS_PERMS_BY_NAME (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 protegible cuyos permisos se muestran. 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.
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. |
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.
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 ServerWanidaBenshoof 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 ServerWanidaBenshoof.
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT * FROM fn_my_permissions('AdventureWorks.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name ;
REVERT;
GO