Acerca dos utilizadores e das funções do PostgreSQL

Esta página descreve como o Cloud SQL funciona com utilizadores e funções do PostgreSQL. As funções do PostgreSQL permitem-lhe controlar o acesso e as capacidades dos utilizadores que acedem a uma instância do PostgreSQL.

Para ver a documentação completa sobre as funções do PostgreSQL, consulte o artigo Funções da base de dados na documentação do PostgreSQL. Para obter informações sobre como criar e gerir utilizadores do Cloud SQL, consulte o artigo Crie e faça a gestão de utilizadores.

Diferença entre utilizadores e funções

As funções do PostgreSQL podem ser uma única função ou podem funcionar como um grupo de funções. Um utilizador é uma função com a capacidade de iniciar sessão (a função tem o atributo LOGIN). Uma vez que todas as funções criadas pelo Cloud SQL têm o atributo LOGIN, o Cloud SQL usa os termos função e utilizador de forma intercambiável. No entanto, se criar uma função com o cliente psql, a função não tem necessariamente o atributo LOGIN.

Todos os utilizadores do PostgreSQL têm de ter uma palavra-passe. Não pode iniciar sessão com um utilizador que não tenha uma palavra-passe.

Restrições e privilégios de superutilizador

O Cloud SQL para PostgreSQL é um serviço gerido, pelo que restringe o acesso a determinadas tabelas e procedimentos do sistema que exigem privilégios avançados. No Cloud SQL, os clientes não podem criar nem ter acesso a utilizadores com atributos de superutilizador.

Não pode criar utilizadores da base de dados com privilégios de superutilizador. No entanto, pode criar utilizadores da base de dados com a função cloudsqlsuperuser, que tem alguns privilégios de superutilizador, incluindo:

  • Criar extensões que requerem privilégios de superutilizador.
  • Criar acionadores de eventos.
  • Criar utilizadores de replicação.
  • Criar publicações e subscrições de replicação.
  • Executar as declarações CREATE CAST e DROP CAST como um utilizador da base de dados com a função cloudsqlsuperuser. No entanto, este utilizador tem de ter o privilégio USAGE nos tipos de dados de origem e de destino. Por exemplo, um utilizador pode criar uma conversão que converta o tipo de dados int de origem no tipo de dados boolean de destino.

  • Ter acesso total à tabela do catálogo pg_largeobject.

Utilizadores predefinidos do PostgreSQL

Quando cria uma nova instância do Cloud SQL para PostgreSQL, o utilizador administrador predefinido postgres é criado, mas não a respetiva palavra-passe. Tem de definir uma palavra-passe para este utilizador antes de poder iniciar sessão. Pode fazê-lo na Google Cloud consola ou através do seguinte comando gcloud:

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

O utilizador postgres faz parte da função cloudsqlsuperuser e tem os seguintes atributos (privilégios): CREATEROLE, CREATEDB e LOGIN. Não tem os atributos SUPERUSER nem REPLICATION.

É criado um utilizador cloudsqlimportexport predefinido com o conjunto mínimo de privilégios necessários para operações de importação/exportação de CSV. Pode criar os seus próprios utilizadores para realizar estas operações, mas, se não o fizer, é usado o utilizador cloudsqlimportexport predefinido. O utilizador cloudsqlimportexport é um utilizador do sistema e os clientes não o podem usar diretamente.

Utilizadores do Cloud SQL IAM para autenticação IAM

A gestão de identidade e de acesso (IAM) está integrada com o Cloud SQL numa funcionalidade denominada autenticação IAM. Quando cria instâncias através desta funcionalidade, os utilizadores do IAM podem iniciar sessão na instância com os respetivos nomes de utilizador e palavras-passe do IAM. A vantagem de usar a autenticação IAM é que pode usar as credenciais IAM existentes de um utilizador quando lhe concede acesso a uma base de dados. Quando o utilizador sai da organização, a respetiva conta do IAM é suspensa, o que remove automaticamente o acesso.

