Burada birkaç farklı sorunuz var, bu yüzden tek tek göndereceğim:
"Kullanıcıların doğrudan Windows Kimlik Doğrulaması'nı kullanarak sa girişini kullanmalarına izin vermemek için en iyi yöntem olduğunu okudum"
Burada iki şeyi karıştırıyorsunuz: SA kavramı ve SQL kimlik doğrulaması ve Windows kimlik doğrulaması kavramı.
SQL kimlik doğrulaması, her SQL Server'da depolanan kullanıcı adlarının ve şifrelerin bir listesidir. SQL'de depolanmış olması ilk sorun. Bir oturum açma şifresini değiştirmeniz gerekirse, her sunucuda değiştirmeniz (veya farklı sunucularda farklı şifreler bulundurmanız) gerekir. Windows kimlik doğrulaması ile girişleri merkezi olarak devre dışı bırakabilir, şifreleri değiştirebilir, politikaları belirleyebilir vb.
SQL kimlik doğrulaması kullanmayı seçerseniz, SA yalnızca bir SQL kimlik doğrulama girişidir. Varsayılan yönetici kullanıcı adı, tıpkı Yönetici'nin Windows kimlik doğrulamasında olduğu gibi. Bu durumda yerel süper güçlere sahip, ancak tüm durumlarda küresel süper güçlere sahip değil.
"... ve bu hesaplara (veya hesap gruplarına) sysadmin ayrıcalıklarına izin vermek."
Hangi kimlik doğrulama yöntemini seçerseniz seçin, ideal olarak en az ayrıcalık ilkesini takip etmek istersiniz: insanlara işlerini yapmalarını sağlamak için ihtiyaç duydukları asgari hakları verir ve daha fazlasını yapmazsınız.
Onları sadece girişler olarak düşünmeyin - onlar sizi kovabilecek insanlardır. Veritabanını düşürürler veya yanlışlıkla yedekleme işlerinizi devre dışı bırakırlarsa, kovulmayacaklar çünkü varsayılan olarak, SQL kimin yaptığını izlemiyor. Kovulacak olan sensin, çünkü olacak ve hangi kişinin yaptığını söyleyemeyeceksiniz.
"En iyi uygulama, SQL Server örneklerimin güvenliğini nasıl artırıyor?"
İki şey yapmak istiyorsun:
- İnsanların sunucuyu kırmasını önleme
- Sunucuyu kırdıklarında tam olarak kimin yaptığını tanımlayabilmek
Birincisi, en az ayrıcalık ilkesiyle gerçekleştirilir: insanlara yalnızca ihtiyaç duydukları izinleri vermek ve daha fazlasını yapmak.
İkincisi, herkese kendi giriş bilgilerini vererek, paylaşılan girişlere izin vermemek (herkesin aynı kullanıcı adını / şifreyi kullanmasına izin vermek gibi) ve ideal olarak girişleri denetleyerek başarılır. Muhtemelen bu son kısmı hemen yapmayacaksın, çünkü biraz acı verici, ama önce parçaları yerlerine koyalım, böylece birileri veritabanını bıraktıktan sonra daha sonra denetim ekleyebilirsin ve patronun nedenini bilmek istiyor.
Ne düşündüğünü biliyorum: "Ama uygulamaları kodluyoruz ve uygulamanın bir giriş yapması gerekiyor." Evet, uygulamaya kendi girişini verin ve geliştiricilerin bu şifreyi bilmesi gerekir, ancak bu giriş, aklı başında hiç kimsenin kullanmak istemediği izinlerden arındırılmalıdır. Örneğin, db_datareader ve db_datawriter rollerinde yalnız olması gerekebilir, başka bir şey yok. Bu şekilde veri ekleyebilir, güncelleyebilir, silebilir ve seçebilir, ancak şemaları değiştirebilir, dizinler ekleyemez, saklı yordamları değiştirebilir vb.
“Bu sadece üretim örnekleri için mi yoksa iç gelişim örnekleri için de geçerli mi?”
Sanırım bu, geliştirme durumlarına da uygulanacağını düşünüyorum çünkü genellikle insanların bir şeyleri kırmasından endişe ediyorum. İnsanlar sadece geliştirme aşamasında sunucuları kırmayı severler. Ve tabii ki, üretime geçirilecek değişikliklerin listesini bir araya getirme zamanı geldiğinde, uygulamanın belirli bir dizinin gerçekten hayati olup olmadığını ya da bazı bağların Veri Tabanı Ayarlama Danışmanını yönetip düzenlemediğini ve tüm değişiklikleri uyguladığını söylemeliyim. . Uygun izinler bu acıyı azaltmaya yardımcı olur.