Compartir vía


PERMISSIONS (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

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

Se puede utilizar PERMISSIONS para determinar si el usuario actual cuenta con los permisos necesarios para ejecutar una instrucción o para otorgar, con GRANT, un permiso a 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, si se devuelve el valor 66 (valor hexadecimal 0x42) cuando no se especifica objectid, indica que el usuario tiene permiso para ejecutar las instrucciones CREATE TABLE (valor decimal 2) y BACKUP DATABASE (valor decimal 64).

Los 16 bits superiores reflejan los permisos que el usuario puede otorgar a otros usuarios con la instrucción GRANT. 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 el permiso INSERT cuando se especifica objectid. Por su parte, 0x80000 (valor decimal 524288) indica que se puede usar el permiso GRANT INSERT, 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) Bit (hex) 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) Bit (hex) Permiso de la instrucción
1 0x1 SELECT ALL
2 0x2 UPDATE ALL
4 0x4 REFERENCES ALL
8 0x8 INSERT
16 0x10 Delete
32 0x20 EXECUTE (solo procedimientos)
4096 0x1000 SELECT ANY (al menos una columna)
8192 0x2000 UPDATE ANY
16384 0x4000 REFERENCES ANY

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) Bit (hex) 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 AdventureWorks2022.

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

En el siguiente ejemplo se determina si el usuario actual puede otorgar a otro usuario el permiso INSERT en la tabla Address de la base de datos AdventureWorks2022.

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)