Aplikasi yang saya gunakan berbasis server dan menggunakan satu akun basis data untuk banyak pengguna, dengan kode aplikasi mengendalikan apa yang dapat dilakukan pengguna, atau pengguna tunggal.
Apakah ada aplikasi bisnis yang kompleks yang berhasil di mana setiap orang membutuhkan akun basis datanya sendiri, dan server basis data diandalkan untuk menegakkan aturan kebijakan tentang apa yang harus diizinkan dan tidak boleh dilakukan oleh setiap pengguna?
Saya sedang memikirkan aplikasi di mana banyak orang berkontribusi pada informasi dalam satu basis data, dan dapat mengakses informasi yang disimpan oleh orang lain - misalnya kolega di sebuah organisasi yang semuanya perlu mengakses catatan pelanggan.
Apakah ada nama untuk jenis pengaturan ini?
Jawaban:
Jika Anda benar-benar perlu kontrol ketat diberlakukan di tingkat data. Misalnya audit ekstensif. Audit tidak terlalu baik jika beberapa pengguna berbagi akun yang sama. Jika Anda memiliki beberapa pengguna yang perlu mengakses database data secara langsung.
Jika keamanannya sangat ketat, Anda biasanya tidak mengekspos database secara langsung. Anda memiliki layanan dan klien harus mendapatkan data dari layanan.
Dalam aplikasi web, basis data (mis. Port 1433) biasanya tidak diekspos secara langsung sehingga Anda memiliki tingkat keamanan. Bahkan jika aplikasi web mengakses database secara langsung, pengguna masih tidak memiliki akses langsung ke database.
Jika login dan kata sandi ada di aplikasi klien maka itu dapat diretas. Jika domain Anda dapat menggunakan keamanan terintegrasi.
Pada database Anda dapat memiliki kontrol yang cukup bagus. Tetapi kontrol level baris sedikit bekerja. Database bukan alat yang baik untuk aturan bisnis. Aturan bisnis dan keamanan terperinci biasanya ditegakkan di tingkat aplikasi.
Anda dapat memiliki mode campuran di mana ada beberapa prosedur tersimpan yang digunakan oleh admin dan Anda ingin melacak admin mana. Dan Anda dapat memberikan akses hanya baca ke pengguna yang menghasilkan laporan secara langsung.
sumber
Tantangannya di sini adalah bahwa akses basis data Anda dikelola oleh abstraksi. Alih-alih pengguna yang terhubung sebagai diri mereka sendiri, mereka pada dasarnya mengambil identitas dari beberapa peran aplikasi umum. Anda tidak hanya kehilangan visibilitas dari koneksi individual, tetapi Anda juga kehilangan rincian mendefinisikan berbagai jenis akses untuk semua pengguna individu Anda.
Alasan utama untuk menggunakan pendekatan ini adalah kesederhanaan. Banyak aplikasi yang dirancang sehingga pengguna aplikasi tidak akan memiliki pengetahuan tentang database. Mereka benar-benar tidak membutuhkannya, terutama jika aplikasi mengelola keamanan internalnya sendiri. Sebagian besar pengguna individu tidak akan pernah terhubung ke database secara langsung, jadi tidak perlu mendefinisikan login yang eksplisit untuk mereka.
Satu-satunya waktu Anda harus mempertimbangkan untuk membiarkan database mengelola keamanan Anda adalah jika Anda memiliki pengguna yang akan terhubung langsung ke database Anda. Ini berarti mereka berkeliling aplikasi Anda dan itu tidak bisa lagi menegakkan keamanan sendiri. Keuntungannya di sini adalah Anda bisa lebih terperinci dalam mendefinisikan keamanan Anda. Kerugiannya adalah overhead yang lebih tinggi untuk mengelola pengguna dan izin mereka.
Jika Anda merasa perlu untuk akses semacam ini, Anda ingin menggunakan Kontrol Akses Berbasis Peran . Anda harus mendefinisikan peran berdasarkan pada jenis izin apa yang dibutuhkan dalam basis data Anda dan kemudian mengelompokkan pengguna secara individu di bawah peran tersebut. Ini memberi Anda audit dan kontrol yang lebih baik atas model keamanan Anda, yang dapat dengan cepat lepas kendali ketika mengelola akses langsung.
Ada pendekatan hybrid untuk ini. Jika Anda ingin keamanan Anda sebagian dirusak oleh database, Anda dapat membuat beberapa pengguna aplikasi, masing-masing ditentukan oleh peran mereka dan memberikan akses secara eksplisit kepada para pengguna berdasarkan peran yang mereka penuhi. Ini berarti Anda dapat memanfaatkan mesin basis data untuk beberapa model keamanan Anda, tetapi Anda masih harus memiliki beberapa manajemen dalam aplikasi. Ini meningkatkan kompleksitas model pengguna aplikasi, tetapi memberi Anda rincian yang lebih baik pada berbagai login yang digunakan.
sumber
Anda harus mulai menegakkan keamanan di tingkat paling granular sesegera mungkin. Peran membantu dalam hal ini - memberi orang akses ke sejumlah tabel sekaligus bukanlah mimpi buruk.
Akun tunggal untuk semua orang adalah sumber pertanyaan di sini dan di tempat lain - "catatan x telah dihapus, bagaimana cara mencari tahu siapa yang melakukannya?" - jawabannya adalah Anda tidak dapat - tanpa akun individual dan audit .
Maksud saya dengan "mengaudit" Maksud saya, meski memiliki akun untuk semua orang, itu tidak berarti Anda memiliki keamanan sejati. Jika, katakanlah, catatan di tabel HR dihapus, yang bisa Anda katakan adalah seseorang yang memiliki akses ke tabel HR melakukan itu - itu adalah x jumlah orang.
Anda perlu pemicu di sistem Anda yang mencatat tindakan untuk dapat melacak ke tingkat individu yang melakukan tindakan X (kecuali Anda memiliki RDBMS seperti Oracle di mana ini dapat dibuat otomatis).
Dalam hal apa pun, Anda harus selalu membuat keamanan Anda sedetail mungkin sesegera mungkin - memberikan orang akses ke tabel hanya atas dasar "perlu tahu". Dan, selalu sertakan stempel waktu untuk tindakan ke tabel - orang sering memberikan id mereka kepada orang lain - jika Anda dapat mengatakan, "Jimmy, Anda adalah satu-satunya di kantor pada pukul 17:49 ..." - sekali lagi, itu bukan ironclad, hanya panah lain di bergetar Anda.
Mungkin jika Anda memberi kami RDBMS Anda, Anda bisa mendapatkan saran yang lebih spesifik / relevan dengan situasi Anda?
sumber
Ya itu. Menghubungkan ke database dari suatu aplikasi sebagai satu-satunya pengguna yang kuat adalah pelanggaran prinsip privilege paling rendah . Ini adalah akar penyebab dari sebagian besar serangan SQL Injection.
Ini biasanya dilakukan karena ketidaktahuan, demi kesederhanaan, atau kadang-kadang untuk kinerja.
Database seringkali berumur panjang dan digunakan oleh banyak aplikasi pada saat yang bersamaan, dan seiring waktu. Anda dapat menghemat sumber daya dengan memusatkan kontrol akses dalam database alih-alih melalui beberapa aplikasi.
Anda ingin memilih server db yang mendukung Keamanan Baris, Keamanan Kolom, dan Otentikasi Peniruan / Proksi (yang mendukung pengguna db nyata + kumpulan koneksi)
Itu juga akan lebih aman untuk aplikasi berbasis "plugin", seperti Wordpress, di mana sulit untuk menghindari suntikan SQL karena pembuat plugin tidak terampil. Setiap plugin mendapat login db, bukan aplikasi secara keseluruhan.
sumber