sys.fn_my_permissions (Transact-SQL)
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
Es el nombre del elemento protegible. Si el elemento protegible es el servidor o una base de datos, este valor debe establecerse 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 muestran las columnas que devuelve fn_my_permissions. En cada fila devuelta se describe un permiso correspondiente al contexto de seguridad actual del elemento protegible. Devuelve NULL si la consulta da error.
Nombre de 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, es NULL. |
permission_name |
nvarchar |
Nombre del permiso. |
Comentarios
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 los siguientes:
Un permiso concedido directamente a la entidad de seguridad y que no se ha 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 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, es necesario un valor NULL (que significa "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 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 AdventureWorks2012 .
USE AdventureWorks2012;
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 AdventureWorks2012 .
USE AdventureWorks2012;
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 AdventureWorks2012 . 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 AdventureWorks2012 .
USE AdventureWorks2012;
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 AdventureWorks2012 . 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('AdventureWorks2012.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)