Policy-Based Management SQL Server 2008 ile gelen bir özelliktir. Bu özellik hem Enterprise hem de Standard SQL Server Sürümlerinde kullanılabilir. Policy Based Management (PBM), SQL Server tarafından sunulan bir yönetim çerçevesidir. Sunucu veya veritabanı yapılandırmalarını kontrol etmek için kullanılır. Bu özellik, belirli politikalar belirleyerek SQL Server ortamını izlemeyi ve yönetmeyi sağlar. PBM ile veritabanı yöneticileri, sistemdeki çeşitli bileşenlerin belirli kurallar ve koşullara uygun olup olmadığını doğrulayabilir ve gerekli durumlarda bu kuralların ihlalini önlemek için tedbirler alabilirler.
Policy Based Management Instance altında bulunan Management sekmesi altında bulunmaktadır.

Policy Based Management altında bulunan kavramların ne olduğuna değinelim.
Facet: SQL Server’ın farklı yapı taşlarını temsil eder ve her bir facet, belirli bir sunucu veya veritabanı özelliğini yönetmek için kullanılır. SQL Server’da 74’ten fazla model vardır ve her modelin bir veya daha fazla özelliği vardır. Aşağıdaki resimde listelenen facet’ler, SQL Server’da yönetilebilecek alanları göstermektedir.
Bu facet’ler, sistemdeki yapılandırmaları izlemek, belirli politikalar tanımlamak ve sunucuyu bu politikalara göre yönetmek amacıyla kullanılır. İlgili Facet üzerine çift tıklayarak ne gibi özellikleri olduğunu gözlemleyebiliriz.

