PERMISSIONS (Transact-SQL)
Retorna um valor contendo um bitmap que indica as permissões de instrução, objeto ou coluna do usuário atual.
Importante Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez disso, use fn_my_permissions e Has_Perms_By_Name. O uso contínuo da função PERMISSIONS pode resultar em desempenho mais lento.
Convenções de sintaxe Transact-SQL
Sintaxe
PERMISSIONS ( [ objectid [ , 'column' ] ] )
Argumentos
objectid
É a ID de um protegível. Se objectid não for especificado, o valor bitmap conterá permissões de instrução para o usuário atual; caso contrário, o bitmap conterá permissões no protegível para o usuário atual. O protegível especificado deve estar no banco de dados atual. Use a função OBJECT_ID para determinar o valor de objectid.' column '
É o nome opcional de uma coluna para a qual as informações de permissão são retornadas. A coluna deve ter um nome de coluna válido na tabela especificada por objectid.
Tipos de retorno
int
Comentários
PERMISSIONS pode ser usado para determinar se o usuário atual possui as permissões necessárias para executar uma instrução ou para conceder uma permissão com GRANT para outro usuário.
As informações de permissões retornadas são um bitmap de 32 bits.
Os 16 bits inferiores refletem permissões concedidas ao usuário e também permissões que são aplicadas aos grupos do Windows ou a funções de servidor fixas das quais o usuário atual é membro. Por exemplo, um valor retornado de 66 (valor hexadecimal 0x42), quando nenhum objectid é especificado, indica que o usuário tem permissão para executar as instruções CREATE TABLE (valor decimal 2) e BACKUP DATABASE (valor decimal 64).
Os 16 bits superiores refletem as permissões que o usuário pode conceder com GRANT a outros usuários. Esses 16 bits superiores são interpretados exatamente como os 16 bits inferiores descritos nas tabelas a seguir, com a exceção de que eles são deslocados para a esquerda em 16 bits (multiplicados por 65536). Por exemplo, 0x8 (valor decimal 8) é o bit que indica a permissão INSERT quando objectid é especificado. Enquanto que 0x80000 (valor decimal 524288) indica a capacidade de conceder a permissão GRANT INSERT, porque 524288 = 8 x 65536.
Por causa das associações em funções, um usuário que não possui a permissão para executar uma instrução pode concedê-la a outro usuário.
A tabela a seguir mostra os bits que são usados para permissões de instrução (objectid não é especificado).
Bit (decimal) |
Bit (hexadecimal) |
Permissão de instrução |
---|---|---|
1 |
0x1 |
CREATE DATABASE (apenas no banco de dados 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 |
A tabela a seguir mostra os bits usados para permissões de objeto que são retornadas somente quando objectid é especificado.
Bit (decimal) |
Bit (hexadecimal) |
Permissão de instrução |
---|---|---|
1 |
0x1 |
SELECT ALL |
2 |
0x2 |
UPDATE ALL |
4 |
0x4 |
REFERENCES ALL |
8 |
0x8 |
INSERT |
16 |
0x10 |
DELETE |
32 |
0x20 |
EXECUTE (somente procedimentos) |
4096 |
0x1000 |
SELECT ANY (pelo menos uma coluna) |
8192 |
0x2000 |
UPDATE ANY |
16384 |
0x4000 |
REFERENCES ANY |
A tabela a seguir mostra os bits usados para permissões de objeto em nível de coluna que são retornadas quando objectid e a coluna são especificados.
Bit (decimal) |
Bit (hexadecimal) |
Permissão de instrução |
---|---|---|
1 |
0x1 |
SELECT |
2 |
0x2 |
UPDATE |
4 |
0x4 |
REFERENCES |
NULL é retornado quando um parâmetro especificado é NULL ou não é válido (por exemplo, um objectid ou uma coluna que não existem). Os valores de bit para permissões que não se aplicam (por exemplo, a permissão EXECUTE, bit 0x20, para uma tabela) não são definidos.
Use o operador bit a bit AND (&) para determinar cada conjunto de bits no bitmap retornado pela função PERMISSIONS.
O procedimento armazenado de sistema sp_helprotect também pode ser usado para retornar uma lista de permissões para um usuário no banco de dados atual.
Exemplos
A.Usando a função PERMISSIONS com permissões de instrução
O exemplo a seguir determina se o usuário atual pode executar a instrução CREATE TABLE.
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.';
B.Usando a função PERMISSIONS com permissões de objeto
O exemplo a seguir determina se o usuário atual pode inserir uma linha de dados na tabela instrução Address do banco de dados AdventureWorks2012.
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.Usando a função PERMISSIONS com permissões que podem ser concedidas
O exemplo a seguir determina se o usuário atual pode conceder a permissão INSERT na tabela Address do banco de dados AdventureWorks2012 para outro usuário.
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.';