PERMISSIONS (Transact-SQL)

Devuelve un valor con 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 Microsoft 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 (Transact-SQL) en su lugar. El uso continuado de la función PERMISSIONS puede producir un rendimiento más lento.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

PERMISSIONS ( [ objectid [ , 'column' ] ] )

Argumentos

  • objectid
    Es el Id. de un asegurable. 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 asegurable para el usuario actual. El asegurable especificado se debe encontrar en la base de datos actual. Use la función OBJECT_ID para determinar 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 devueltos

int

Notas

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 funciones fijas de servidor de las 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 en funciones, 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 utilizados para los permisos sobre instrucciones (no se especifica objectid).

Bit (dec)

Bit (hex)

Permiso de la instrucción

1

0x1

CREATE DATABASE (sólo base de datos master)

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

Reservado

En la siguiente tabla se indican los bits utilizados para los permisos de objetos que se devuelven cuando sólo 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 (sólo 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 utilizados para los permisos de objeto en el nivel de columnas, devueltos cuando se especifican objectid y también 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 AdventureWorks.

IF PERMISSIONS(OBJECT_ID('AdventureWorks.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 AdventureWorks.

IF PERMISSIONS(OBJECT_ID('AdventureWorks.Person.Address','U'))&0x80000=0x80000
   PRINT 'INSERT on Person.Address is grantable.'
ELSE
   PRINT 'You may not GRANT INSERT permissions on Person.Address.';