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_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. 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.
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 as credenciais da função
snowflake_adminouapplication, você pode usar o comando ALTER POSTGRES INSTANCE com o parâmetro RESET ACCESS FOR. O valor especificado é uma cadeia de caracteres entre aspas, seja'snowflake_admin'ou'application'. Por exemplo:
Requer o privilégio OWNERSHIP
Esse comando retorna uma linha com a seguinte coluna:
password
Exemplo de rotação de credenciais
Redefinir o acesso para a função
snowflake_adminpara uma instância do Snowflake Postgres chamadamy_instance:
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:
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.
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:
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_nologinespecial 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:
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
postgresousnowflake_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.