Bazen bir web uygulaması için kullanıcı şifrelerinin nasıl güvenli bir şekilde saklanacağını soran sorular görüyorum (RDBMS kullanarak Facebook veya Twitter'dan bahsetmiyorum). Genel cevap "şifreyi tuzlayın, ardından TDES veya SHA512 gibi güçlü bir algoritma ile karıştırın".
Benim sorum: RDBMS kullanıcısı olarak, çoğu motorda yerleşik bir kimlik doğrulama mekanizması bulunduğundan, neden sorunlu parola depolamayı hiç rahatsız etmeyeyim.
Örneğin, bazı X kullanıcıları web uygulamamda bir hesap kullanıcı şifresi Y oluşturmak istiyorsa, aşağıdaki sorguyu yanlış verme yöntemi:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Sonra benim uygulama içinde, kullanıcı kendi kimlik bilgilerini kullanarak veritabanına bir bağlantı açabilir ve tüm şifre yönetimi rahatsız etmiyorum.
Bu yöntemin birçok avantajı görüyorum:
- RDBMS, şifreleme algoritmasının değiştirilmesi gerektiğine karar verirse, yalnızca güvenlik güncelleştirmelerini uygulamak için hiçbir şeye dokunmam gerekmiyor;
- Kullanıcıların yetkilerini yönetmek benim için kolaydır. Bir kullanıcı bir yöneticinin rolüne yükseltilirse, kullanıcıyı ilgili gruba eklemem gerekir;
- SQL enjeksiyonları artık anlamsızdır, çünkü veritabanındaki her kullanıcıya tam olarak izin vermek istediğim izinleri yönetiyorum (örneğin, SO gibi bir forumda, yeni yayınlar ekleme, yayınlara cevap verme, yorum yapma ve kendi sorularını düzenleme / silme) / cevaplar / yorum);
- Uygulamama kimliği doğrulanmamış bağlantılar için "anonim" kullanıcı hesabı kullanılabilir;
- Her kullanıcı, sağladığı verilerin sahibidir.
Ancak bu konuda gördüğüm hemen hemen her soruda, işlerin yapılması gereken yolun bu olmadığı konusunda genel bir fikir birliği var gibi görünüyor. Sorum şu: neden?
Not: Üçüncü nokta tarafından izin verilen politikaları PostgreSQL ve güvenlik politikaları Microsoft SQL Server. Bu kavramların yeni gelenler olduğunun farkındayım, ama yine de, şimdi buradalar, açıkladığım teknik neden kullanıcı hesaplarını işlemek için standart bir yol haline gelmiyor?