Genellikle kullanılan facet kavramların ne olduğuna değinelim.
1. Application Role: Uygulama rollerini yönetmek ve güvenlik yapılandırmalarını kontrol etmek için kullanılır.
2. Asymmetric Key: Asimetrik anahtarları yönetmek için kullanılır. Bu anahtarlar, şifreleme ve dijital imza gibi güvenlik operasyonları için kullanılır.
3. Audit : Sunucudaki denetim günlüklerinin ayarlanması ve izlenmesi için kullanılır. SQL Server Audit, güvenlik açısından önemli olayları izler.
4. Availability Database : AlwaysOn kullanılabilirlik gruplarındaki veritabanları için yönetim işlemlerini yapmanızı sağlar.
5. Availability Group : AlwaysOn gruplarını yönetmek ve yapılandırmak için kullanılır.
6. Availability Group State : AlwaysOn gruplarının durumu hakkında bilgi verir.
7. Availability Replica : Availability Group replikalarını yönetmek için kullanılır. Bu replikalar, bir veya daha fazla veri merkezi arasında veri yedekliği sağlamak için kullanılır.
8. Backup Device : Yedekleme cihazlarını yönetir. Yedekleme işlemleri için kullanılan fiziksel veya mantıksal cihazlardır.
9. Data File : Veritabanı dosyalarının yönetimi için kullanılır. Veritabanının fiziksel veri dosyaları burada kontrol edilir.
10. Database : SQL Server’daki veritabanlarını genel olarak yönetir. Veritabanı ayarları ve yapılandırmaları bu facet altında yapılır.
11 Database Audit Specification : Veritabanı denetim spesifikasyonlarını yönetir. Hangi olayların denetleneceğini belirler.
12. Database Maintenance : Veritabanı bakım işlemleri için kullanılır. Bakım planları, yedekleme ve indeks yeniden oluşturma gibi görevleri içerir.
13. Database Options : Veritabanının seçeneklerini ve ayarlarını yönetir. Örneğin, otomatik büyüme ve kurtarma modeli gibi seçenekler.
14. Database Performance : Veritabanının performansıyla ilgili ayarları ve yapılandırmaları kontrol eder.
15. Database Replica State : AlwaysOn replikalarının durumlarını ve sağlık bilgilerini yönetir ve görüntüler.
16. Database Role : SQL Server veritabanı içindeki rollerin yönetimi için kullanılır. Rollerin güvenlik ve yetkilendirme ayarları bu facet’ten yapılır.
17. Database Security : Veritabanı güvenliğiyle ilgili ayarları kontrol eder. Kullanıcı izinleri ve güvenlik denetimleri burada yapılır.
18. Default : Varsayılan ayarları ve değerleri temsil eden facet’tir.
19. Endpoint : SQL Server’daki bağlantı uç noktalarını yönetir. Endpoints, veritabanı ile istemciler veya diğer sunucular arasındaki iletişimi yönetir.
20. Filegroup : Veritabanı dosyalarının gruplar halinde yönetimi için kullanılır. Büyük veritabanlarında performans ve yönetim açısından dosyalar gruplandırılabilir.
21. Index : Veritabanı indekslerini yönetir. İndeksler, veritabanı sorgularının performansını iyileştirmek için kullanılır.
22. Linked Server : Bağlantılı sunucuları yönetir. SQL Server’dan diğer veritabanı sunucularına bağlanmayı sağlar.
23. Log File : Veritabanı log dosyalarının yönetimi için kullanılır. Transaction log dosyalarının büyüklüğünü ve performansını kontrol eder.
24. Login : Sunucu düzeyinde giriş bilgilerini yönetir. Bu facet ile kullanıcılar SQL Server’a giriş yapabilir.
25. Login Options : SQL Server’a giriş yapan kullanıcılar için seçenekleri yönetir. Kullanıcıların oturum açma ayarları buradan kontrol edilebilir.
26. Partition Function : Veritabanı bölümleri için kullanılan bölme fonksiyonlarını yönetir. Bu fonksiyonlar, verilerin nasıl bölümleneceğini belirler.
27. Partition Scheme : Veritabanı bölümleri için şemaları yönetir. Bölümlenmiş tabloların ve indekslerin fiziksel depolanmasını tanımlar.
28. Plan Guide : SQL Server’ın sorgu yürütme planlarını yönetmek için kullanılır. Sorguların performansını optimize etmek amacıyla kullanılır.
29. Server : SQL Server’ın genel sunucu ayarlarını ve yapılandırmalarını yönetir.
30. Server Audit : Sunucu düzeyindeki denetimleri yönetir. SQL Server denetim kayıtlarını oluşturmak ve izlemek için kullanılır.
31. Server Audit Specification : Sunucu denetimi için spesifikasyonları yönetir. Hangi sunucu olaylarının denetleneceğini belirler.
32. Server Configuration : SQL Server sunucusunun genel yapılandırma ayarlarını yönetir.
33. Server Performance : SQL Server sunucu performansını izlemek ve yönetmek için kullanılır.
34. Server Role : Sunucu düzeyindeki güvenlik rollerini yönetir. Sunucudaki kullanıcıların yetkilendirme seviyeleri bu facet üzerinden düzenlenir.
35. Server Settings : SQL Server’ın genel ayarlarını ve seçeneklerini yönetir. Sunucu yapılandırmalarının genel kontrolü buradan sağlanır.
36. Statistic : İstatistikleri yönetir. SQL Server’daki sorgu performansını iyileştirmek için veritabanı istatistiklerini kullanır.
37. Table : Veritabanındaki tabloları yönetir. Tablolar, verilerin saklandığı temel yapılar olarak işlev görür.
Condition:
Yukarıda tanımlanan Facet’ların alt koşullarının sağlanıp sağlanmadığını kontrol etmektedir. Yapacağımız örneklerde ilgili Facet’ı seçtikten sonra Condition bölümü karşımıza çıkmaktadır.
İlgili Facet seçildikten sonra Facet özelliğiyle uyumlu koşullar önümüze gelmektedir.
Yukarıdaki açıklamalardan sonra örnekler üzerinde işlemlerimizi anlamaya çalışalım. Aşağıdaki örnekte sadece Login Facet belirleyip bir örnek üzerinden diğer koşullarıda belirtmiş olacağız.
Aşağıda yapacağımız örnekte Login ile ilgili ne gibi konfigürasyonlar yapabiliriz bu konuya değinelim.
İşlemlerimize başlayalım. İnstance altında bulunan Management > Policy Management > Policies sekmelerinden New Policy diyoruz.

