MongoDB merupakan salah satu jenis NoSQL Database yang berbentuk dokumen. Menurut survey StackOverFlow MongoDB adalah NoSQL database paling populer. Ketika install MongoDB Server di komputer lokal terdapat kekurangan karena hanya diakses secara lokal dan tidak bisa diakses melalui internet
Umumnya di production kita harus menyiapkan server yang bisa terhubung dengan internet agar dapat diakses dari mana saja tetapi hal ini berpotensi untuk dihack orang yang tidak bertanggung jawab. Misalnya data diambil atau dihapus tanpa sepengetahuan kita
Yang banyak orang alami adalah kasus ransomware seperti mengenskripsi data kita di server dan meminta tebusan. Contoh bentuk tebusannya adalah seperti ini
“All your data is backed up. You have to pay 0.02 BTC to 12oLb1p8vKvsAeQrMD7GATxCm3fGMuEWg3 48 hours to recover it. After 48 hours expire, we will leak and expose all your data
By Default MongoDB tidak mengaktifkan fitur authentication dalam bentuk username password. Pada artikel ini kita akan coba implementasikan cara set username dan password di MongoDB Server. Selain itu juga perlu diimplementasikan role untuk authorization bahwa user x hanya boleh mengakses database y
Artikel ini melanjutkan dari artikel sebelumnya yaitu Instalasi MongoDB di AWS EC2 Instance. Bagi teman-teman yang tidak mempunyai VPS di cloud AWS bisa menggunakan provider lokal seperti IDCloudHost.
Caranya cukup mudah kita hanya perlu register IDCloudHost dan langsung siap di-topup untuk membuat VPS dengan spek yang kita inginkan
Kita cukup mengatur jumlah core CPU, RAM dan ukuran Storage dengan OS yang bermacam-macam. Di paling bawah juga ada estimasi perbayaran per jam / per bulan. Misalnya kita set menggunakan 2 Core CPU, 2 GB Ram dan 50 GB Storage maka kita membayar Rp. 145/jam atau 106.250/Bulan.
Tagihan ini juga bisa berkurang jika tidak terlalu digunakan bisa distop akan menghemat biaya untuk penggunakan CPU dan RAM tetapi untuk Storage masih dikenakan tagihan karena masih menyimpan data kita
Setelah menyiapkan VPS dengan OS Linux (dalam case ini menggunakan distro Ubuntu) selanjutnya install MongoDB seperti tutorial di artikel Instalasi MongoDB di subbab Instalasi MongoDB Server melalui ssh dengan tool seperti putty, MobaXterm atau lainnya
Set Username, Password & Role di MongoDB
Saat kita sudah sukses terhubungan dengan MongoDB server melalui Compass atau Shell selanjutnya kita akan set username dan password
Pertama kita masuk di database admin melalui mongo shell dan buat user administrator. user administrator ini berhak untuk mengakses semua database dengan role write dan read
use admin
Buat user administrator dengan role userAdminAnyDatabase
yang bisa menajemen user dengan kita set db : admin
db.createUser({ user: "admin", pwd: "admin123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
Kita juga tambahkan role readWriteAnyDatabase
untuk bisa mengakses semua database
db.grantRolesToUser('admin', [{ role: 'readWriteAnyDatabase', db: 'admin' }]);
exit shell
exit
Kita modif mongod.conf
sudo nano /etc/mongod.conf
kemudian enable authentication
security: authorization: enabled
Restart MongoDB service
sudo service mongod restart
Login kembali ke database admin
use admin
Kita tidak akan bisa akses semua database karena kita harus memasukkan credential yang valid dengan perintah
db.auth("admin", "admin123")
Ok kita telah berhasil membuat user administrator. dengan user admin kita bisa mengakses semua database dan manajemen user
Detail role
MongoDB bisa dibaca di halaman dokumentasinya di Role MongoDB
Selanjutnya kita akan buat user yang hanya bisa akses untuk database tertentu. Tujuannya adalah agar user hanya dapat mengakses database tertentu saja. Kita misalkan mongoDB server ibarat rumah yang banyak ruangannya. Admin mempunyai semua kunci ruangan dan bisa membukanya. selain itu ada user lainnya yang hanya bisa membuka ruangan mereka masing-masing
Caranya hampir sama tetapi saat membuat user kita ganti role : dbOwner
masuk ke mongo shell dan masuk db : kampus
dan login dulu dengan akun admin
use kampus
create user dengan role dbOwner
db.createUser({ user: "faqih", pwd: "faqih123", roles: [{ role: "dbOwner", db: "kampus" }] })
Yes akhirnya selesai cukup dengan 1 perintah saja untuk bisa membuat username, password dan role di MongoDB Server
Selanjutnya kita bisa gunakan grantRolesToUser
untuk menambahkan role ke user untuk bisa mengakses database lainnya
Misal user faqih kita grant untuk bisa akses database perusahaan maka jalankan perintah berikut
db.grantRolesToUser('faqih', [{ role: 'readWrite', db: 'perusahaan' }]);
Finally kita sudah selesai untuk membuat akses user administrator dan user biasa. Selain login menggunakan mongo shell kita juga bisa menggunakan Mongo Compass untuk login
Untuk menghapus user, password dan role masuk ke database admin
dan jalankan perintah
db.dropUser("faqih")
Untuk menonaktifkan autentikasi masuk kembali ke VPS dan matikan parameter security
di file mongod.conf
dan jangan lupa restart MongoDB