SET SESSION AUTHORIZATION — define o identificador do usuário da sessão, e o identificador do usuário corrente da sessão corrente
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION nome_do_usuário
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION
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.
O comando SET SESSION AUTHORIZATION não pode ser
usado dentro de uma função SECURITY DEFINER.
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
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
("),
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 nome_do_usuário"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.