Cara Mengamankan PostgreSQL: Panduan Praktis untuk Melindungi Database Anda

Cara Mengamankan PostgreSQL: Panduan Praktis untuk Melindungi Database Anda

Cara Mengamankan PostgreSQL: Panduan Praktis untuk Melindungi Database Anda

PostgreSQL merupakan salah satu sistem manajemen basis data relasional (RDBMS) open-source yang paling populer di dunia. Fleksibilitas, performa tinggi, dan dukungan fitur yang lengkap membuat PostgreSQL banyak digunakan untuk aplikasi bisnis, platform SaaS, hingga sistem enterprise berskala besar.

Namun, sekuat apa pun teknologi yang digunakan, keamanan tetap menjadi aspek yang tidak boleh diabaikan. Database yang tidak dikonfigurasi dengan benar dapat menjadi target serangan seperti akses tidak sah, pencurian data, hingga ransomware.

Dalam artikel ini, kita akan membahas berbagai praktik terbaik untuk mengamankan PostgreSQL agar data bisnis tetap terlindungi.

Mengapa Keamanan PostgreSQL Penting?

Database sering kali menyimpan informasi sensitif seperti:

  • Data pelanggan

  • Informasi transaksi

  • Kredensial pengguna

  • Data operasional perusahaan

  • Informasi keuangan

Jika database berhasil ditembus, dampaknya bisa sangat besar, mulai dari kerugian finansial hingga hilangnya kepercayaan pelanggan. Oleh karena itu, keamanan PostgreSQL harus menjadi bagian dari strategi keamanan infrastruktur secara menyeluruh.


1. Gunakan Password yang Kuat dan Unik

Langkah paling dasar namun sering diabaikan adalah penggunaan password yang kuat untuk seluruh akun database.

Beberapa rekomendasi:

  • Minimal 12–16 karakter

  • Kombinasi huruf besar, huruf kecil, angka, dan simbol

  • Hindari penggunaan kata umum atau informasi pribadi

  • Gunakan password berbeda untuk setiap akun

Contoh password yang kuat:

T7!vQ9#zLm@2pX4$

Selain itu, gunakan password manager untuk menyimpan kredensial secara aman.


2. Batasi Akses Melalui pg_hba.conf

File pg_hba.conf mengatur siapa saja yang dapat terhubung ke PostgreSQL dan metode autentikasi yang digunakan.

Hindari konfigurasi yang terlalu permisif seperti:

host all all 0.0.0.0/0 md5

Sebagai gantinya, batasi akses hanya dari jaringan yang diperlukan:

host all all 192.168.1.0/24 scram-sha-256

Praktik terbaik:

  • Izinkan hanya IP yang diperlukan

  • Hindari akses dari seluruh internet

  • Gunakan subnet yang spesifik

  • Lakukan audit konfigurasi secara berkala


3. Gunakan SCRAM-SHA-256 untuk Autentikasi

Versi PostgreSQL modern mendukung metode autentikasi yang lebih aman dibanding MD5, yaitu SCRAM-SHA-256.

Aktifkan pada file konfigurasi:

password_encryption = scram-sha-256

Kemudian perbarui password pengguna:

ALTER USER app_user PASSWORD 'PasswordBaruYangKuat';

Keuntungan SCRAM-SHA-256:

  • Perlindungan lebih baik terhadap serangan brute force

  • Penyimpanan password yang lebih aman

  • Direkomendasikan oleh PostgreSQL terbaru


4. Nonaktifkan Akun yang Tidak Digunakan

Akun database yang sudah tidak digunakan sering menjadi celah keamanan.

Lakukan audit secara rutin:

SELECT usename
FROM pg_user;

Hapus akun yang tidak diperlukan:

DROP ROLE old_user;

Atau nonaktifkan akses sementara:

ALTER ROLE old_user NOLOGIN;

Prinsip yang perlu diterapkan adalah menjaga jumlah akun seminimal mungkin.


5. Terapkan Prinsip Least Privilege

Jangan memberikan hak akses berlebihan kepada pengguna database.

Contoh yang harus dihindari:

GRANT ALL PRIVILEGES ON DATABASE production TO app_user;

Berikan hanya izin yang benar-benar dibutuhkan:

GRANT CONNECT ON DATABASE production TO app_user;

GRANT SELECT, INSERT, UPDATE
ON TABLE customers
TO app_user;

Dengan pendekatan ini, jika akun aplikasi berhasil diretas, dampak yang ditimbulkan dapat diminimalkan.


6. Aktifkan SSL/TLS untuk Enkripsi Koneksi

Tanpa enkripsi, data yang dikirim antara aplikasi dan database dapat disadap oleh pihak yang tidak berwenang.

Aktifkan SSL pada PostgreSQL:

ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