Outros utilizadores do PostgreSQL

Pode criar outros utilizadores do PostgreSQL ou funções. Todos os utilizadores que criar através do Cloud SQL são criados como parte da função cloudsqlsuperuser e têm o mesmo conjunto de atributos que o utilizador postgres: CREATEROLE, CREATEDB e LOGIN. Pode alterar os atributos de qualquer utilizador através do comando ALTER ROLE.

Se criar um novo utilizador com o cliente psql, pode optar por associá-lo a uma função diferente ou atribuir-lhe atributos diferentes.

Acesso à vista pg_shadow e à tabela pg_authid

Pode usar a vista pg_shadow para trabalhar com as propriedades de funções marcadas como rolcanlogin na tabela do catálogo pg_authid.

A vista pg_shadow contém palavras-passe com hash e outras propriedades das funções (utilizadores) autorizadas a iniciar sessão num cluster. A tabela de catálogo pg_authidcontém palavras-passe com hash e outras propriedades para todas as funções da base de dados.

No Cloud SQL, os clientes não podem aceder à vista pg_shadow nem à tabela pg_authid com os privilégios predefinidos. No entanto, o acesso aos nomes das funções e às palavras-passe com hash é útil em determinadas situações, incluindo:

  • Configurar proxies ou equilíbrio de carga com utilizadores e palavras-passe existentes
  • Migrar utilizadores sem alterações nas palavras-passe
  • Implementar soluções personalizadas para a gestão de políticas de palavras-passe

Definir as flags para a vista pg_shadow e a tabela pg_authid

Para aceder à vista pg_shadow, defina a flag cloudsql.pg_shadow_select_role para um nome de função do PostgreSQL. Para aceder à tabela pg_authid, defina a flag cloudsql.pg_authid_select_role para um nome de função do PostgreSQL.

Se o cloudsql.pg_shadow_select_role existir, tem acesso só de leitura (SELECT) à visualização de propriedade pg_shadow. Se o cloudsql.pg_authid_select_role existir, tem acesso SELECT à tabela pg_authid.

Se qualquer uma das funções não existir, as definições não têm efeito, mas não ocorre nenhum erro. No entanto, é registado um erro quando um utilizador tenta aceder à vista ou à tabela. O erro é registado no registo da base de dados do PostgreSQL: cloudsql.googleapis.com/postgres.log. Para ver informações sobre como ver este registo, consulte o artigo Ver registos de instâncias.

Certifique-se de que as funções configuradas existem e que não existe um erro ortográfico no valor da flag cloudsql.pg_shadow_select_role ou da flag cloudsql.pg_authid_select_role. Também pode usar a função pg_has_role para verificar se um utilizador é membro destas funções. As informações sobre esta função estão disponíveis na página Funções e operadores de informações do sistema.

Pode usar a flag cloudsql.pg_shadow_select_role ou a flag cloudsql.pg_authid_select_role com a subscrição de funções do PostgreSQL para gerir o acesso pg_shadow ou pg_authid para vários utilizadores.

As alterações a qualquer uma das flags não requerem o reinício da base de dados.

Para mais informações sobre as flags suportadas, consulte o artigo Configure flags de base de dados.

Escolha um formato de armazenamento de palavras-passe

O Cloud SQL para PostgreSQL armazena as palavras-passe dos utilizadores num formato com hash. Pode usar a flag password_encryption para definir o algoritmo de encriptação como md5 ou scram-sha-256. O algoritmo md5 oferece a compatibilidade mais ampla, enquanto o algoritmo scram-sha-256 é mais seguro, mas pode ser incompatível com clientes mais antigos.

Quando ativa o pg_shadowacesso para exportar propriedades de funções de uma instância do Cloud SQL, considere usar o algoritmo mais seguro suportado pelos seus clientes.

Na documentação do PostgreSQL, consulte também:

O que se segue?