sys.fn_my_permissions (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento 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 NULL
en . 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 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
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 WanidaBenshoof
SQL Server .
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO