PERMISSIONS (Transact-SQL)PERMISSIONS (Transact-SQL)

SE APLICA A: síSQL Server síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Devuelve un valor que contiene un mapa de bits que indica los permisos del usuario actual sobre una instrucción, objeto o columna.Returns a value containing a bitmap that indicates the statement, object, or column permissions of the current user.

Importante Esta característica está en modo de mantenimiento y es posible que no se incluya en una versión futura de Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use en su lugar fn_my_permissions y Has_Perms_By_Name.Important Esta característica está en modo de mantenimiento y es posible que no se incluya en una versión futura de Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use fn_my_permissions and Has_Perms_By_Name instead. El uso continuado de la función PERMISSIONS puede producir un rendimiento más lento.Continued use of the PERMISSIONS function may result in slower performance.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

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

ArgumentosArguments

objectidobjectid
Es el Id. de un elemento protegible.Is the ID of a securable. 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.If objectid is not specified, the bitmap value contains statement permissions for the current user; otherwise, the bitmap contains permissions on the securable for the current user. El elemento protegible especificado se debe encontrar en la base de datos actual.The securable specified must be in the current database. Use la función OBJECT_ID para averiguar el valor de objectid.Use the OBJECT_ID function to determine the objectid value.

' column '' column '
Es el nombre opcional de la columna cuya información de permisos se devuelve.Is the optional name of a column for which permission information is being returned. Debe ser un nombre de columna válido de la tabla especificada con objectid.The column must be a valid column name in the table specified by objectid.

Tipos devueltosReturn Types

intint

NotasRemarks

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.PERMISSIONS can be used to determine whether the current user has the permissions required to execute a statement or to GRANT a permission to another user.

La información de permisos devuelta es un mapa de bits de 32 bits.The permissions information returned is a 32-bit bitmap.

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.The lower 16 bits reflect permissions granted to the user, and also permissions that are applied to Windows groups or and fixed server roles of which the current user is a member. 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).For example, a returned value of 66 (hex value 0x42), when no objectid is specified, indicates that the user has permission to execute the CREATE TABLE (decimal value 2) and BACKUP DATABASE (decimal value 64) statements.

Los 16 bits superiores reflejan los permisos que el usuario puede otorgar a otros usuarios con la instrucción GRANT.The upper 16 bits reflect the permissions that the user can GRANT to other users. 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).The upper 16 bits are interpreted exactly as those for the lower 16 bits described in the following tables, except they are shifted to the left by 16 bits (multiplied by 65536). Por ejemplo, 0x8 (valor decimal 8) es el bit que indica el permiso INSERT cuando se especifica objectid.For example, 0x8 (decimal value 8) is the bit that indicates INSERT permission when an objectid is specified. Por su parte, 0x80000 (valor decimal 524288) indica que se puede usar el permiso GRANT INSERT, porque 524288 = 8 x 65536.Whereas, 0x80000 (decimal value 524288) indicates the ability to GRANT INSERT permission, because 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.Because of membership in roles, a user that does not have permission to execute a statement may still be able to grant that permission to another user.

En la siguiente tabla se muestran los bits usados para los permisos sobre instrucciones (no se especifica objectid).The following table shows the bits that are used for statement permissions (objectid is not specified).

Bit (dec)Bit (dec) Bit (hex)Bit (hex) Permiso de la instrucciónStatement permission
11 0x10x1 CREATE DATABASE (solo base de datos maestra)CREATE DATABASE (master database only)
22 0x20x2 CREATE TABLECREATE TABLE
44 0x40x4 CREATE PROCEDURECREATE PROCEDURE
88 0x80x8 CREATE VIEWCREATE VIEW
1616 0x100x10 CREATE RULECREATE RULE
3232 0x200x20 CREATE DEFAULTCREATE DEFAULT
6464 0x400x40 BACKUP DATABASEBACKUP DATABASE
128128 0x800x80 BACKUP LOGBACKUP LOG
256256 0x1000x100 ReservadoReserved

En la siguiente tabla se indican los bits usados para los permisos de objetos que se devuelven cuando solo se especifica objectid.The following table shows the bits used for object permissions that are returned when only objectid is specified.

Bit (dec)Bit (dec) Bit (hex)Bit (hex) Permiso de la instrucciónStatement permission
11 0x10x1 SELECT ALLSELECT ALL
22 0x20x2 UPDATE ALLUPDATE ALL
44 0x40x4 REFERENCES ALLREFERENCES ALL
88 0x80x8 INSERTINSERT
1616 0x100x10 DeleteDELETE
3232 0x200x20 EXECUTE (solo procedimientos)EXECUTE (procedures only)
40964096 0x10000x1000 SELECT ANY (al menos una columna)SELECT ANY (at least one column)
81928192 0x20000x2000 UPDATE ANYUPDATE ANY
1638416384 0x40000x4000 REFERENCES ANYREFERENCES 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.The following table shows the bits used for column-level object permissions that are returned when both objectid and column are specified.

Bit (dec)Bit (dec) Bit (hex)Bit (hex) Permiso de la instrucciónStatement permission
11 0x10x1 SELECTSELECT
22 0x20x2 UPDATEUPDATE
44 0x40x4 REFERENCESREFERENCES

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).A NULL is returned when a specified parameter is NULL or not valid (for example, an objectid or column that does not exist). Los valores de bits para permisos que no son aplicables (por ejemplo, el permiso EXECUTE, bit 0x20,) para una tabla, no están definidos.The bit values for permissions that do not apply (for example EXECUTE permission, bit 0x20, for a table) are undefined.

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.Use the bitwise AND (&) operator to determine each bit set in the bitmap that is returned by the PERMISSIONS function.

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.The sp_helprotect system stored procedure can also be used to return a list of permissions for a user in the current database.

EjemplosExamples

A.A. Usar la función PERMISSIONS con permisos de instruccionesUsing the PERMISSIONS function with statement permissions

En el siguiente ejemplo se determina si el usuario actual puede ejecutar la instrucción CREATE TABLE.The following example determines whether the current user can execute the CREATE TABLE statement.

IF PERMISSIONS()&2=2  
   CREATE TABLE test_table (col1 INT)  
ELSE  
   PRINT 'ERROR: The current user cannot create a table.';  

B.B. Usar la función PERMISSIONS con permisos de objetoUsing the PERMISSIONS function with object permissions

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 AdventureWorks2012.The following example determines whether the current user can insert a row of data into the Address table in the AdventureWorks2012 database.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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.C. Usar la función PERMISSIONS con permisos que se pueden otorgarUsing the PERMISSIONS function with grantable permissions

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 AdventureWorks2012.The following example determines whether the current user can grant the INSERT permission on the Address table in the AdventureWorks2012 database to another user.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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énSee Also

DENY (Transact-SQL) DENY (Transact-SQL)
GRANT (Transact-SQL) GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL) OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL) sp_helprotect (Transact-SQL)
Funciones del sistema (Transact-SQL)System Functions (Transact-SQL)