Controlar o acesso de usuários ao banco de dados PostgreSQL
Os novos bancos de dados no PostgreSQL são sempre criados com um conjunto padrão de privilégios no esquema public
do banco de dados que permite que todos os usuários e perfis do banco de dados criem objetos. Esses privilégios permitem que os usuários do banco de dados se conectem ao banco de dados, por exemplo, e criem tabelas temporárias durante a conexão.
Para controlar melhor o acesso dos usuários às instâncias de bancos de dados que você cria no nó primário do cluster de banco de dados do Aurora PostgreSQL , recomendamos que você revogue esses privilégios de public
padrão. Depois disso, conceda privilégios específicos aos usuários do banco de dados de forma mais granular, conforme mostrado no procedimento a seguir.
Como configurar perfis e privilégios para uma nova instância de banco de dados
Suponha que você esteja configurando um banco de dados em um cluster de banco de dados do Aurora PostgreSQL recém-criado para uso por vários pesquisadores que precisam de acesso de leitura-gravação ao banco de dados.
Use o
psql
(ou o pgAdmin) para se conectar à instância do banco de dados primário no cluster de banco de dados do Aurora PostgreSQL:psql --host=
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordInsira sua senha quando for solicitado. O cliente
psql
conecta-se e exibe o banco de dados de conexão administrativa padrão,postgres=>
, como o prompt.Para evitar que os usuários do banco de dados criem objetos no esquema
public
, faça o seguinte:postgres=>
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE
Em seguida, crie uma nova instância de banco de dados:
postgres=>
CREATE DATABASE
lab_db
;CREATE DATABASE
Revogue todos os privilégios do esquema
PUBLIC
nesse novo banco de dados.postgres=>
REVOKE ALL ON DATABASE
lab_db
FROM public;REVOKE
Crie um perfil para os usuários do banco de dados.
postgres=>
CREATE ROLE
lab_tech
;CREATE ROLE
Permita que os usuários do banco de dados que têm esse perfil conectem-se ao banco de dados.
postgres=>
GRANT CONNECT ON DATABASE
lab_db
TOlab_tech
;GRANT
Conceda a todos os usuários com o perfil
lab_tech
todos os privilégios nesse banco de dados.postgres=>
GRANT ALL PRIVILEGES ON DATABASE
lab_db
TOlab_tech
;GRANT
Crie os usuários do banco de dados, da seguinte forma:
postgres=>
CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';
CREATE ROLE
postgres=>
CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';
CREATE ROLE
-
Conceda a esses dois usuários os privilégios associados ao perfil lab_tech:
postgres=>
GRANT lab_tech TO lab_user1;
GRANT ROLE
postgres=>
GRANT lab_tech TO lab_user2;
GRANT ROLE
Neste ponto, o lab_user1
e o lab_user2
podem conectar-se ao banco de dados lab_db
. Este exemplo não segue as práticas recomendadas para uso corporativo, o que pode incluir a criação de várias instâncias de banco de dados, esquemas diferentes e concessão de permissões limitadas. Para obter informações mais completas e cenários adicionais, consulte Managing PostgreSQL Users and Roles
Para obter mais informações sobre privilégios nos bancos de dados PostgreSQL, consulte o comando GRANT