Seseorang mengusulkan memberikan login PostgreSQL kepada pelanggan agar klaim biaya berjalan terenkripsi dari ujung ke ujung. Administrator basis data membutuhkan sesi SQL sungguhan, dan orang lain mengusulkan formulir web sebagai gantinya. Kedua usulan memecahkan masalah yang salah, karena tidak ada yang dimulai dari operasi yang benar-benar dijalankan klien. Lalui ketiga keputusan itu berurutan dan pertanyaan apakah TLS dapat menggantikan VPN akan terjawab sendiri.

Mulai dari operasi yang dibutuhkan klien

Tuliskan apa yang harus dicapai klien. Mengirim klaim, membaca satu baris laporan, dan menjalankan kueri sewaktu-waktu adalah tiga operasi berbeda dengan tiga profil risiko berbeda.

Lalu tuliskan siapa yang membuat permintaan. Pelanggan, agen dukungan, dan administrator tidak dapat dipertukarkan meskipun mereka menyentuh tabel yang sama. Perbedaannya menentukan seberapa banyak bahasa kueri yang seharusnya pernah dilihat klien.

Pasangan jawaban itu menentukan antarmuka. Semua setelahnya adalah implementasi, dan sebagian besar perdebatan tentang enkripsi sebenarnya perdebatan tentang antarmuka mana yang dipilih.

Tiga kendali, tiga keputusan

TLS terautentikasi melindungi koneksi dan menentukan identitas TLS mana yang diterima. Masuk jaringan menentukan sumber mana yang boleh mencapai pendengar. Otorisasi basis data menentukan objek dan tindakan mana yang boleh digunakan suatu peran.

Tidak satu pun dari ketiganya menggantikan yang lain, seperti yang dinyatakan tabel secara gamblang.

ControlWhat it decidesWhat it leaves open
Authenticated TLSConnection protection and which TLS identities are acceptedWhich tables a database user may touch
Restricted network entryWhich sources reach the listenerWhether an authenticated user should run a given statement
Database authorizationWhich objects and actions a role may useWhether the connection arrived by an approved path

Bacalah baris yang Anda andalkan sebelum menghapus baris lain. Sebagian besar desain ini gagal karena suatu kendali diasumsikan alih-alih dikonfigurasi.

SQL langsung membiarkan kebijakan basis data tetap bertanggung jawab

Dengan koneksi langsung yang disetujui, pertahankan verifikasi identitas layanan dan kebijakan akses yang dimaksudkan. Menyalakan TLS membuat koneksi terenkripsi tersedia; ia tidak menolak koneksi tak terenkripsi kecuali konfigurasi akses menyatakannya melalui entri hostssl.

Perbedaan itu layak diperiksa di konfigurasi yang berjalan, bukan di templat. Server yang menawarkan TLS dan menerima teks polos bukanlah desain yang dianggap sebagian besar orang telah mereka terapkan. Bacalah aturan akses dan lihat entri mana yang benar-benar mewajibkannya. Satu pemeriksaan itu memisahkan server yang mampu mengenkripsi dari server yang hanya terenkripsi.

Gunakan peran hanya dengan hak istimewa yang dibutuhkan pekerjaan, dan tinjau kepemilikan, keanggotaan warisan, serta izin yang diberikan secara luas. Model hak istimewa PostgreSQL adalah batas kewenangan untuk objek basis data.

VPN dapat membatasi perangkat mana yang mencapai layanan sebelum autentikasi basis data terjadi, dan gerbang akses dapat melakukan hal serupa. Keduanya tidak menghilangkan kebutuhan untuk memelihara komponen yang terekspos, mengelola kredensial, dan membatasi penggunaan sumber daya.

Sertifikat klien adalah kredensial, bukan ACL

Sertifikat klien dapat menambahkan syarat pada saat koneksi. Pengaturan clientcert dapat menuntut sertifikat tepercaya dan, dalam mode yang lebih ketat, hubungan antara nama sertifikat dan pengguna basis data.

Itu kredensial yang lebih kuat. Ini bukan daftar otorisasi, dan tidak membuat server tak terlihat, karena komponen yang menerima koneksi tetap memproses lalu lintas jaringan dan jabat tangan. Memperlakukan sertifikat sebagai daftar akses membiarkan izin sebenarnya tak tersentuh. Ini juga cenderung memperlebar distribusi sertifikat, yang menimbulkan masalah berikutnya.

Sertifikat kuat yang melekat pada peran dengan hak berlebih menghasilkan administrator yang terautentikasi dengan baik. Periksa perannya sebelum merayakan sertifikat itu.

Pilih antarmuka yang lebih sempit bila cocok

Untuk klaim biaya, titik akhir aplikasi yang menerima klaim, menegakkan aturan bisnis, dan mengembalikan hasil yang diizinkan bagi pengguna itu mewakili operasi tersebut lebih baik daripada akun SQL umum.

Aplikasi kemudian memakai identitas basis datanya sendiri yang terbatas, dan pelanggan tidak pernah menerima bahasa kueri sebagai fitur. Itu permukaan yang lebih kecil dengan lebih sedikit cara untuk salah.

Ini pilihan desain, bukan klaim bahwa kode aplikasi otomatis lebih aman. Kode itu harus mengautentikasi pemanggilnya, mengotorisasi setiap tindakan, dan memvalidasi masukannya, dan izin basis datanya sendiri tetap penting.

SQL langsung tetap benar bagi orang dan alat yang pekerjaannya yang disetujui memerlukannya. Batasi desain itu dengan peran, cakupan jaringan, dan batas operasional, dan biarkan klien lain mempertahankan antarmuka yang lebih sempit. Mencampur kedua populasi dalam satu peran adalah tempat perdebatan dimulai.

Artikel terkait