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:

text
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-penjualan

Mari kita bedah komponen per komponen:

  1. mongodb://: skema standar. Untuk Atlas dan DNS SRV, skemanya mongodb+srv:// dan daftar host digantikan satu nama host; parameter replicaSet dan tls=true lalu disiratkan otomatis oleh hasil DNS.
  2. 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.
  3. 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.
  4. /aplikasi: database default untuk operasi tanpa nama database eksplisit; sekaligus tempat pencarian collection bila tidak ditentukan.
  5. Bagian ?...: parameter koneksi dipisah & — gencet keamanan utama kita.

Parameter Keamanan Utama #

ParameterPeranCatatan keamanan
authSourceDatabase tempat user didefinisikanUser aplikasi biasanya di admin; salah nilai = kredensial selalu ditolak
authMechanismMekanisme autentikasiSCRAM-SHA-256 pilihan modern; biarkan kosong agar driver menegosiasikan
tls=trueWajibkan TLSGanti ssl=true warisan; di produksi jangan pernah nonaktif
tlsCAFileBerkas CA yang dipakai memverifikasi sertifikat serverTanpa ini, driver memakai penyimpanan CA sistem; verifikasi tetap aktif
tlsInsecure=trueMelonggarkan verifikasi sertifikatHANYA untuk pengujian lokal — jangan pernah dipakai di produksi
w=majorityWrite concern default koneksiMenuliskan 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:

text
mongodb://pengguna:[email protected]:27017/aplikasi?authSource=admin&tls=true&retryWrites=true&retryReads=true&connectTimeoutMS=5000&serverSelectionTimeoutMS=10000&socketTimeoutMS=30000&maxPoolSize=50&appName=api-penjualan

Parameter yang perlu dikenali:

  1. 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.
  2. **`retryReads=true``: perilaku serupa untuk operasi baca.
  3. connectTimeoutMS: batas waktu membuka satu koneksi TCP; nilai 5 detik cukup lazim agar kegagalan jaringan cepat terasa.
  4. serverSelectionTimeoutMS: batas waktu driver mencari server yang layak (misalnya primary yang dapat ditulis) sebelum melempar galat.
  5. socketTimeoutMS: batas waktu sebuah operasi pada koneksi terbuka — menjaga aplikasi tidak menggantung menunggu server yang tidak menjawab.
  6. maxPoolSize: batas koneksi per proses aplikasi (Chapter Connection Pooling membahas penyetelannya).
  7. appName: label yang muncul di log server dan currentOp — penolong utama saat banyak layanan berbagi satu cluster.

Kesalahan Umum dan Perbaikannya #

KesalahanAkibatPerbaikan
Kredensial ditulis langsung di kode dan dikomitPassword bocor lewat repositoriSimpan di environment variable atau secret manager (Chapter Credential Management)
authSource tidak dicantumkan padahal user ada di adminAutentikasi selalu gagal tanpa sebab yang jelasCantumkan authSource=admin eksplisit
tlsInsecure=true tertinggal dari masa pengembanganKoneksi rentan penyusup di tengah jalanHapus di produksi; perbaiki sertifikat yang bermasalah
Password mengandung @, :, / tanpa percent-encodingURI terpotong, koneksi galatEncode karakter khusus: @ → %40, : → %3A, / → %2F
Satu host saja pada replica setAplikasi mati saat node itu hidup ulangDaftarkan minimal dua–tiga anggota replica set
w=1 pada data pentingKehilangan tulisan yang baru diakui satu node saat failoverGunakan 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, dan w=majority adalah empat parameter keamanan inti; tlsInsecure hanya untuk pengujian lokal.
  • Parameter ketahanan (retryWrites, berbagai timeout, maxPoolSize) menentukan perilaku aplikasi saat jaringan dan server sedang bermasalah.
  • appName memberi identitas pada koneksi Anda di log server — murah dipasang, mahal bila terlambat.
  • Hindari kesalahan klasik: kredensial di repositori, authSource salah, encoding password yang terlewat, dan satu-satunya host yang dikoneksi.