Connection string adalah satu baris yang membawa kredensial, arah tujuan, dan seluruh kebijakan koneksi aplikasi Anda. Kesalahan kecil di baris ini — authSource yang salah, TLS yang tidak diwajibkan, atau kredensial yang tertinggal di repositori — berdampak langsung pada keamanan sistem. Chapter ini merakit connection string produksi potongan demi potongan, membahas parameter yang berpengaruh pada keamanan dan ketahanan, lalu menutup dengan daftar kesalahan yang paling sering terjadi beserta perbaikannya.
Peta materi Chapter ini:
- Anatomi connection string produksi lengkap.
- Parameter keamanan:
authSource,authMechanism,tls,retryWrites. - Parameter ketahanan: timeout,
appName, dan kumpulan opsi pool. - Kesalahan umum dan cara menghindarinya.
Anatomi Connection String Produksi #
Bentuk paling sederhana sudah kita kenal: mongodb://host:port. Versi produksi membawa lebih banyak komponen:
mongodb://pengguna:[email protected]:27017,prod-rs1.example.com:27017,prod-rs2.example.com:27017/aplikasi?authSource=admin&replicaSet=rs0&tls=true&tlsCAFile=/etc/ssl/ca-prod.pem&retryWrites=true&w=majority&appName=api-penjualanMari kita bedah komponen per komponen:
mongodb://: skema standar. Untuk Atlas dan DNS SRV, skemanyamongodb+srv://dan daftar host digantikan satu nama host; parameterreplicaSetdantls=truelalu disiratkan otomatis oleh hasil DNS.pengguna:YOUR_PASSWORD@: kredensial dengan pemisah titik dua. Karakter khusus pada password wajib di-percent-encode (misalnya@menjadi%40) — tanpa itu URI terpotong di karakter pertama dan koneksi gagal.- Daftar host: pada replica set, cantumkan minimal dua atau tiga anggota — driver otomatis menemukan topologi lengkap dan beralih saat primary berubah. Satu host saja berarti aplikasi buta terhadap anggota lain.
/aplikasi: database default untuk operasi tanpa nama database eksplisit; sekaligus tempat pencarian collection bila tidak ditentukan.- Bagian
?...: parameter koneksi dipisah&— gencet keamanan utama kita.
Parameter Keamanan Utama #
| Parameter | Peran | Catatan keamanan |
|---|---|---|
authSource | Database tempat user didefinisikan | User aplikasi biasanya di admin; salah nilai = kredensial selalu ditolak |
authMechanism | Mekanisme autentikasi | SCRAM-SHA-256 pilihan modern; biarkan kosong agar driver menegosiasikan |
tls=true | Wajibkan TLS | Ganti ssl=true warisan; di produksi jangan pernah nonaktif |
tlsCAFile | Berkas CA yang dipakai memverifikasi sertifikat server | Tanpa ini, driver memakai penyimpanan CA sistem; verifikasi tetap aktif |
tlsInsecure=true | Melonggarkan verifikasi sertifikat | HANYA untuk pengujian lokal — jangan pernah dipakai di produksi |
w=majority | Write concern default koneksi | Menuliskan data baru hanya setelah mayoritas anggota mengetahui |
Kombinasi tls=true tanpa tlsInsecure membuat driver memverifikasi identitas server melalui sertifikat; hostname pada sertifikat harus cocok dengan host yang dikoneksi. Kegagalan kecocokan ini adalah penyebab umum galat koneksi setelah TLS diaktifkan di lingkungan baru.
Parameter Ketahanan dan Observabilitas #
Connection string juga tempat menyetel perilaku saat kondisi sulit:
mongodb://pengguna:[email protected]:27017/aplikasi?authSource=admin&tls=true&retryWrites=true&retryReads=true&connectTimeoutMS=5000&serverSelectionTimeoutMS=10000&socketTimeoutMS=30000&maxPoolSize=50&appName=api-penjualanParameter yang perlu dikenali:
retryWrites=true: driver mengulang sekali operasi tulis idempoten yang gagal karena gangguan jaringan singkat — aktif secara default pada driver modern, dan aman karena MongoDB menandai ulang tulisan dengan nomor transaksi.- **`retryReads=true``: perilaku serupa untuk operasi baca.
connectTimeoutMS: batas waktu membuka satu koneksi TCP; nilai 5 detik cukup lazim agar kegagalan jaringan cepat terasa.serverSelectionTimeoutMS: batas waktu driver mencari server yang layak (misalnya primary yang dapat ditulis) sebelum melempar galat.socketTimeoutMS: batas waktu sebuah operasi pada koneksi terbuka — menjaga aplikasi tidak menggantung menunggu server yang tidak menjawab.maxPoolSize: batas koneksi per proses aplikasi (Chapter Connection Pooling membahas penyetelannya).appName: label yang muncul di log server dancurrentOp— penolong utama saat banyak layanan berbagi satu cluster.
Kesalahan Umum dan Perbaikannya #
| Kesalahan | Akibat | Perbaikan |
|---|---|---|
| Kredensial ditulis langsung di kode dan dikomit | Password bocor lewat repositori | Simpan di environment variable atau secret manager (Chapter Credential Management) |
authSource tidak dicantumkan padahal user ada di admin | Autentikasi selalu gagal tanpa sebab yang jelas | Cantumkan authSource=admin eksplisit |
tlsInsecure=true tertinggal dari masa pengembangan | Koneksi rentan penyusup di tengah jalan | Hapus di produksi; perbaiki sertifikat yang bermasalah |
Password mengandung @, :, / tanpa percent-encoding | URI terpotong, koneksi galat | Encode karakter khusus: @ → %40, : → %3A, / → %2F |
| Satu host saja pada replica set | Aplikasi mati saat node itu hidup ulang | Daftarkan minimal dua–tiga anggota replica set |
w=1 pada data penting | Kehilangan tulisan yang baru diakui satu node saat failover | Gunakan w=majority untuk data yang tidak boleh menghilang |
Rangkuman #
- Connection string produksi memuat kredensial, daftar host, database default, dan parameter kebijakan dalam satu URI — setiap komponen punya efek keamanan.
authSource,tls=true,tlsCAFile, danw=majorityadalah empat parameter keamanan inti;tlsInsecurehanya untuk pengujian lokal.- Parameter ketahanan (
retryWrites, berbagai timeout,maxPoolSize) menentukan perilaku aplikasi saat jaringan dan server sedang bermasalah. appNamememberi identitas pada koneksi Anda di log server — murah dipasang, mahal bila terlambat.- Hindari kesalahan klasik: kredensial di repositori,
authSourcesalah, encoding password yang terlewat, dan satu-satunya host yang dikoneksi.