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, o servidor gera e armazena um hash scram-sha-256, 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. Faça isso usando SET LOCAL:

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

Usando o comando \password do cliente Postgres psql

O programa do cliente Postgres psql tem um metacomando \password que pode ser usado para alterar a senha de usuários existentes. O metacomando \password pré-computa o hash span-sha-256 da senha inserida e o utiliza no comando ALTER ROLE que é enviado ao servidor. Para usar este método, crie primeiro novos usuários sem uma senha e, depois, defina 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 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

Proteção contra senhas vazadas

A proteção contra senhas vazadas é fornecida para funções em instâncias do Snowflake Postgres. A descoberta e a notificação funcionam conforme descrito em nossa Proteção contra senhas vazadas principal. Quando o Snowflake descobre uma senha vazada em uma de suas funções do Snowflake Postgres:

  • 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».

Se você receber esse e-mail, deverá atualizar a senha da função imediatamente e de forma segura, conforme descrito acima. Ao gerar de novo as credenciais das funções gerenciadas, elas são automaticamente removidas do grupo de funções snowflake_nologin do Postgres. Para funções não gerenciadas, após a atualização da senha da função, elas poderão ser removidas da função do grupo snowflake_nologin executando este Postgres SQL com a função snowflake_admin:

REVOKE snowflake_nologin FROM {rolename};

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.

Veja a seguir alguns exemplos de operações restritas:

  • Login com funções de superusuário, como postgres ou snowflake_superuser, ou assumindo tais funções usando SET ROLE.

  • Criação de outros superusuários.

  • Execução do comando ALTER SYSTEM.

  • 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 de tabelas de catálogo do sistema.

  • Criação de mais de 64 funções na instância.

  • Criação de mais de 32 bancos de dados na instância.

  • 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.