Instalação e Configuração do PostgreSQL
Devs estou a estudar banco de dados, atualmente no PostgreSQL, uso linux mais especificamente archlinux e cheguei até aqui olhem essa configurção e de suas opiniões concretas.
Instalar PostgreSQL
sudo pacman -S postgresql
Depois de intalado iniciar o shell do postgresql:
sudo -iu postgres
Antes que o PostgreSQL possa funcionar corretamente, o cluster de banco de dados deve ser inicializado:
initdb -D /var/lib/postgres/data
Os arquivos pertencentes a este sistema de banco de dados serão de propriedade do usuário "postgres".
Este usuário também deve possuir o processo do servidor.
O cluster de banco de dados será inicializado com a localização "C.UTF-8".
A configuração de pesquisa de texto padrão será definida como "inglês".
Os checksums da página de dados estão ativados.
Criar diretório /var/lib/postgres/data ... ok
Criando subdiretórios ... ok
Selecionando implementação de memória compartilhada dinâmica ... posix
Selecionando max_connections padrão ... 100
Selecionar padrão shared_buffers ... 128 MB
Selecionando o fuso horário padrão ... UTC (em inglês)
criando arquivos de configuração ... ok
executando bootstrap script ... ok
Realizar a inicialização pós-bootstrap ... ok
sincronizando dados com o disco ... ok
initdb: aviso: permitindo a autenticação "trust" para conexões locais
initdb: hint: Você pode alterar isso editando pg_hba.conf ou usando a opção -A, ou --auth-local e --auth-host, na próxima vez que você executar initdb.
- Sucesso. Agora você pode iniciar o servidor de banco de dados usando:
pg_ctl -D /var/lib/postgres/data -l logfile start
Se estes são o tipo de linhas que você vê, então o processo foi bem sucedido. Retorno ao usuário regular usando exit
.
Por último:
sudo systemctl start postgresql
Esse comando inicia o serviço do PostgreSQL imediatamente.
-
Ele executa o PostgreSQL agora, mas não garante que ele será iniciado automaticamente após reiniciar o sistema.
-
É útil quando você acabou de instalar o PostgreSQL e quer começar a usá-lo.
sudo systemctl enable postgresql
Esse comando ativa o serviço para que ele inicie automaticamente toda vez que o sistema for ligado (boot).
-
Ele não inicia o serviço agora — apenas configura o autostart.
-
Cria um link simbólico para o serviço em
/etc/systemd/system/multi-user.target.wants/
.
Se tudo deu certo até aqui, agora configurar o usuario e senha do postgresql, o postgresql já vem por padrão com o usuario postgres, você pode colocar uma senha e pronto. Mas ser quiser criar um novo ususario e senha:
createuser --interactive
Este comando cria um novo usuario, e pergunta se quer deixar esse usario superusuario, aqui não cria uma nova senha, depois você terá que entrar no banco de dados e criar uma nova senha, tipo:
psql -U postgres
// dentro do banco comando sql
ALTER ROLE nome_do_usuario WITH PASSWORD 'sua_senha_segura';
// não esqueça do ponto e virgula no final de cada comando sql.
Se ainda não criou o usuário, use:
createuser --interactive --pwprompt
Esse comando vai te perguntar:
-
Nome do usuário
-
Se é superuser
-
E a senha (com prompt interativo)
Segurança
-
Nunca use senhas fracas, especialmente se o banco estiver exposto a redes.
-
Evite logar esse comando em históricos (como
.bash_history
) — prefira usarpsql
interativo.
Caso precise excluir um usuario PostgreSQL, use:
DROP ROLE nome_do_usuario;
Atenção antes de excluir
Você só pode excluir um usuário se:
-
Ele não for dono de nenhum objeto (tabelas, bancos, funções, etc.)
-
Ele não estiver conectado no momento
Passos seguros para excluir um usuário
1. Verifique se o usuário é dono de algo
Execute no psql
:
SELECT tablename FROM pg_tables WHERE tableowner = 'nome_do_usuario';
Se ele for dono de objetos, você pode:
- Transferir a propriedade:
ALTER TABLE nome_tabela OWNER TO novo_dono;
Ou deletar os objetos antes.
Verifique se ele está conectado:
SELECT pid, usename FROM pg_stat_activity WHERE usename = 'nome_do_usuario';
Se aparecer, mate a conexão (se for seguro):
SELECT pg_terminate_backend(pid);
Excluir o usuário
DROP ROLE nome_do_usuario;
Configurando o acesso e segurança do PostgreSQL
No Arch Linux, para encontrar o diretório do pg_hba.conf
(arquivo de controle de acesso do PostgreSQL), use o seguinte comando no terminal:
sudo -u postgres psql -c "SHOW hba_file;"
1. Ajuste o pg_hba.conf
corretamente
Esse arquivo controla quem pode conectar, de onde e com qual método.
- Use
scram-sha-256
(mais seguro quemd5
):
# Exemplo seguro:
host all all 192.168.0.0/24 scram-sha-256
Evite trust
, exceto para ambientes de teste locais.
2. Use senhas fortes com scram-sha-256
No postgresql.conf
, ative:
password_encryption = scram-sha-256
3. Desative o superusuário remoto
Evite que postgres
(ou outros superusers) conectem via rede:
No pg_hba.conf
, restrinja isso:
# Negar acesso remoto ao superuser
host all postgres 0.0.0.0/0 reject
4. Use o mínimo de privilégios possível (principle of least privilege)
-
Crie usuários separados para leitura, escrita, administração, etc.
-
Exemplo:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO leitura;
GRANT INSERT, UPDATE ON minha_tabela TO escrita;
5. Ative RLS (Row-Level Security) quando necessário
ALTER TABLE minha_tabela ENABLE ROW LEVEL SECURITY;
CREATE POLICY politica_usuario
ON minha_tabela
FOR SELECT
USING (user_id = current_user::text);
6. Use SSL/TLS para conexões criptografadas
No postgresql.conf
:
ssl = on
ssl_cert_file = '/etc/ssl/certs/server.crt'
ssl_key_file = '/etc/ssl/private/server.key'
7. Monitore atividades e logs
Habilite logs em postgresql.conf
:
log_connections = on
log_disconnections = on
log_statement = 'ddl'
E revise periodicamente os logs em /var/lib/postgres/data/log/
ou /var/log/postgresql/
.
8. Atualize sempre o PostgreSQL
Use o gerenciador de pacotes do Arch:
sudo pacman -Syu postgresql
9. Restrinja o acesso ao sistema
-
O processo do PostgreSQL deve rodar como o usuário
postgres
. -
Proteja a pasta de dados (
/var/lib/postgres/data
) com permissões corretas.
chown -R postgres:postgres /var/lib/postgres
chmod 700 /var/lib/postgres/data
10. Use um firewall
No Arch Linux, ative e configure o ufw
ou iptables
para permitir apenas IPs autorizados.
Exemplo com ufw
:
sudo ufw allow from 192.168.1.0/24 to any port 5432
Depois de tudo configurado
Restarta o postgresql toda vez que editar as configurações:\1
sudo systemctl restart postgresql
Para entrar (logar) com um novo usuário no PostgreSQL no terminal do Linux.
1. Usando o comando psql
com login direto:
psql -U nome_do_usuario -d nome_do_banco
2. Se quiser forçar um host local e porta específica:
psql -U nome_do_usuario -d nome_do_banco -h localhost -p 5432