PERMISSIONS (Transact-SQL)
Se aplica a: SQL Server
Azure SQL Database
Azure SQL Instancia administrada
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' ] ] )
Nota:
Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.
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)