SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION — define o identificador do usuário da sessão, e o identificador do usuário corrente da sessão corrente

Sinopse

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION nome_do_usuário
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

Descrição

Este comando define o identificador do usuário da sessão, e o identificador do usuário corrente da sessão SQL corrente, como nome_do_usuário. O nome do usuário pode ser escrito como um identificador, ou como um literal cadeia de caracteres. Com este comando é possível, por exemplo, tornar-se temporariamente um usuário sem privilégios, e depois voltar a ser um superusuário.

O identificador do usuário da sessão é inicialmente configurado para ser o nome do usuário (possivelmente autenticado) fornecido pelo cliente. O identificador do usuário corrente é normalmente igual ao identificador do usuário da sessão, mas pode mudar temporariamente no contexto das funções SECURITY DEFINER, e mecanismos semelhantes; também pode ser alterado por SET ROLE. O identificador do usuário corrente é relevante para verificação de permissão.

O identificador do usuário da sessão pode ser alterado apenas se o usuário da sessão inicial (o usuário autenticado) tiver o privilégio de superusuário. Caso contrário, o comando será aceito apenas se for especificado o nome do usuário autenticado.

Os modificadores SESSION e LOCAL agem da mesma forma que para o comando SET regular.

As formas DEFAULT e RESET redefinem os identificadores de sessão e do usuário correntes, para serem o nome do usuário originalmente autenticado. Estas formas podem ser executados por qualquer usuário.

Notas

O comando SET SESSION AUTHORIZATION não pode ser usado dentro de uma função SECURITY DEFINER.

Exemplos

SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user
--------------+--------------
 peter        | peter
SET SESSION AUTHORIZATION 'paul';

SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user
--------------+--------------
 paul         | paul

Conformidade

O padrão SQL permite que algumas outras expressões apareçam no lugar do literal nome_do_usuário, mas estas opções não são importantes na prática. O PostgreSQL permite a sintaxe de identificador ("nome_do_usuário"), que o padrão SQL não permite. 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 isto. Os modificadores SESSION e LOCAL são uma extensão do PostgreSQL, assim como a sintaxe RESET.

Pelo padrão SQL, os privilégios necessários para executar este comando são deixados para serem definidos pela implementação.

Veja também

SET ROLE