Gelen ekranda oluşturacağımız Policy’e bir isim vermek gerekiyor. Daha sonra Check Condition kısmında bir Condition oluşturmamız gerekiyor. İlgili bölümde New Condition’a tıklıyoruz.

Gelen ekranda Condition’a bir isim vermek gerekiyor. Login kontrol yapacağımız için Login Facet seçiyorum.

Expression kısmında bulunan …’ya tıklayarak Login facet’ın içerisinde bulunan Field’ları seçebiliriz.

Field ekranında dikkat edersek Login altında tüm kontrol işlemlerimizi yapabiliriz. Bu makalede A loginin Windows, active directory ve sql tarafında oluşturulan loginlerin parola politikalarını kullanıp kullanmadığını öğrenmiş olacağız.
Expression kısmında … ‘ya tıklayarak Login facet’ının alt özelliği olan @PasswordPolicyEnforced ‘ı, @PasswordExpirationEnabled’ı ve @Name alanı ile istediğimiz veritabanını seçerek True olmasını gerektiğini aşağıdaki şekilde belirtiyoruz. Bu ifade ile parola politikası kullanmıyorsa hata mesajı almış olacağız.
İlgili Field’ları belirttikten sonra OK deyip başlangıç ekranına geliyorum.

Yukarıdaki adımlardan sonra gelen ekranda Evaluation Mode kısmından On Schedule’ı seçerek policy’in hangi zaman diliminde çalışacağını belirliyoruz. On Demand’ı seçersek, Manuel bir şekilde policy’i çalıştırmak gerekir.
On Schedule seçimini yapıp yeni bir Schedule oluşturuyoruz. Ya da Pick kısmında önceden oluşturulmuş bir Schedule’ı seçebiliriz.

Pick kısmına tıkladığımızda önceki oluşturulmuş olan zamanları görebiliriz.

Server restriction kısmında server bazında bir koşulunuz varsa server bazında bir condition oluşturarak koşulunuzun kontrolünü yapabilirsiniz. Bunun için Server restriction kısmında yeni bir condition oluşturabiliriz.

Yukarıdaki tüm işlemleri tamamladıktan sonra OK butonuna basıp işlemleri sonlandırıyorum.

Bu ifadeyi belirttikten sonra OK deyip başlangıç ekranına geliyorum.


Yukarıdaki ekranda Details kısmında View sekmesine tıkladığımızda gelen ekranda neden başarılı olduğunu veya hata aldığını görebiliriz.


Genellikle Name alanı policy işlemlerinde kullanılmaz. Ama yukarıdaki örnekte denemiş olduk.
Policy’den hata aldığımız için instance’ın yanında mektuba benzeyen bir kutucuğun üstünde kırmızı renkli x işareti çıkıyor. Bunun sebebi instance üzerinde tanımlı olan ve hatalı biten bir policy’nin var olduğunun sql server’ın bize bildirmek istemesi. Bu işareti gördüğünüzde tanımlı policy’lere bakıp gerekliliklerini yerine getirmeniz gerekir.

Şimdi Policy’de hata veren versionları düzelttikten sonra x işaretin kaybolduğunu gözlemleyeceğiz.

Not: Herhangi bir login facet oluşturduktan sonra istediğimiz kimlik doğrulama yöntemini görebiliriz. Every kısmında New condition.. dedikten sonra hangi login türü seçmesini istediğimiz yeni bir facet seçiyoruz.

Gelen ekran login facet’ımızı seçtikten sonra hangi login türümüzü kontrol etmek istiyorsak onu çalıştırıyoruz. Burada ilk başta ana conditions’umuz çalıştırılır daha sonra alt koşulla filtreleme yapılır.

Bu makalede Policy Based Management yöntemiyle login’lerde Parola kontrolü nasıl yapılır değinmiş olduk. Başka bir makalede görüşmek dileğiyle.
“İnkâr eden ve âyetlerimizi yalanlayanlara gelince, işte onlar cehennem ehlidirler. Orada ebedi kalacaklardır. Ne kötü gidilecek yerdir orası!” Teğabun-10