Sobre usuários e papéis do PostgreSQL

Nesta página, você verá como o Cloud SQL funciona com usuários e papéis do PostgreSQL. Com os papéis do PostgreSQL, você controla o acesso e os recursos dos usuários que acessam uma instância do PostgreSQL.

Para acessar a documentação completa sobre papéis do PostgreSQL, consulte Papéis de banco de dados na documentação do PostgreSQL. Para informações sobre como criar e gerenciar usuários do Cloud SQL, consulte Criar e gerenciar usuários.

Diferença entre usuários e papéis

Os papéis do PostgreSQL podem ser um papel ou um grupo de papéis. Um usuário é um papel com a capacidade de fazer login (o papel tem o atributo LOGIN). Como todos os papéis criados pelo Cloud SQL têm o atributo LOGIN, ele usa os termos papel e usuário como sinônimos. No entanto, se você criar um papel com o cliente psql, o papel não terá necessariamente o atributo LOGIN.

Todos os usuários do PostgreSQL devem ter uma senha. Não é possível fazer login com um usuário que não tenha uma senha.

Restrições de superusuário

Como o Cloud SQL para PostgreSQL é um serviço gerenciado, ele restringe o acesso a determinados procedimentos e tabelas do sistema que exigem privilégios avançados. No Cloud SQL, os clientes não podem criar ou ter acesso a usuários com atributos de superusuário.

Não é possível criar usuários de banco de dados com privilégios de superusuário. No entanto, é possível criar usuários de banco de dados com o papel cloudsqlsuperuser, que tem alguns privilégios de superusuário, incluindo:

  • Como criar extensões que exigem privilégios de superusuário
  • Como criar gatilhos de eventos
  • Como criar usuários de replicação
  • Como criar publicações e assinaturas de replicação
  • Acesso total à tabela do catálogo pg_largeobject.

Usuários padrão do PostgreSQL

Quando você cria uma nova instância do Cloud SQL para PostgreSQL, o usuário administrador padrão postgres é criado, mas a senha não é criada. É preciso definir uma senha para esse usuário antes de fazer login. Você pode fazer isso no Console do Google Cloud ou usando o seguinte comando gcloud:

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

O usuário postgres faz parte do papel cloudsqlsuperuser e tem estes atributos ou privilégios: CREATEROLE, CREATEDB e LOGIN. Ele não tem os atributos SUPERUSER ou REPLICATION.

Um usuário padrão cloudsqlimportexport é criado com o conjunto mínimo de privilégios necessários para as operações de importação/exportação de CSV. É possível criar seus próprios usuários para realizar essas operações. No entanto, se você não fizer isso, o usuário cloudsqlimportexport padrão será usado. O usuário cloudsqlimportexport é do sistema, e os clientes não podem usá-lo diretamente.

Usuários do IAM do Cloud SQL para autenticação de banco de dados do IAM

O IAM é integrado ao Cloud SQL em um recurso chamado autenticação de banco de dados do IAM. Quando você cria instâncias usando esse recurso, os usuários do IAM podem fazer login na instância usando o nome de usuário e a senha deles. A vantagem de usar a autenticação do banco de dados do IAM é que você pode usar as credenciais atuais do IAM do usuário ao conceder a ele acesso ao banco de dados. Quando o usuário sai da organização, a conta do IAM é suspensa, removendo automaticamente o acesso. Para saber mais sobre a autenticação de banco de dados do IAM, consulte Autenticação de banco de dados do IAM do Cloud SQL.

Outros usuários do PostgreSQL

Você pode criar outros usuários ou papéis do PostgreSQL. Todos os usuários criados com o Cloud SQL são gerados como parte do papel cloudsqlsuperuser e têm o mesmo conjunto de atributos que o usuário postgres: CREATEROLE, CREATEDB e LOGIN. É possível alterar os atributos dos usuários com o comando ALTER ROLE.

Se você criar um novo usuário com o cliente psql, será possível associá-lo a um papel diferente ou conceder outros atributos a ele.

Acesso à visualização pg_shadow e à tabela pg_authid

Use a visualização pg_shadow para trabalhar com as propriedades dos papéis marcados como rolcanlogin na tabela de catálogo pg_authid.

A visualização pg_shadow contém senhas com hash e outras propriedades dos papéis (usuários) autorizados a fazer login em um cluster. A tabela de catálogo pg_authid contém senhas com hash e outras propriedades para todos os papéis de banco de dados.

No Cloud SQL, não é possível os clientes acessarem a visualização pg_shadow ou a tabela pg_authid usando os privilégios padrão. No entanto, o acesso a nomes de papéis e senhas com hash é útil em determinadas situações, como estas:

  • Como configurar proxies ou balanceamento de carga com usuários e senhas existentes
  • Migração de usuários sem alterações nas senhas
  • Implementar soluções personalizadas para o gerenciamento de políticas de senha

Como definir as flags para a visualização pg_shadow e a tabela pg_authid

Para acessar a visualização pg_shadow, defina a sinalização cloudsql.pg_shadow_select_role como um nome de papel do PostgreSQL. Para acessar a tabela pg_authid, defina a flag cloudsql.pg_authid_select_role com um nome de papel do PostgreSQL.

Se existir, o cloudsql.pg_shadow_select_role terá o acesso somente leitura (SELECT) à visualização pg_shadow. Se existir, o cloudsql.pg_authid_select_role terá o acesso SELECT à tabela pg_authid.

Se um dos papéis não existir, as configurações não terão efeito, mas nenhum erro ocorrerá. No entanto, um erro será registrado quando um usuário tentar acessar a visualização ou a tabela. O erro é gravado no registro do banco de dados do PostgreSQL, cloudsql.googleapis.com/postgres.log. Para informações sobre como visualizar esse registro, consulte Visualizar registros de instância.

Verifique se os papéis configurados existem e se não há erro de digitação nos valores de qualquer uma destas flags: cloudsql.pg_shadow_select_role ou cloudsql.pg_authid_select_role. Também é possível usar a função pg_has_role para verificar se um usuário está associado a esses papéis. Informações sobre essa função estão disponíveis na página Funções e operadores de informações do sistema.

É possível usar a flag cloudsql.pg_shadow_select_role ou cloudsql.pg_authid_select_role com a associação do papel do PostgreSQL para gerenciar o acesso pg_shadow ou pg_authid para vários usuários.

As alterações em qualquer uma dessas flags não exigem a reinicialização do banco de dados.

Para mais informações sobre sinalizações compatíveis, consulte Configurar sinalizações do banco de dados.

Escolher um formato de armazenamento de senhas

O Cloud SQL para PostgreSQL armazena senhas de usuários em um formato com hash. É possível usar a sinalização password_encryption para definir o algoritmo de criptografia como md5 ou scram-sha-256. O algoritmo md5 oferece a compatibilidade mais ampla, enquanto scram-sha-256 é mais seguro, mas pode ser incompatível com clientes mais antigos.

Ao ativar o acesso pg_shadow para exportar propriedades de papel de uma instância do Cloud SQL, use o algoritmo mais seguro aceito pelos seus clientes.

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

A seguir