Tunggu dulu, tanpa password ? Bagaimana jika seseorang mencoba untuk mengakses tanpa izin? Tenang, tanpa password di sini tentu maksudnya dengan syarat. Kita bisa mengatur agar bisa login PostgreSQL tanpa password dengan syarat hanya user dengan nama tertentu atau user dari host tertentu yang bisa mengakses.
Contents
Kelebihan Login PostgreSQL Tanpa Password
Dengan menerapkan sistem whitelist seperti ini kita mendapatkan keuntungan dimana jika ada orang yang hendak mengakses server database milik kita dengan mencoba menebak password secara acak (metode brute force) itu tidak akan berhasil karena memang tidak ada password-nya sama sekali.
Kekurangan Login PostgrSQL Tanpa Password
Namun tentu saja ada kekurangannya juga, jika seseorang mendapatkan akses ke host tertentu yang dibolehkan login tanpa password, maka bisa jadi orang tersebut dapat juga masuk ke server database kita. Karena itu sangat penting memperkuat keamanan server dalam whitelist tadi.
Studi Kasus
Saya memiliki dua server dimana akan saya pisah antara server untuk aplikasi dan server untuk database.
Server Database:
IP Address: 10.0.0.1/24
Database User: dbadmin
Database Name: project_demo
Server Aplikasi:
IP Address: 10.0.0.10/24
Dengan demikian sudah jelas yang akan menjadi klien database adalah server aplikasi.
Pengaturan Otentikasi Klien PostgreSQL
Langkah pertama untuk mengaktifkan login tanpa password pada PostgreSQL adalah dengan menyunting file konfigurasi otentikasi klien. Nama file tersebut adalah pg_hba.conf
. Lokasi dimana file tersebut tersimpan dapat berbeda tergantung versi PostgreSQL yang terpasang pada server. Jadi jika lokasi file yang ada dalam artikel ini berbeda dengan milik Anda, jangan kuatir. Anda dapat menggunakan perintah locate
untuk menemukan dimana file yang Anda cari tersimpan.
$ locate pg_hba.conf
Jika sudah ditemukan, mari kita rubah isi file tersebut dengan menggunakan text editor, di sini saya menggunakan nano
.
$ sudo nano /etc/postgresql/10/main/pg_hba.conf
Langsung scroll ke bawah dan kita akan menemukan script yang bentuknya kurang lebih seperti ini:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
Script di atas berbentuk seperti tabel yang menunjukkan bagaimana suatu koneksi terhadap database tertentu diakses oleh user tertentu melalui address tertentu dan bagaimana metodenya.
Nah, sekarang kita akan menambahkan satu baris dalam tabel peraturan tersebut. Perhatikan pada bagian # IPv4 local connections:
, di bawahnya sudah ada satu peraturan bawaan. Coba tambahkan satu lagi di bawahnya dengan peraturan berikut:
host all all 10.0.0.10/24 trust
Sehingga bentuknya akan menjadi seperti berikut:
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 10.0.0.10/24 trust
Peraturan baru yang kita tambahkan tadi punya tujuan sebagai berikut:
host
: Merupkan tipe koneksi apa yang diberlakukan dalam peraturan ini, yakni koneksi yang menggunakan IP Address untuk mengakses database server.all
: all
yang pertama menunjukkan bahwa peraturan ini berlaku untuk semua database. Anda dapat menuliskan nama database tertentu jika ingin peraturan ini berlaku untuk database tertentu.all
: all
yang kedua menunjukkan bahwa peraturan ini berlaku untuk semua user. Anda dapat menuliskan nama user tertentu jika ingin peraturan ini berlaku hanya untuk user tertentu.10.0.0.10/24
: Merupakan IP Address klien yang mengakses dilengkapi dengan subnet-nya. Jadi peraturan ini berlaku untuk setiap koneksi yang berasal dari IP Address 10.0.0.10/24
. Jadi, jika klien Anda memiliki IP Address yang berbeda dengan contoh di atas, silakan ganti sesuai kebutuhan Anda.trust
: Merupakan metode yang diberlakukan dalam peraturan ini, yakni metode trust
yang artinya server database akan selalu mengizinkan akses.
Jika Anda sudah selesai menambahkan peraturan baru, jangan lupa simpan file tersebut.
Pengaturan PostgreSQL
Nah, setelah menambahkan peraturan yang membolehkan klien dengan IP Address tersebut login ke PostgreSQL tanpa password, sekarang kita perlu mengatur juga pengaturan PostgreSQL.
Kita perlu membuat server database dapat diakses menggunakan IP Address-nya sendiri, sehingga dapat diakses dari luar (tidak hanya dari lokal sebagaimana pengaturan bawaannya).
File konfigurasi PostgreSQL bernama postgresql.conf
dan sama seperti sebelumnya Anda dapat menggunakan perintah locate
untuk menemukan lokasi tersimpannya file tersebut.
$ locate postgresql.conf
Jika sudah ditemukan, mari kita rubah isi file tersebut dengan menggunakan text editor, di sini saya menggunakan nano
.
$ sudo nano /etc/postgresql/10/main/postgresql.conf
Isi dari file ini sangat banyak, jadi saya akan menunjukkan bagian mana saja yang perlu diperhatikan. Gunakan fitur pencarian untuk mencari listen_addresses
. Anda akan menemukan baris script seperti berikut jika sebelumnya tidak pernah diubah (masih default)
#listen_addresses = 'localhost' # what IP address(es)
Nah, langkah pertama hilangkan dulu tanda pagar (#) agar baris tersebut terbaca oleh PostgreSQL. Kemudian tambahkan IP Address server database setelah localhost
dipisahkan dengan tanda koma.
listen_addresses = 'localhost,10.0.0.1'
Dengan memasukkan IP Address tadi ke dalam peraturan listen_addresses
artinya PostgreSQL hanya dapat diakses melalui localhost
atau IP Adress 10.0.0.1
. Anda dapat memasukkan IP Address yang berbeda sesuai kebutuhan atau gunakan tanda bintang (*) jika ingin tidak ada batasan host.
Jika Anda sudah selesai menambahkan peraturan baru, jangan lupa simpan file tersebut.
Restart Service PostgreSQL
Pengaturan yang kita lakukan tadi tidak akan diberlakukan sampai service PostgreSQL dimulai ulang, jadi kita perlu restart service-nya.
$ sudo systemctl restart postgresql
Login PostgreSQL Tanpa Password dari Klien
Sekarang dari server aplikasi coba login ke PostgrSQL, maka kita akan masuk tanpa harus memasukkan password lagi.
$ psql -h 10.0.0.1 -p 5432 -U dbadmin -w -d project_demo
Keterangan:
– psql
: Perintah untuk mengakses PostgreSQL.
– -h
: IP Address dari server database yang hendak diakses.
– -p
: Port dari server database yang hendak diakses.
– -U
: Nama user database yang hendak mengakses.
– -w
: Mengindikasikan bahwa akses ini tanpa password, jadi psql
tidak akan meminta kita memasukkan password.
– -d
: Nama database yang hendak diakses.
Selesai
Nah, silakan dicoba semoga berhasil, jika Anda memiliki pertanyaan atau punya studi kasus berbeda, silakan kirim komentar Anda melalui kolom komentar di bawah ini.
Mantab
cara lihat password yang sudah dihash (md5) dimana ya
Halo, apakah bisa dijelaskan ini password apa yang dimaksud?