Saya berjuang dengan ini bertahun-tahun yang lalu, jadi inilah jawaban yang saya harap saya miliki:
Secara umum, ini adalah hal yang terlalu rumit, dan jawaban utama untuk aplikasi dasar adalah:izin pengguna akan dikelola oleh kode PHP dalam panggilan API yang Anda buat, dan satu pengguna DB baik-baik saja. Semua pengguna harus menghindari interaksi langsung dengan DB untuk pengembangan aplikasi secara umum, untuk mencegah pelanggaran kesucian data.
Ada baiknya memikirkan keamanan dan batasan, tetapi kesederhanaan adalah raja - semakin rumit Anda membuatnya, semakin sulit untuk mempertahankannya, dan oleh karena itu semakin mudah untuk melewatkan kasus sudut.
Haruskah saya membuat pengguna database baru setiap kali saya mendaftarkan pengguna web baru?
Tidak, pengguna basis data dibedakan berdasarkan hak istimewa mereka. Akibatnya, semua pengguna menyesuaikan diri dengan sekumpulan grup dengan tingkat hak istimewa yang berbeda-beda. Akun basis data terpisah dari akun web - menghubungkan ke basis data dilakukan di belakang layar dan tidak memiliki tautan ke akun web yang digunakan.
Pendekatan yang baik adalah membuat akun DB untuk setiap layanan yang terhubung langsung ke DB. Untuk sebagian besar, ini akan menjadi satu layanan, server web Anda. Jika aplikasi tumbuh dan layanan terisolasi seperti audit, layanan mikro, keamanan, IoT muncul, mereka mungkin harus memiliki akun sendiri.
Apakah hak istimewa CRUD aman untuk diberikan kepada semua pengguna situs web?
Pertanyaannya salah arah - Anda memberikan CRUD ke akun DB, yang akan membutuhkannya. Untuk izin CRUD yang dikelola di dalam PHP, itu sangat tergantung pada aplikasi Anda dan titik akhir tertentu. Misalnya, Anda mungkin tidak ingin semua pengguna Anda dapat menghapus catatan Pengguna, jadi kode PHP Anda harus mencegah hal itu terjadi.
Berapa banyak jenis pengguna DB yang berbeda?
Jumlahnya tergantung pada database Anda. Secara umum, ada 4 grup
- Administrator Basis Data
- Desainer Basis Data
- Pengguna Akhir Biasa
- Pengguna Akhir Asli
Namun, jika Anda ingin memberikan hak istimewa tingkat tabel, maka Anda mungkin perlu sedikit lebih bercabang. Ini akan menyarankan 10 akun DB adalah jumlah yang cukup kecil, beberapa ratus lebih mungkin .
Semakin banyak hak istimewa, semakin banyak ruang yang dibutuhkan, tetapi ini merupakan pertimbangan yang cukup menit, dan tidak boleh memainkan peran besar dalam kinerja. Kompleksitas adalah masalah berikutnya - pikirkan baik-baik berapa banyak grup dan permutasi yang sebenarnya ingin Anda uji. Dalam kasus pertanyaan di atas, saya adalah pengembang hobi tunggal - satu akun sebagai DBA mungkin baik-baik saja. Jika ada beberapa pengguna yang mengakses DB secara langsung (mungkin sudah merupakan ide yang buruk untuk pengembangan aplikasi), maka mungkin bagi mereka dengan izin yang berbeda-beda.
Berbicara tentang izin tingkat tabel untuk aplikasi sederhana terlalu berlebihan!