Policy-Based Management(Stored Procedure İsim Kontrolü-Stored Procedure Facet)

26 Eyl by NURULLAH ÇAKIR

Policy-Based Management(Stored Procedure İsim Kontrolü-Stored Procedure Facet)

Policy-Based Management SQL Server 2008 ile gelen bir özelliktir. Sistemlerimizde istediğimiz kuralları koymamıza, standartlarımızı belirlememize ve kontrollerimizi otomatik olarak yapmamıza olanak sağlar. Örneğin stored procedure’lerimizin isimlerinin rakam ile başlamaması ya da veritabanı recovery modellerinin simple olmaması için kontrol amaçlı olarak policy oluşturabiliriz.

 

Policy Based Management(PBM)’ı kavramak için bazı kavramları anlamanız gerekir.

Facet: PBM tarafından yönetilebilen bir özelliktir. Örneğin Stored Procedure isminde bir facet vardır. Ve bu facet’ı kullanarak stored procedure isimlerindeki karakterleri kontrol eden bir policy oluşturabilirsiniz.

 

Tüm facet’ların listesine aşağıdaki gibi SSMS üzerinden erişebilirsiniz. Facet detayı için üzerine çift tıklamalısınız.

 

 

Condition: ilgili facet’ların alt özelliklerinin belirlenen koşulu sağlayıp sağlamadığını kontrol eder. Örneğin Stored Procedure facet’ının Name alt özelliğinde istemediğiniz bir karakter olup olmadığını kontrol edebilirsiniz.

 

 

 

Stored Procedure isimlerinde istemediğimiz karakterler olup olmadığını kontrol etmek için bir policy oluşturalım.

 

Aşağıdaki gibi Management > Policy Management > Policies sekmelerinden New Policy diyoruz.

 

 

Karşımıza çıkan ekranda Policy’e bir isim veriyoruz ve Check Condition kısmından bir condition oluşturmamız gerekiyor.

 

New Condition’a tıklıyoruz.

 

 

Karşımıza çıkan ekranda Name kısmından condition’a bir isim veriyoruz.

 

Facet kısmından Stored Procedure isimlerini kontrol edeceğimiz için Stored Procedure facet’ını seçiyoruz.

Expression kısmında … ‘ya tıklayarak Stored Procedure facet’ının alt özelliği olan @Name ‘i seçiyoruz.

 

Kontrol edeceğimiz 4 parametre var. Bunları teker teker açıklayalım.

 

İlk parametre olan ‘%[^A-Za-z0-9_]%’ ifadesinde başına ve sonuna % işareti koyarak Stored Procedure ismi içersinde herhangi bir yerde içindekiler geçiyorsa diyoruz. İçindekilerden kastımız [^A-Za-z0-9_]

 

^ ifadesinde ise, hemen sonrasında gelecek ifadelerin dışında olan herhangi bir şey,

 

A-Z ifadesinde A’dan Z’ye kadar olan harfler,

 

a-z ifadesinde a’dan z’ye kadar olan harfler,

 

_ ifadesinde de sadece _’yi ifade ediyoruz.

 

Yani sonuç olarak bu parametrelerle demek istediğimiz sonuç şu:

 

Stored Procedure isminde A’dan Z’ye kadar büyük harfler, a’dan z’ye kadar küçük harfler, 0’dan 9’a kadar rakamlar ve _ ifadesi geçebilir. Bunu dışındakiler Stored Procedure isminde varsa policy fail etsin.

 

İkinci parametre olan ‘[0-9]%’ ifadesinde başlangıca % koymadığımızı farketmişsinizdir. Bu şekilde Stored Procedure isimlerinin başlangıcında rakam olmamasını, eğer rakam ile başlayan Stored Procedure varsa fail olmasını talep etmiş oluyoruz.

 

Üçüncü parametre olan ‘[sp]%’ ifadesinde başlangıca % koymadığımızı farketmişsinizdir. Bu şekilde Stored Procedure isimlerinin başlangıcında sp ifadesinin olmamasını, eğer sp ile başlayan Stored Procedure varsa fail olmasını talep etmiş oluyoruz.

 

 

Dördüncü parametrede @Name yerine gördüğünüz gibi IsSystemObject’i kullandık. Bunun sebebi sistem stored procedure’lerini kontrol etmek istemeyişimiz. Zaten kullanıcı stored procedure’lerinin sp ile başlamamasını isteme nedenimiz sistem stored procudure’lerinin sp ile başlaması.

 

 

Evaluation Mode kısmından On Schedule’ı seçerek policy hangi aralıklarla kontrol’ü yapacağını belirliyoruz ve daha sonra Enable kutucuğuna tıklıyoruz.

 

On Demand’ı seçersek, sadece policy’i çalıştırdığımızda kontrolleri yapar.

 

Server restriction kısmında server bazında bir koşulunuz varsa server bazında bir condition oluşturarak koşulunuzun kontrolünü yapabilirsiniz.

 

 

Belirli aralıklarla otomatik kontrol etmesini istiyorsak Schedule kısmından new diyoruz ve policy’nin kontrol’ü yapacağı sıklığı belirliyoruz. Biz aşağıda her gün 00:00:000’da bir kere çalışacak şekilde set ettik.

 

 

Policy’mizi bu şekilde oluşturduk. Manual olarak çalıştırmak için aşağıdaki gibi Evaluate diyoruz.

 

 

Ben kendi lokal’imde bu işlemi gerçekleştirdiğimde aşağıdaki gibi bir sonuç aldım.

 

Sp_help_revlogin

Sp_hexadecimal

 

 

Fail eden stored procedure isimlerinin hangi şartta fail ettiğini görmek için View’e tıklayabilirsiniz.

 

View’e tıkladığımda aşağıda da gördüğünüz gibi bu stored procedure sp ile başladığı için fail etmiş.

 

 

Instance üzerinde refresh yaptığınızda Instance’ın yanında aşağıdaki gibi mektuba benzeyen bir kutucuğun üstünde kırmızı renki 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.

 

Örneğimizle ilişkilendirecek olursak stored procedure isimlerinde gerekli düzeltmeleri yaptıktan sonra policy’i yukarda anlattığım gibi tekrar evaluate ettiğimizde bu işaret kaybolacaktır.

 

 

Policy Based Management ile SQL Server üzerinde yapabileceğiniz bir çok kontrol vardır. Ve profesyonel bir veritabanı yöneticisi bence SQL Server’ın bize sunduğu bu özelliği bütün detaylarıyla kullanmalı. Policy Based Management ile  yapabileceğiniz diğer kontrolleri sitemizdeki menüden MSSQL’in altındaki POLICY-BASED MANAGEMENT alt menüsünden erişebileceğiniz makalelerde bulabilirsiniz.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir