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

  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 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;
Copy

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:
Copy

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