Funções do Snowflake Postgres¶
O Postgres tem uma autenticação própria baseada em funções para gerenciar conexões com bancos de dados e usar bancos de dados em um servidor Postgres. Essas funções são separadas das funções do Snowflake. As funções do Postgres são usadas para acessar e gerenciar bancos de dados, tabelas e outros objetos dentro das instâncias do Snowflake Postgres.
Quando você cria uma instância do, o Snowflake gera automaticamente duas funções gerenciadas especiais para você usar, que estão descritas abaixo.
Para obter mais informações sobre o gerenciamento de funções do Postgres, consulte a documentação do Postgres.
Nota
Neste material e em muitos outros lugares, você verá os termos «função» e «usuário» utilizados alternadamente no contexto de gerenciamento de usuários do Postgres. Isto porque um usuário do Postgres é simplesmente uma função que tem o atributo LOGIN de função do Postgres.
Funções gerenciadas pelo Snowflake Postgres¶
O Snowflake Postgres oferece duas funções gerenciadas que são criadas automaticamente no momento da criação da instância.
A função snowflake_admin¶
snowflake_admin é uma função de alto privilégio do Postgres usada para administrar sua instância do Snowflake Postgres. Ele não é um superusuário completo do Postgres; algumas operações permanecem restritas e são gerenciadas pelo Snowflake. No entanto, ele tem privilégios elevados que incluem:
Criar e gerenciar funções do Postgres.
Criar e gerenciar bancos de dados.
Gerenciar a replicação para sua instância do Snowflake Postgres.
Ignorar as políticas de segurança no nível da linha (Row-Level Security, RLS), quando aplicável.
Além disso, snowflake_admin é membro de várias funções integradas do Postgres que concedem funcionalidades operacionais e de monitoramento, incluindo:
pg_signal_backendpg_use_reserved_connectionspg_create_subscriptionpg_read_all_settingspg_read_all_statspg_stat_scan_tablespg_monitorsnowflake_admin_group
A função application¶
application é uma função não superusuário que, por padrão, tem permissões para criar objetos no banco de dados postgres. Novas permissões ou propriedades para essa função devem ser concedidas pela função snowflake_admin.
Segurança de senhas do Postgres¶
Nova geração de credenciais para funções gerenciadas pelo Snowflake Postgres¶
As credenciais para as funções snowflake_admin e application são geradas quando você cria a instância e são exibidas apenas uma vez. Essas credenciais podem ser geradas novamente a qualquer momento, invalidando as credenciais existentes.
No painel, você pode gerar novamente as credenciais para a função snowflake_admin da sua instância.
No menu de navegação, selecione Postgres.
Selecione a instância.
No menu Manage no canto superior direito, selecione Regenerate credentials.
Clique no botão Acknowledge & continue para confirmar a ação.
Para gerar novamente credenciais para a função
snowflake_adminouapplication, você pode usar um comando ALTER POSTGRES SERVICE com o parâmetro RESET ACCESS.ALTER POSTGRES SERVICE [IF EXISTS] <name> RESET ACCESS FOR { 'snowflake_admin' | 'application' }
Requer o privilégio OWNERSHIP ou OPERATE
Uma linha com a seguinte coluna será retornada:
password
Exemplo de rotação de credenciais
Redefinir o acesso para a função
snowflake_adminpara uma instância do Snowflake Postgres chamadamy_instance:ALTER POSTGRES SERVICE my_instance RESET ACCESS FOR 'snowflake_admin';
Definindo senhas para outras funções do Postgres¶
As instâncias do Snowflake Postgres são configuradas para autenticação com senha span-sha-256. Quando novas senhas são definidas, um hash span-sha-258 é gerado e armazenado pelo servidor, mas quando o parâmetro log_statement do Postgres é definido como um valor diferente de none, os comandos CREATE ROLE e ALTER ROLE DDL são totalmente registrados no log do servidor Postgres. Portanto, você deve garantir que as senhas com texto não criptografado não sejam registradas como parte dessas instruções.
Desabilitando o registro de instruções para os comandos DDL CREATE ROLE e ALTER ROLE do Postgres¶
A maneira mais simples de impedir que senhas com texto não criptografado usadas nas instruções DDL CREATE ROLE e ALTER ROLE apareçam no log do servidor Postgres é desabilitar o parâmetro log_statement para a transação em que você as executa usando SET LOCAL:
BEGIN;
SET LOCAL log_statement = 'none';
CREATE USER mynewrole PASSWORD 'mynewpassword';
COMMIT;
Usando o comando \password do cliente Postgres psql¶
O psql do Postgres tem um metacomando password <https://www.postgresql.org/docs/current/app-psql.html>_, que pode ser usado para alterar a senha de usuários existentes, que pré-calcula o hash scram-sha-256 da senha inserida e o utiliza no comando ALTER ROLE enviado ao servidor. Para usar esse método, você deve primeiro criar novos usuários sem uma senha e, depois, definir a senha de cada usuário com o metacomando \password do psql.
postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE
postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
Se log_statement for definido como um valor diferente de «none», a entrada de log para o comando ALTER ROLE enviado por psql para o comando \password acima terá o hash scram-sha-256 calculado em vez da senha com texto não criptografado real. Esse método pode ser combinado com a desabilitação completa de log_statement para, conforme descrito acima, impedir que até mesmo esse hash apareça no log do Postgres:
postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE
postgres=# BEGIN;
BEGIN
postgres=# SET LOCAL log_statement = 'none';
SET
postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
postgres=# COMMIT;
COMMIT
Limitações da função¶
No Snowflake Postgres, certas operações são reservadas para o próprio serviço e não podem ser executadas por nenhuma função gerenciada pelo cliente, incluindo snowflake_admin. Alguns exemplos incluem:
Alteração dos parâmetros de configuração no nível do servidor protegido que são gerenciados pelo Snowflake
Modificação ou desabilitação dos principais componentes ou extensões gerenciados pelo Snowflake
Acesso ou alteração de bancos de dados ou esquemas de sistemas gerenciados pelo Snowflake usados pelo serviço
Acesso ou alteração do sistema de arquivos da instância do Snowflake Postgres
Modificação direta das tabelas de catálogo do sistema
Criação de outros superusuários
Criação de mais de 64 funções na instância
Criação de mais de 32 bancos de dados na instância
Execução do comando ALTER SYSTEM
Acesso às funções genéricas de acesso a arquivos do Postgres que permitem o acesso ao sistema de arquivos
A extensão Snowflake Postgres pode introduzir outras restrições sobre o que ambos snowflake_admin e application podem fazer em uma instância. Essas limitações específicas da extensão podem evoluir com o tempo e serão documentadas com o comportamento da extensão correspondente. Se uma operação for bloqueada, você receberá um erro indicando que ela não é permitida no Snowflake Postgres.