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 e privilégios 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.
Com executar as instruções
CREATE CAST
eDROP CAST
como um usuário do banco de dados com o papelcloudsqlsuperuser
. No entanto, esse usuário precisa ter o privilégioUSAGE
nos tipos de dados de origem e de destino. Por exemplo, um usuário pode criar uma transmissão que converte o tipo de dadosint
de origem no tipo de dadosboolean
de destino.- Com 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 do IAM
O Identity and Access Management (IAM) é integrado ao Cloud SQL em um recurso chamado Autenticação do IAM. Quando você cria instâncias usando esse recurso, os usuários do IAM podem fazer login na instância usando os nomes de usuário e as senhas do IAM. A vantagem de usar a autenticação do IAM é que você pode usar as credenciais atuais do IAM do usuário ao conceder a ele acesso a um banco de dados. Quando o usuário sai da organização, a conta do IAM é suspensa, removendo o acesso automaticamente.
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
- Crie e gerencie usuários.
- Crie e gerencie bancos de dados.
- Consulte a documentação do PostgreSQL sobre papéis.
- Saiba mais sobre as opções para se conectar à instância.