Share via


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. Use fn_my_permissions e Has_Perms_By_Name. O uso contínuo da função PERMISSIONS pode resultar em desempenho mais lento.

Ícone de vínculo de tópicoConvençõ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 (hexacedimal)

Permissão de instrução

1

0x1

CREATE DATABASE (somente no banco de dados mestre)

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 (hexacedimal)

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 (hexacedimal)

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 AdventureWorks2008R2.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2008R2.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 AdventureWorks2008R2 para outro usuário.

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