Como usuário postgres, tenho create extension plpython3u;
em meu banco de dados
então eu configurei o plpython3u
para confiável: select lanpltrusted from pg_language where lanname like 'plpython3u';
retorna verdadeiro
mas quando meu db_user tenta
create function check_data_valid(id bigint)
returns boolean
as $$
-- ...
return true
$$ language plpython3u;
Eu recebi o erro:permission denied for the language plpython3u
Então, com meu usuário postgres, tentei: grant usage on plpython3u to db_user
e grant execute on plpython3u to db_user
ambos retornam o erro:
relation python doesn't exist
talvez seja porque é uma extensão ... porém, não sei o que fazer para criar meu procedimento armazenado.
Primeiro , não transforme o plpython3u em um idioma confiável. Isso é ruim. Você está dando acesso a todos os tipos de coisas no banco de dados, no sistema de arquivos e afins de maneiras que podem ser terrivelmente abusadas. Por favor, reconsidere.
Agora, a partir de seus comentários, você deseja manter a permissão de administrador separada da permissão de usuário normal. A maneira de fazer isso é garantir que o superusuário seja NOINHERIT e que o papel seja concedido ao usuário. Você pode:
Então logado como
myuser
então você pode:E você obtém privilégios de superusuário. Você pode usar isso para escalar temporariamente suas permissões de maneira semelhante ao sudo em sistemas * nix.