Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
Devuelve un valor que contiene un mapa de bits que indica los permisos del usuario actual sobre una instrucción, objeto o columna.
Importante
Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Use fn_my_permissions y Has_Perms_By_Name en su lugar. El uso continuado de la función PERMISSIONS puede producir un rendimiento más lento.
Convenciones de sintaxis de Transact-SQL
Sintaxis
PERMISSIONS ( [ objectid [ , 'column' ] ] )
Argumentos
objectid
Es el Id. de un elemento protegible. Si no se especifica objectid, el valor de mapa de bits contiene permisos de instrucción para el usuario actual; en caso contrario, contiene permisos sobre el elemento protegible para el usuario actual. El elemento protegible especificado se debe encontrar en la base de datos actual. Use la función OBJECT_ID para averiguar el valor de objectid.
'column'
Es el nombre opcional de la columna cuya información de permisos se devuelve. Debe ser un nombre de columna válido de la tabla especificada con objectid.
Tipos de valor devuelto
int
Observaciones
Los PERMISOS pueden usarse para determinar si el usuario actual tiene los permisos necesarios para ejecutar una sentencia o para GRANT obtener un permiso para otro usuario.
La información de permisos devuelta es un mapa de bits de 32 bits.
Los 16 bits inferiores reflejan permisos concedidos al usuario y también permisos que se aplican a grupos de Windows o a roles fijos de servidor de los que es miembro el usuario actual. Por ejemplo, un valor devuelto de 66 (valor hexadecimal 0x42), cuando no se especifica ningún objeto , indica que el usuario tiene permiso para ejecutar las CREATE TABLE sentencias (valor decimal 2) y BACKUPDATABASE (valor decimal 64).
Los 16 bits superiores reflejan los permisos que el usuario puede GRANT tener a otros usuarios. Los 16 bits superiores se interpretan exactamente de la misma forma que los 16 bits inferiores descritos en las tablas siguientes, excepto en que están desplazados 16 bits hacia la izquierda (multiplicados por 65.536). Por ejemplo, 0x8 (valor decimal 8) es el bit que indica INSERT permiso cuando se especifica un objetid . Mientras que 0x80000 (valor decimal 524288) indica la capacidad de GRANTINSERT permiso, porque 524288 = 8 x 65536.
Debido a la pertenencia a roles, un usuario que no tiene permiso para ejecutar una instrucción puede conceder ese permiso a otro usuario.
En la siguiente tabla se muestran los bits usados para los permisos sobre instrucciones (no se especifica objectid).
| Bit (dec) | Broca (hexágono) | Permiso de la instrucción |
|---|---|---|
| 1 | 0x1 | CREATE DATABASE (solo base de datos maestra) |
| 2 | 0x2 | CREATE TABLE |
| 4 | 0x4 | CREATE PROCEDURE |
| 8 | 0x8 | CREATE VIEW |
| 16 | 0x10 | CREATE RULE |
| 32 | 0x20 | CREATE DEFAULT |
| 64 | 0x40 | BACKUP DATABASE |
| 128 | 0x80 | BACKUP LOG |
| 256 | 0x100 | Reserved |
En la siguiente tabla se indican los bits usados para los permisos de objetos que se devuelven cuando solo se especifica objectid.
| Bit (dec) | Broca (hexágono) | Permiso de la instrucción |
|---|---|---|
| 1 | 0x1 | SELECCIONAR TODO |
| 2 | 0x2 | UPDATE TODOS |
| 4 | 0x4 | REFERENCIAS TODAS |
| 8 | 0x8 | INSERT |
| 16 | 0x10 | DELETE |
| 32 | 0x20 | EXECUTE (solo procedimientos) |
| 4096 | 0x1000 | SELECT ANY (al menos una columna) |
| 8192 | 0x2000 | UPDATE CUALQUIERA |
| 16384 | 0x4000 | REFERENCIAS ALGUNA |
En la siguiente tabla se muestran los bits usados para los permisos de objeto de nivel de columnas, devueltos cuando se especifican objectid y columna.
| Bit (dec) | Broca (hexágono) | Permiso de la instrucción |
|---|---|---|
| 1 | 0x1 | SELECT |
| 2 | 0x2 | UPDATE |
| 4 | 0x4 | REFERENCES |
Se devuelve NULL cuando alguno de los parámetros especificados es NULL o no es válido (por ejemplo, un objectid o columna que no existen). Los valores de bits para permisos que no son aplicables (por ejemplo, el permiso EXECUTE, bit 0x20,) para una tabla, no están definidos.
Puede usar el operador de bits AND (&) para determinar cada bit establecido en el mapa de bits que se devuelve mediante la función PERMISSIONS.
También puede usar el procedimiento almacenado de sistema sp_helprotect para obtener una lista de permisos para un usuario de la base de datos actual.
Ejemplos
A. Usar la función PERMISSIONS con permisos de instrucciones
En el siguiente ejemplo se determina si el usuario actual puede ejecutar la instrucción CREATE TABLE.
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.';
B. Usar la función PERMISSIONS con permisos de objeto
En el siguiente ejemplo se determina si el usuario actual puede insertar una fila de datos en la tabla Address de la base de datos AdventureWorks2025.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&8=8
PRINT 'The current user can insert data into Person.Address.'
ELSE
PRINT 'ERROR: The current user cannot insert data into Person.Address.';
C. Usar la función PERMISSIONS con permisos que se pueden otorgar
El siguiente ejemplo determina si el usuario actual puede conceder el INSERT permiso en la Address tabla de la AdventureWorks2025 base de datos a otro usuario.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';
Consulte también
DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Funciones del sistema (Transact-SQL)