Kemudian pada pg_hba.conf:

hostssl all all 192.168.1.0/24 scram-sha-256

Manfaat SSL/TLS:

  • Melindungi data saat transit

  • Mencegah serangan man-in-the-middle

  • Memenuhi berbagai standar kepatuhan keamanan


7. Lindungi Port PostgreSQL

Secara default PostgreSQL menggunakan port:

5432

Jangan membuka port ini secara publik kecuali benar-benar diperlukan.

Gunakan firewall untuk membatasi akses:

Linux UFW

sudo ufw allow from 192.168.1.10 to any port 5432

Linux FirewallD

firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="5432" accept'

Idealnya database hanya dapat diakses oleh application server yang terpercaya.


8. Perbarui PostgreSQL Secara Berkala

Patch keamanan terus dirilis untuk mengatasi kerentanan yang ditemukan.

Pastikan:

  • Menggunakan versi PostgreSQL yang masih didukung

  • Menginstal security update secara rutin

  • Menguji pembaruan di lingkungan staging sebelum diterapkan ke produksi

Menunda pembaruan dapat meningkatkan risiko eksploitasi terhadap kerentanan yang sudah diketahui publik.


9. Aktifkan Logging dan Monitoring

Monitoring membantu mendeteksi aktivitas mencurigakan lebih cepat.

Contoh konfigurasi:

log_connections = on
log_disconnections = on
log_statement = 'ddl'

Aktivitas yang perlu dipantau:

  • Login gagal berulang kali

  • Query yang tidak biasa

  • Perubahan struktur database

  • Kenaikan penggunaan resource secara mendadak

Integrasikan log PostgreSQL dengan sistem monitoring seperti:

  • ELK Stack

  • Grafana

  • Prometheus

  • SIEM perusahaan


10. Lakukan Backup Secara Teratur

Keamanan tidak hanya tentang mencegah serangan, tetapi juga memastikan pemulihan ketika insiden terjadi.

Gunakan backup rutin:

pg_dump -U postgres production > backup.sql

Untuk lingkungan produksi, pertimbangkan:

  • Backup harian otomatis

  • Penyimpanan di lokasi terpisah

  • Enkripsi file backup

  • Pengujian proses restore secara berkala

Backup yang tidak pernah diuji sama berbahayanya dengan tidak memiliki backup sama sekali.


11. Gunakan Role-Based Access Control (RBAC)

Daripada memberikan izin langsung kepada setiap pengguna, gunakan role untuk mengelola hak akses.

Contoh:

CREATE ROLE readonly;

GRANT CONNECT ON DATABASE production TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

GRANT readonly TO analyst_user;

Keuntungan RBAC:

  • Pengelolaan akses lebih mudah

  • Mengurangi kesalahan konfigurasi

  • Mempermudah audit keamanan


12. Pisahkan Database dari Server Aplikasi

Untuk lingkungan produksi, hindari menempatkan database dan aplikasi pada server yang sama.

Arsitektur yang lebih aman:

Internet
    |
Load Balancer
    |
Application Server
    |
Database Server

Keuntungannya:

  • Mengurangi permukaan serangan

  • Memudahkan segmentasi jaringan

  • Meningkatkan kontrol akses


Checklist Keamanan PostgreSQL

Gunakan daftar berikut sebagai referensi cepat:

✅ Password kuat untuk semua akun

✅ Gunakan SCRAM-SHA-256

✅ Batasi akses melalui pg_hba.conf

✅ Terapkan prinsip least privilege

✅ Aktifkan SSL/TLS

✅ Lindungi port 5432 dengan firewall

✅ Hapus akun yang tidak digunakan

✅ Aktifkan logging dan monitoring

✅ Lakukan update PostgreSQL secara berkala

✅ Backup dan uji proses recovery

✅ Terapkan RBAC

✅ Pisahkan server database dan aplikasi


Kesimpulan

Mengamankan PostgreSQL bukan hanya tentang mengaktifkan satu fitur keamanan, melainkan menerapkan pendekatan berlapis yang mencakup autentikasi, kontrol akses, enkripsi, monitoring, dan backup. Dengan menerapkan praktik-praktik terbaik seperti penggunaan SCRAM-SHA-256, pembatasan akses melalui pg_hba.conf, enkripsi SSL/TLS, serta prinsip least privilege, organisasi dapat secara signifikan mengurangi risiko kebocoran data dan serangan siber.

Bagi perusahaan yang mengandalkan PostgreSQL untuk mendukung aplikasi bisnis, investasi pada keamanan database bukan sekadar kebutuhan teknis, melainkan bagian penting dari strategi perlindungan aset digital dan keberlangsungan operasional jangka panjang.

Comments

Search Articles