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 da função do Postgres.

Funções gerenciadas pelo Snowflake Postgres

O Snowflake Postgres cria automaticamente duas funções gerenciadas ao mesmo tempo que cria sua 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_backend

  • pg_use_reserved_connections

  • pg_create_subscription

  • pg_read_all_settings

  • pg_read_all_stats

  • pg_stat_scan_tables

  • pg_monitor

  • snowflake_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. Você pode gerar as credenciais novamente a qualquer momento, invalidando as existentes.

No painel, você pode gerar novamente as credenciais para a função snowflake_admin da sua instância.

  1. No menu de navegação, selecione Postgres.

  2. Selecione a instância.

  3. No menu Manage no canto superior direito, selecione Regenerate credentials.

  4. Clique no botão Acknowledge & continue para confirmar a ação.

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 scram-sha-256 é 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. Para isso, use SET LOCAL:

BEGIN;
SET LOCAL log_statement = 'none';
CREATE USER mynewrole PASSWORD 'mynewpassword';
COMMIT;
Copy

Usando o comando \password do cliente Postgres psql

O programa do cliente Postgres psql 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. O metacomando \password pré-computa o hash scram-sha-256 da senha inserida e o utiliza no comando ALTER ROLE que é enviado ao servidor. Para usar esse método, primeiro crie novos usuários sem uma senha e depois defina a senha de cada usuário com o metacomando psql \password.

postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE

postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
Copy

Se log_statement for definido como um valor diferente de 'none', a entrada de log para o comando ALTER ROLE enviado pelo psql para o comando \password acima terá o hash scram-sha-256 calculado em vez da senha com texto não criptografado real. Você pode combinar esse método com a desabilitação completa de log_statement, conforme descrito acima, para 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
Copy

Proteção contra senhas vazadas

Leaked password protection is provided for roles on Snowflake Postgres instances. Discovery and notification work as described in our main Proteção contra senhas vazadas. When Snowflake discovers a leaked password for one of your Snowflake Postgres roles:

  • A função é adicionada à função de grupo snowflake_nologin especial do Postgres para impedir logins futuros com ela.

  • Todas as conexões existentes com a função são encerradas.

  • O assunto da notificação por e-mail que você recebe é «Urgent - Snowflake Postgres Role(s) Password Reset to Prevent Unauthorized Access».

Should you receive this email you should immediately securely update the role’s password as described above. When regenerating credentials for managed roles they are automatically removed from the snowflake_nologin Postgres role group. For non-managed roles, after updating the role’s password they can be removed from the snowflake_nologin group role by running this Postgres with the snowflake_admin role:

REVOKE snowflake_nologin FROM {rolename};
Copy

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 é bloqueada, você recebe um erro indicando que ela não é permitida no Snowflake Postgres.