Yaklaşık 10 yıldır SQL Server veri depolarıyla çeşitli şirket içi masaüstü istemci uygulamaları üzerinde çalıştım. Nadiren bu projelere başladım - çoğu devralma işi.
Her yerde sabit görünen bir şey, bu uygulamanın ortak veritabanına izin veren tek bir global SQL Server kullanıcı hesabı olmasıydı ve evet, bazı naif durumlarda sa
, genellikle mümkün olduğunda düzeltmeye çalıştığım kullanıcı hesabını kullandı. .
Uygulamanın veritabanına erişmek için kullandığı bu kullanıcı adını ve şifreyi gerçekten etkili bir şekilde gizleyemezsiniz. Genellikle bir dosyada ini
veya config
dosyada saklanırlar veya büyük olasılıkla yürütülebilir dosyada pişirilirler. Her durumda, biraz kazma yaparlarsa kullanıcı tarafından görülebilirler. Bir durumda aslında bir config
dosya kullandık ama şifreledik, ancak elbette şifreleme anahtarının yürütülebilir dosyada saklanması gerekiyordu (bunun sınırlamalarına naif değildik, ancak insanların yeterince bilgili olanları alay etmesini etkili bir şekilde durdurdu. config
dosyalara bakmak için ).
Tüm bu sistemlerin uygulamada yerleşik bir kullanıcı kimlik doğrulama sistemi vardı, ancak elbette hepsi uygulamanın kendisi aracılığıyla yönetildi, yani kullanıcı bilgileri veritabanında saklandı. Uygulama, erişim seviyenize bağlı olarak yapabileceğiniz şeyleri kısıtladı, ancak veritabanına bağlanıp geçici sorgular çalıştırabiliyorsanız her şey tartışmalı.
Bu sorunun üstesinden gelmek için diğer sistemlerin ne yaptığını bilmek istiyorum. İşte bildiğim seçenekler:
- Bir kullanıcı ve roller listesini korumak için SQL Server'ın güvenlik mekanizmasını kullanın ve masaüstü uygulamasının T-SQL sorguları aracılığıyla kullanıcı ekleyip kaldırmasını sağlayın.
- Doğrudan veritabanına bağlanmak yerine, sunucuda çalışan bir tür web hizmeti oluşturun ve kimlik doğrulama mantığını buraya yerleştirin. Her isteğin güvenlik doğrulaması yapmasını sağlayın.
İlk seçenekler biraz çirkin, çünkü kullanıcıları veritabanından ayırıyorsunuz, böylece kullanıcılar artık birinci sınıf varlıklar değil ve yabancı anahtar ilişkileriyle referans veremezsiniz.
İkincisi, büyük bir performans sorunu ve çok fazla iş gibi görünüyor, ayrıca NHibernate gibi ORM haritacılarını kolayca kullanamazsınız (sanırım).
Herkes bu konuda deneyim var mı? En iyi uygulamalar?
Düzenle
Biraz daha düşünmek, SQL Server Kimlik Doğrulaması aslında bu sorunu çözebilir mi? Örneğin, kullanıcı size zaman çizelgesi düzenleyebilmek için takıp güncelleme zaman çizelgesi kayıtları gerekir, sen okuma ve yazma anlam SQL server zaman çizelgesi detayları tablodaki diğer satırları erişimine izin vermeyebilir yolu yok başka çok insanların zaman çizelgeleri.