Partilhar via


PERMISSÕES (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Devolve um valor contendo um bitmap que indica as permissões de instrução, objeto ou coluna do utilizador atual.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Use fn_my_permissions e Has_Perms_By_Name em vez disso. A utilização contínua da função PERMISSÕES pode resultar num desempenho mais lento.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

Objectid
É o ID de um seguro. Se o objectid não for especificado, o valor bitmap contém permissões de instrução para o utilizador atual; caso contrário, o bitmap contém permissões sobre o securável para o utilizador atual. O seguro especificado deve estar na base de dados atual. Use a função OBJECT_ID para determinar o valor do objectid .

'coluna'
É o nome opcional de uma coluna para a qual a informação de permissão está a ser devolvida. A coluna deve ser um nome de coluna válido na tabela especificada pelo objectid.

Tipos de devolução

int

Observações

As PERMISSÕES podem ser usadas para determinar se o utilizador atual tem as permissões necessárias para executar uma instrução ou para CONCEDER uma permissão a outro utilizador.

A informação de permissões devolvida é um bitmap de 32 bits.

Os 16 bits inferiores refletem permissões concedidas ao utilizador, bem como permissões aplicadas a grupos do Windows ou papéis fixos de servidor dos quais o utilizador atual é membro. Por exemplo, um valor retornado de 66 (valor hexadecimal 0x42), quando não é especificado nenhum objectid , indica que o utilizador 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 utilizador pode CONCEDER a outros utilizadores. Os 16 bits superiores são interpretados exatamente como os dos 16 bits inferiores descritos nas tabelas seguintes, exceto que são deslocados para a esquerda por 16 bits (multiplicados por 65536). Por exemplo, 0x8 (valor decimal 8) é o bit que indica a permissão INSERT quando um objectid é especificado. Enquanto que 0x80000 (valor decimal 524288) indica a capacidade de CONCEDER INSERÇÃO de permissão, porque 524288 = 8 x 65536.

Devido à pertença a papéis, um utilizador que não tenha permissão para executar uma instrução pode ainda assim conceder essa permissão a outro utilizador.

A tabela seguinte mostra os bits que são usados para permissões de instruções (o objectid não é especificado).

Bit (dec) Broca (hexágono) Permissão de declaração
1 0x1 CREATE DATABASE (apenas base de dados mestre)
2 0x2 CREATE TABLE
4 0x4 CRIAR PROCEDIMENTO
8 0x8 CRIAÇÃO DE VISÃO
16 0x10 CRIAR REGRA
32 0x20 CRIAR PADRÃO
64 0x40 BANCO DE DADOS DE BACKUP
128 0x80 REGISTO DE CÓPIA DE SEGURANÇA
256 0x100 Reservado

A tabela seguinte mostra os bits usados para permissões de objeto que são devolvidos quando apenas o objectid é especificado.

Bit (dec) Broca (hexágono) Permissão de declaração
1 0x1 SELECIONAR TODOS
2 0x2 ATUALIZAÇÃO GERAL
4 0x4 REFERÊNCIAS TODAS
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (apenas procedimentos)
4096 0x1000 SELECIONAR QUALQUER (pelo menos uma coluna)
8192 0x2000 ATUALIZAÇÃO ALGUMA
16384 0x4000 REFERÊNCIAS QUALQUER

A tabela seguinte mostra os bits usados para permissões de objeto ao nível da coluna que são devolvidas quando tanto o objectid como a coluna são especificados.

Bit (dec) Broca (hexágono) Permissão de declaração
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES

Um NULL é devolvido quando um parâmetro especificado é NULL ou não válido (por exemplo, um objectid ou coluna que não existe). Os valores de bits para permissões que não se aplicam (por exemplo, permissão EXECUTAR, bit 0x20, para uma tabela) são indefinidos.

Use o operador bit a bit AND (&) para determinar cada conjunto de bits no bitmap que é devolvido pela função PERMISSIONS.

O procedimento armazenado do sistema sp_helprotect também pode ser usado para devolver uma lista de permissões para um utilizador na base de dados atual.

Examples

A. Utilização da função PERMISSIONS com permissões de instruções

O exemplo seguinte determina se o utilizador atual pode executar a CREATE TABLE instrução.

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

B. Usar a função PERMISSIONS com permissões de objeto

O exemplo seguinte determina se o utilizador atual pode inserir uma linha de dados na Address tabela da AdventureWorks2025 base de dados.

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 a função PERMISSIONS com permissões concedíveis

O exemplo seguinte determina se o utilizador atual pode conceder a permissão INSERT na Address tabela da AdventureWorks2025 base de dados a outro utilizador.

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.';  

Ver também

NEGAR (Transact-SQL)
SUBVENÇÃO (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOGAR (Transact-SQL)
sp_helprotect (Transact-SQL)
Funções do sistema (Transact-SQL)