SET ROLE

Nome

SET ROLE -- define o identificador do usuário corrente da sessão corrente

Sinopse

SET [ SESSION | LOCAL ] ROLE nome_do_papel
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE

Descrição

Este comando define o identificador do usuário corrente no contexto da sessão SQL corrente como sendo o nome_do_papel. O nome do papel pode ser escrito como um identificador ou um literal cadeia de caracteres. Após a execução do comando SET ROLE, as verificações de permissão para os comandos SQL serão efetuadas como se o papel especificado tivesse sido o papel que realizou originalmente a conexão.

O nome_do_papel especificado deve ser um papel que o usuário da sessão corrente é membro (Se o usuário da sessão for um superusuário poderá especificar qualquer papel).

Os modificadores SESSION e LOCAL atuam da mesma forma que no comando SET comum.

As formas NONE e RESET redefinem o identificador do usuário corrente como sendo o identificador do usuário da sessão corrente. Estas formas podem ser executadas por qualquer usuário.

Observações

Utilizando este comando é possível adicionar ou restringir os próprios privilégios. Se o papel do usuário da sessão possuir o atributo INHERITS, então possuirá automaticamente todos os privilégios de todos os papéis para os quais pode executar SET ROLE; neste caso, o comando SET ROLE removerá todos os privilégios atribuídos diretamente para o usuário da sessão e aos outros papéis dos quais é membro, deixando apenas os privilégios disponíveis para o papel especificado. Por outro lado, se o papel do usuário da sessão possuir o atributo NOINHERITS, o comando SET ROLE removerá os privilégios atribuídos diretamente para o usuário da sessão, e para o lugar destes obterá todos os privilégios disponíveis para o papel especificado.

Em particular, quando um superusuário executa o comando SET ROLE especificando um papel que não é superusuário, perde seus privilégios de superusuário.

O comando SET ROLE possui efeitos comparáveis ao do comando SET SESSION AUTHORIZATION, mas as verificações de privilégio envolvidas são bastante diferentes. Além disso, o comando SET SESSION AUTHORIZATION determina quais papéis serão permitidos para os comandos SET ROLE posteriores, enquanto mudar papéis com o comando SET ROLE não muda o conjunto de papéis permitidos para um comando SET ROLE posterior.

Exemplos

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user
--------------+--------------
 pedro        | pedro

SET ROLE 'paulo';

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user
--------------+--------------
 pedro        | paulo

Compatibilidade

O PostgreSQL permite a sintaxe ("nome_do_papel") para o identificador, enquanto o padrão SQL requer que o nome do papel seja escrito como um literal cadeia de caracteres. O padrão SQL não permite este comando durante uma transação; O PostgreSQL não faz esta restrição, porque não há razão para fazê-la. Os modificadores SESSION e LOCAL são extensões do PostgreSQL, assim como a sintaxe RESET.

Consulte também

SET SESSION AUTHORIZATION
SourceForge.net Logo CSS válido!