Guia de como configurar PostgreSQL
Instalação do PostgreSQL
Primeiramente, instalamos o PostgreSQL na nossa distribuição. No meu caso, estou usando Ubuntu-22.04, então a instalação será feita utilizando APT. Caso esteja usando outra distribuição, recomendo pesquisar como instalar o PostgreSQL utilizando o gerenciador de pacotes da distribuição em questão.
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo apt install libpq-dev
Com os comandos abaixo, você pode validar se o PostgreSQL foi instalado corretamente:
sudo service postgresql status
Caso o serviço não esteja em execução, utilize o comando abaixo para iniciá-lo:
sudo service postgresql start
Porta
Precisamos descobrir em qual porta o PostgreSQL está rodando. Por padrão, ele utiliza a porta 5432. No entanto, pode acontecer de, por algum motivo, outra aplicação estar utilizando essa porta, fazendo com que o PostgreSQL utilize uma porta diferente da padrão. Portanto é necessário validar em qual porta o serviço está sendo executado.
sudo ss -lntp | grep 5432
~> LISTEN 0 244 127.0.0.1 5432 0.0.0.0:* users(("postgres", pid=258, fd=5))
Configurando o PostgreSQL
Com o comando abaixo, acessamos terminal do PostgreSQL:
sudo -u postgres psql
Agora aprenderemos a listar, criar e gerenciar roles e privilégios.
Começamos listando nossos usuários e, inicialmente, teremos apenas um usuário chamado postgres com todas as permissões (superuser).
// Comando usado para listar os usuarios
\\du
// return
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Observação: Para fins de prática, não é obrigatório criar um novo usuário. Porém, realizamos esse processo por boas práticas de segurança, Caso futuramente você utilize esse banco em uma aplicação, não é recomendado utilizar diretamente o usuário postgres, pois ele possui privilégios de superuser.
Usuários com privilégios elevados violam o Principle of Least Privilege (Princípio do Menor Privilégio), podendo aumentar os riscos de vulnerabilidades, como SQL Injection ou outras falhas de segurança. Portanto, mesmo em ambientes de estudo, é recomendado criar um usuário com permissões limitadas para acessar o banco de dados.
Agora que aprendemos a listar nossos usuários, iremos aprender a criar um novo usuários e aplicar as permissões corretas nele.
CREATE ROLE **user_teste** WITH LOGIN PASSWORD 'password' CREATEDB CREATEROLE;
Agora criamos um banco e tornamos nosso usuário dono do banco e assim o dev tem controle total do banco, sem precisar de superuser.
**CREATE DATABASE users_db OWNER user_teste;**
Aqui acontecem duas coisas:
- O banco users_db é criado;
- O usuário dev vira o owner (dono) desse banco.
Ser dono do banco significa que o dev pode:
- alterar configurações do banco;
- criar schemas;
- dropar o banco;
- gerenciar permissões dentro dele.
Mas atenção: Isso não significa automaticamente controle sobre todos os objetos dentro do banco, porque no PostgreSQL existem níveis de permissão.
Server
└── Database
└── Schema
└── Tables
└── Views
└── Functions
Mesmo sendo dono do database, permissões dentro do schema podem limitar ações.
Depois de realizarmos esses passos com atenção, agora iremos conectar no nosso banco e aplicar as permissões nos schemas
No terminal digitamos o comando abaixo para acessar o nosso database.
\\c users_db
Agora que estamos conectados ao nosso banco de dados podemos aplicar nossas permissões no schema.
GRANT ALL ON SCHEMA public TO user_teste;
Esse comando é responsável por permite que o user_teste possa:
- USAGE ~> Acessar o schema
- CREATE ~> Criar objetos dentro dele
O que é um schema?
Um schema é como se fosse uma pasta lógica dentro do banco.
Exemplo:
users_db
└── public
├── users
├── orders
└── products
Por padrão, o PostgreSQL cria o schema:
public
Conclusão
Com esses passos, configuramos corretamente um ambiente básico de PostgreSQL para desenvolvimento.
Durante o processo aprendemos a:
- instalar o PostgreSQL na distribuição Linux;
- verificar se o serviço está em execução;
- identificar a porta utilizada pelo banco;
- acessar o terminal interativo do PostgreSQL (psql);
- listar roles existentes;
- criar um novo usuário com permissões específicas;
- criar um banco de dados e definir seu proprietário;
- compreender a estrutura hierárquica do PostgreSQL (Database → Schema → Tables);
- conceder permissões em schemas.
Seguindo essas boas práticas, evitamos utilizar o usuário superuser (postgres) diretamente em aplicações, adotando o Princípio do Menor Privilégio, o que torna o ambiente mais seguro e próximo de cenários reais de produção.
Referências
-
PostgreSQL Documentation
-
PostgreSQL Installation (Ubuntu)
-
PostgreSQL Schemas
-
PostgreSQL Roles and User Management
-
Principle of Least Privilege (OWASP)
https://owasp.org/www-community/controls/Least_Privilege_Principle
-
SQL Injection (OWASP)
-
Boas práticas com PostgreSQL
https://www.postgresql.org/docs/current/ddl-priv.html