Saya sesekali melihat pertanyaan yang menanyakan cara menyimpan kata sandi pengguna dengan aman untuk aplikasi web (menggunakan RDBMS, saya tidak berbicara tentang Facebook atau Twitter). Jawaban yang biasa adalah "garam kata sandi, lalu hash dengan algoritma yang kuat seperti TDES atau SHA512".
Pertanyaan saya adalah: Sebagai pengguna RDBMS, mengapa saya harus repot-repot sama sekali dengan menyimpan kata sandi yang bermasalah karena sebagian besar mesin memiliki mekanisme otentikasi bawaan.
Misalnya, jika beberapa pengguna X ingin membuat kata sandi pengguna akun Y di aplikasi web saya, bagaimana cara mengeluarkan kueri berikut:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Kemudian dalam aplikasi saya, pengguna dapat membuka koneksi ke database menggunakan kredensial dan saya tidak perlu repot sama sekali dengan manajemen kata sandi.
Saya melihat banyak keuntungan dari metode ini:
- Jika RDBMS memutuskan bahwa algoritma enkripsi perlu diubah, saya tidak perlu menyentuh apa pun, hanya untuk menerapkan pembaruan keamanan;
- Mudah bagi saya untuk mengelola otorisasi pengguna. Jika pengguna dipromosikan ke peran administrator, saya hanya perlu menambahkan pengguna ke grup yang sesuai;
- Suntikan SQL sekarang tidak ada artinya, karena saya mengelola izin untuk memungkinkan apa yang ingin saya izinkan untuk setiap pengguna dalam database (misalnya, dalam forum seperti SO, menambahkan posting baru, menjawab posting, berkomentar dan mengedit / menghapus pertanyaannya sendiri / jawaban / komentar);
- Akun pengguna "anonim" dapat digunakan untuk koneksi yang tidak diautentikasi ke aplikasi saya;
- Setiap pengguna adalah pemilik data yang diberikannya.
Tetapi pada hampir setiap pertanyaan yang saya lihat pada topik ini, tampaknya ada konsensus umum bahwa ini bukan cara yang harus dilakukan. Pertanyaan saya adalah: mengapa?
Catatan: Poin ketiga diizinkan oleh kebijakan di PostgreSQL, dan kebijakan keamanan di Microsoft SQL Server. Saya menyadari bahwa konsep-konsep ini adalah pendatang baru, tetapi bagaimanapun, sekarang mereka ada di sini, mengapa teknik yang saya gambarkan tidak menjadi cara standar untuk menangani akun pengguna?