4 Aralık 2014 Perşembe

Singleton Class (Tek Örneğe Sahip Sınıf)

Singleton class'lar kodlama yaparken performans açısından sıkıntı verebilecek durumların önüne geçmeye ve ayrıca oluşabilecek karmaşıklığı engellemeye yarayan bir kodlama tercihidir. Bu class'ın örneği (instance) en fazla bir tane olur. Kodlama esnasında bu class'ın ihtiyaç duyulan bileşenleri bu örnek üzerinden gerçekleştirilir.



Görüldüğü üzere sınıfın constructor'unun erişilebilirliği private olarak belirlenmiştir. Bu sayede dışarıdan yapılan yeni bir nesne oluşturma istekleri erişim sağlayamayacağından dolayısıyla nesne oluşturulamayacak ve hata alınacaktır. Ben bu örnekte en yalın halini gösterdiğim için constructor (yapıcı)'un içini boş bıraktım.


Burada görüldüğü gibi singleton class'a ait yeni bir nesne oluşmasına izin verilmemiştir.


Bu tek olan nesneyi oluşturmak için tipinin static olması gerekir ki (burada static değişkeni döndüren metodumuz da değişken static olduğu için static yapılmıştır) dışarıdan sınıfın ismini kullanarak erişelim. Bu erişim eğer sağlanan ilk erişim ise tek nesne yaratılacak ve referans değişken belirtmemiz üzere bize döndürülecektir. İlk erişim değilde sonraki erişimlerde ilk erişimde yaratılmış olan nesne bize döndürülecektir. Yukarıdaki resimde bu sınıf içindeki bir public metoda erişimin sağlanabileceği tek yöntem görülmektedir. Singleton class kodlama, bir sınıftaki her işlemin tek bir nesne üzerinde olması gerektiği zamanlarda tercih edilir.

2 Aralık 2014 Salı

Microsoft SQL Server 2012 Kaldırma İşlemi (MSSQL Uninstall)

Microsoft SQL Server  microsoft kullanıcıları için ihtiyaç duyulduğunda iyi iş gören bir veritabanı yönetim sistemi olsa da bazı nedenlerden dolayı kaldırılması istenebilir ya da gerekli olabilir. Microsoft SQL Server'ın (ya da daha kısaca MSSQL olarak da adlandırabiliriz) kaldırılma işlemi aslına bakılırsa kritik ve nasıl kaldıracağınızı bilmiyorsanız sancılı bir işlemdir. Uninstall programını bulamamışsanız ve direkt olarak Control Panel > Uninstall Program (Denetim Masası > Program Kaldır) bölümünden MSSQL ile alakalı gösterilen her şeyi kaldırma işine girişmiş iseniz bu bazı sıkıntıları yaşayacaksınız anlamına gelir. MSSQL'i bu şekilde kaldırma kesinlikle doğru bir yöntem değildir. Tekrar ihtiyaç durumunda aynı bilgisayara MSSQL'i yüklemeye çalıştığınızda garip hatalar ile karşılaşma ihtimaliniz çok yüksektir. Bunun nedeni programın bütünü ile kaldırılmış olmamasıdır. Bizzat kendim bu hatalara düşerek doğru yolu zor da olsa bulabildim. Kısaca yaptığım işten bahsedersem MSSQL 2012 Enterprise kurulumu yaparken Management Studio henüz çözemediğim bir nedenden dolayı sisteme kurulamadı. Ben de programı tamamen kaldırarak tekrardan kurulum yapmak istedim. Uninstall programını aradım fakat bulamadım (kapsamlı bir arama yapmayarak en büyük hataya burada düştüm halbuki internette de bununla ilgili bir arama yapsaydım her şey daha kolay olabilirdi). Program Ekle veya Kaldır menüsünden MSSQL adına herşeyi kaldırdım ve yeniden yükleme işlemine başlamak istediğimde setup dosyası kuruluma başlamadı bile. İnternetten araştırdığımda uninstall dosyasını da diğer MSSQL Server dosyaları ile kaldırdığımı anladım. Bu uninstall dosyasını geri getirmekte kolay olmadı. Bunun çözümünü setup dosyasından repair seçeneğini kullanarak buldum. Eğer sizde bu durumu yaşıyorsanız buradaki onarım işlemini sağlam bir setup dosyasını göstererek gerçekleştirmelisiniz. Doğru onarım gerçekleştirdiğinizde MSSQL dosyalarınızın tekrar Program Uninstall listesine geldiğini göreceksiniz. İşte bu dosyalar arasında MSSQL'i kaldıracağınız dosya da yüklenmiş olacaktır. Eğer o dosya da hazırsa kaldırma işlemine artık başlayabiliriz.
NOT: Bazı ayarları yapabileceğiniz yolunu bulmakta zorluk çekebileceğiniz konfigürasyon dosyasını yolunda bulabilirsiniz.



Yukarıda şeçili görünen dosya bizim kullanacağımız uninstall programıdır. Buna sağ tık yapıyoruz.


Remove seçeneğini seçiyoruz. Eğer burada ilgili arayüzü açamama problemi yaşamış iseniz setup'ınızın uyumluluk ayarını değiştirmeniz gerekecektir. Bunu setup'a sqğ click properties (Özellikleri) açarak Compability (Uyumluluk) alanından Windows Vista Service Pack 2 olarak ayarlamalısınız. Şimdi açacaktır.


Bu ekran ile karşılaştığınızda sorunsuz ilerliyorsunuz demektir. OK seçeneğine tıklıyoruz.


Burada kurulu olan sunucularınızın listesini göreceksiniz. Eğer siz birden fazla kurmuş iseniz bu işlemleri en baştan diğer sunucu veya sunucular için gerçekleştirmelisiniz. Seçerek Next diyoruz.


Select all (Hepsini seç) diyoruz, tümünü sileceğimiz için.


Next'e tıklayarak ilerliyoruz. 


Remove diyerek silme işlemini başlatıyoruz.


Silme işlemi tamamlandığında bu ekran ile karşılaşacaksınız. Close diyerek işlemi bitirmiş oluyoruz. Son işlem olarak Control Panel > Program Uninstall bölümünden SQL Server adına olan bileşenleri kaldırmalısınız. Bu kaldırma işlemini sorun yaşamadan anlattığım şekilde gerçekleştirmiş iseniz artık Microsoft SQL Server'ı sisteminize temiz bir şekilde yeniden kurabilirsiniz.


16 Kasım 2014 Pazar

Firefox için Tor ayarları

Tor yazılımını bilgisayarınıza yüklemiş iseniz browser'ınız üzerinde kullanmak için bazı ayarlamaları yapmanız gerekmektedir. Mozilla Fİrefox için "FoxyProxy" eklentisine ihtiyacınız olacak. Bu eklentiyi yüklemek için tarayıcınız üzerinde Add-ons (Cntrl + Shift + A) eklentisini kullanarak FoxyProxy'i Extensions bölümünde aratıp bulup yükleyebilirsiniz. Eklentiyi yükleyip kurduktan sonra adres çubuğunun sonunda bir tilki ikonu göreceksiniz. Ona tıklayın ve gelen arayüzden Add new Proxy seçeneğine tıklayarak;



ayarları yukarıdaki şekilde ayarlayarak tamamlıyorsunuz. Şimdi tilki simgesine istediğimiz zaman tıklayarak Selection Mode seçeneğinden Use Proxy "localhost:9050" for all URLs seçerek Tor'u browser'ınızda aktif hale getirebilirsiniz. Ayarınızın doğruluğunu test etmek için https://check.torproject.org/ adresini kullanabilirsiniz.

Ubuntuda Tor Kurulumu

Tor, kişilerin internet ağı üzerinde gizlilik ve güvenlik sağlamak amacıyla kullandıkları açık kaynak kodlu bir yazılımdır. Bununla birlikte yasaklı sitelere de giriş sağlayabilmektedir. Tor yazılımını ubuntu 12.04 işletim sistemi üzerine komut satırı üzerinden basitçe kurabilmek için izlememiz gereken yönergeler şöyle:

1. İlk olarak uç birimi yada terminali açıyoruz (CTRL + Alt + T tuş kombinasyonu da kullanılabilir) çünkü dağıtımımızın ismini öğrenmemiz gerekecek. Bunun için;

       lsb_release -c

komutunu yazarak unix dağıtımımızın adını öğreniyoruz.

2. vi editörünü kullanarak /etc/apt/sources.list dosyasına dağıtım bilgimizi ekleyeceğiz. Bunun için;

      cd /etc/apt     
      sudo vi sources.list

sources.list dosyamızı açtık ve içinde boş bir satıra;

       deb     http://deb.torproject.org/torproject.org DAĞITIM_ADI main

öğrenmiş olduğumuz dağıtım adını yukarıdaki şekilde ekliyoruz. Ekleme işlemini gerçekleştirmek için vi editörü kullamını biraz olsun bilmek gerekmektedir. İmleci boş bir satıra getirip "i" tuşuna basarak girdimizi ekleyebiliriz. Yukarıdaki satırı bu şekilde ekleyebilirsiniz ve sonra Esc + :wq + Enter tuşlarına sırasıyla basarak kaydedip çıkıyoruz.

3. İşlem için çalıştırılacak paketler için anahtar bilgilerini ekleme işlemi yapıyoruz. Komut satırına;

       gpg --keyserver keys.gnupg.net --recv 886DDD89
       gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
  
komutlarını sırasıyla uç birimde çalıştırıyoruz. 

4. Son işlemler olarak;

      sudo apt-get update
      sudo apt-get install deb.torproject.org-keyring
      sudo apt-get install tor

komutlarını sırasıyla çalıştırarak tor kurulumunu tamamlıyoruz. Eğer arayüzden toru kullanmak istiyorsak vidalia isminde tor arayüz programınıda kurmak için;

    sudo apt-get update
  sudo apt-get install vidalia deb.torproject.org-keyring

komutlarını sırasıyla çalıştırarak kurabiliriz. /usr/bin klasörü altında oluşacak olan vidalia'yı çalıştırmak için o klasöre cd komutuyla giderek "sudo ./vidalia" komutunu çalıştırıp kullanabilirsiniz. Bu anlattıklarım hakkında daha detaylı bir bilgi için https://www.torproject.org/docs/debian.html.en adresine göz atabilirsiniz.





28 Ekim 2014 Salı

SQL Injection

     SQL Injection, veri odaklı uygulamalarda tabanda çalışan SQL dili özelliklerinden faydalanılarak standart uygulama ekranındaki ilgili alana ek SQL ifadelerini ekleyerek yapılan bir tür atak tekniğidir. SQL Injection, uygulama yazılımları içindeki güvenlik açığından faydalanır. Örneğin, uygulama üzerinde girilen kullanıcı verisine SQL ifadeleri gömülür ve bu veri içeriği uygulama içerisinde filtre edilmiyorsa beklenmedik bir şekilde uygulamanın hata vermeden çalıştığı görülür. Bu saldırı diğer saldırılardan farklı bir atak tipi olduğu için yazılım geliştiricilerin bu açıdan saldırı geleceğini düşünmesi oldukça güçtür. Çoğunlukla web siteleri için kullanılan bir saldırı türü olarak bilinse de SQL veritabanına ait tüm uygulamalar için denenebilir bir ataktır.
     2012'de yapılan bir çalışmada, güvenlik şirketi olan Imperva'nın web uygulamalarında gözlemlemiş olduğu 'Ay başına 4 atak' seferberliğinde perakendeciler ve diğer sanayi kuruluşlarının 2 kat daha fazla atak aldıkları gözlemlendi.
Tarih
    SQL Injection üzerindeki ilk kamu tartışmaları 1998 yılında başlamıştır. 1998'de Phrak dergisinde yayımlanan bir makalede bundan söz edilmiştir.
Teknik Uygulamaları
Saldırgan, uygulama üzerinde kullanıcı giriş ifadesine SQL ifadeleri ekleyerek güvenlik açığı arar. Bunu gerçekleştirebilmek için SQL ifadelerini ve sözdizimini yeteri kadar bilmek gerekir. Aşağıdaki kod satırı, bu güvenlik açığını göstermektedir:
sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi + " ';"
Yukarıdaki SQL sorgusunda kullaniciAdi alanına kullanıcı girdisi gelecektir, bu girdiye göre veritabanında arama yapılacak ve sonuç olumlu ise yazılımcının belirlediği işlemler gerçekleşecektir. Bu işlemler muhtemelen arayüzünde kullanıcıAdi verisi girişi için bir alana sahip ve bu veriye göre sisteme dahil edilme işlemini ayarlayan uygulama yazılımıdır. Arka planda girilen veriye göre veritabanında karşılaştırma yapacak ve veri veritabanında bulunuyor ise sisteme giriş sağlanacak, bulunmuyor ise sağlanmayacaktır. Günümüzde uygulamalar güvenliğin daha üst düzey olması için kullanıcı adı verisinin yanında parola da istemektedirler. Burada SQL Injection atağının etkili olabileceği bir açık varsa aşağıdaki şekilde:

' or '1' = '1 
SQL verisini giriş verisi olarak gönderir isek uygulama tabanında çalışacak sorgu:
sorgu = "SELECT * FROM kullanicilar WHERE isim =' " + kullaniciAdi ' or '1' = '1 + " ';"

şeklinde olur. kullaniciAdi verisi ne olursa olsun '1'='1' koşulu sağlanacağından ve aradaki işlemin OR olmasından dolayı sorgu sonucu her zaman olumlu olacaktır ya da SQL sözdiziminin yorum satırı haline getirme karakterlerini kullanarak:

' or '1' = '1 '--
' or '1' = '1' ({
' or '1' = '1'  /*
olumlu sonuç elde edilir. Bu karakterlerden sonra gelen tüm karakterler yorum niteliği kazanacaktır ve bir önemi kalmayacaktır.

Dispatcher property kullanımı


      WPF uygulamanızda threadleri kullanarak bir şeyler gerçekleştirmeye çalışırken (multithreading) "thread kaynağa erişemiyor hatası" almanız muhtemeldir. Bu hatayı Visual Studio IDE'si 'Başka bir iş parçacıcığına ait olduğundan çağıran iş parçacığı bu nesneye erişemiyor.' (ya da İngilizce olarak 'The calling thread cannot access this object because a different thread is own it.')  şeklinde mesaj kutusu olarak görüntüler. Alınan bu hatanın nedeni sizin ana thread'inizin (siz oluşturmasanız dahi bir program açıldığında o program bir iş parçacığı yani bir thread tarafından yürütülür, bu ana thread'tir. Diğer oluşturulan threadler eş zamanlı çalışma ve çalışma yükü hafiflesin diye oluşturulur.) kullanabileceği GUI nesnesine (button, listbox, textbox gibi) başka bir thread tarafından gelen erişim isteğidir. Başka bir thread bu nesnelere direkt olarak erişemez. Örnek ile gösterirsem:


Yukarıdaki örnekte ana thread'in ulaşabileceği myTextBox textbox'una, oluşturulmuş olan yeni bir thread erişerek textini değiştirmeyi amaçlamıştır. Fakat göründüğü üzre yukarıda bahsettiğim hata mesajı dönmüş. Bu hataya bir çözüm olarak nesnenin Dispatcher (sevk eden olarak çevirilebilir) property'sinin (özelliğinin) BeginInvoke metodu kullanılarak ve ilgili parametre olarak delegate bir metod oluşturarak üstesinden gelebiliriz. Bahsetmiş olduğum çözüm:


Böylece delegate bir metod yardımı ile ilgili thread'in erişimi altındaki nesneye müdahale edebiliriz.

11 Ekim 2014 Cumartesi

VirtualBox içindeki sanal işletim sisteminin sabit diskini resize etme

          Virtual Box ile sanal makine oluşturma işlemi gerçekleştirirken sanal makinemizin sanal sabit sürücüsünün boyutunu megabayt cinsinden belirleriz. Bu sanal sürücü boyutu, sabit diskte depolanabilecek bir sanal makine dosya verisinin miktarını sınırlandırır. Sanal makinemizi oluşturduktan sonra bazı durumlarda sanal sabit diskte yere ihtiyacımız olabilmektedir. Virtual Box IDE'si arayüzü üzerinde ne yazık ki bu alanı değiştiremiyoruz. Bu sebepten dolayı farklı bir çözüm yolu bulmalıyız. Ben yakın bir zaman önce bu problem ile karşılaştım ve şu çözümü buldum. Gerçek işletim sistemim Windows 8.1'de sanal olarak çalıştırdığım işletim sistemi Ubuntu için cmd ekranını açarak aşağıdaki şekilde sabit diski resize ettim;

1.   İlk olarak cmd komut satırına, VBoxManage uygulamasının bulunduğu dizine geçmek için;

       cd C:\Program Files\Oracle\VirtualBox

yazıyoruz. Böylelikle bu dizin içerisindeki VBoxManage uygulamasını komut satırına direkt VBoxManage yazarak çalıştırabileceğiz. Sizin path'iniz farklı olabilir, buna dikkat edin.

2.   Cmd komut istemcisine ;

       VBoxManage modifyhd --resize <Ne kadar boyutlu olsun istiyorsanız (MB cinsinden)> "vdi uzantılı sanal makinezin path'i"

yazarak işlemi gerçekleştirebiliriz.




Yukarıda benim yaptığım örneğin ekran görüntüsü bulunmaktadır. Bu işlemde yetersiz alan resize etmek kayıplara yol açabileceğinden MB cinsinden olan değere dikkat edilmelidir. Gerçek işletim sistemi olarak ubuntu kullanıyorsanız uçbirime aşağıdaki şekilde komut yazmak aynı işlevi görecektir.

   VBoxManage modifyhd <sanal makinenin yolu> --resize <yeni size>

Tabiki bu komutu yazarken VBoxManage'in bulunduğu dizinde olmamız gerekmektedir. Eğer değil isek VBoxManage'in path'ini aynı bölüme çift tırnak işareti arasında yazarken işlem gerçekleşecektir.

10 Ekim 2014 Cuma

NetBIOS (139. port) portunu disable etme

      İşletim sistemimiz üzerinde bu portun açık olup olmadığını öğrenmek için eğer işletim sistemimiz windows ise cmd.exe'yi çalıştırıp komut satırına  netstat -an yazarak görebiliriz. Ayrıca bu komut listening durumda (yani bir istek dinleyen, açık) olan tüm portları gösterecektir. Eğer işletim sistemimiz windows değilse nmap aracını sistemimize kurup (buradan indirebilirsiniz: http://nmap.org/download.html) kullanarak port taraması gerçekleştirebiliriz. 139 numaralı yani NetBIOS portu, ağ üzerindeki dosya ve yazıcı paylaşımını gerçekleştirmek için kullanılır. Bir işyerinde birden çok bilgisayarın aynı dosyalara ve yazıcıya erişimini sağlar. Herhangi bir yolla dışarıdan ağa sızan yabancı bir bilgisayar da aynı şekilde bu yolla paylaşımdaki sürücü ve dosyalara erişebilir. Bu nedenle tek bilgisayar kullananlar, bu portu kapalı tutmalıdırlar (güvenlik açısından 139 nolu portun kapatılması önerilir). Bu portu kapatmak için Windows'un eski sayılmayan sürümlerinde aşağıdaki benzer şekilde kapatabiliriz. Aşağıdaki örnek Windows 8 işletim sisteminde gerçekleştirilmiştir.




Ağ ve Paylaşım Merkezi > yerel ağ bağlantınız>Özellikler>Internet Protocol Surum 4 Ozellikler >Gelismis>WINS tabı altındaki NetBIOS'u devre dısı bırak seçenekleri takip edilerek işlem onaylanır. Böylelikle 139. port yani NetBIOS devre dışı bırakılmış olunur.




17 Temmuz 2014 Perşembe

Windows Applocker...



Applocker, bilgisayar üzerinde admin yetkisini kullanarak bilgisayarı kullanan kullanıcıların veya grupların uygulamalar üzerindeki yetkilerini kısıtlamak amacıyla kullanılan bir Windows bileşenidir. Örnek ile açıklar isek; Applocker'ı kullanarak bilgisayarımız üzerinde var olan Adobe Reader uygulamasını standart bir kullanıcı tarafından çalıştırılmasını engelleyebiliriz. Applocker'ı Windows 7 ve üzeri Windows işletim sistemleri üzerinde kullanabilirsiniz. Ek bir yükleme gerektiren bir yazılım falan değildir. Applocker'ı kullanarak bir örnek yaptığımda daha iyi anlaşılacağını düşünüyorum. Active Directory yapınız varsa bunu merkezi olarak gerçekleştirebilirsiniz. Mesela bilgisayarımda admin yetkisi ile vSphere programının belirlemiş olduğum standart bir kullanıcı tarafından çalıştırmasını engelleyelim. İlk iş olarak;




Bilgisayar üzerinde Windows+R tuş kombinasyonu ile veya başlat arama çubuğuna gpedit.msc yazarak programı çalıştırıyoruz. Karşımıza gelecek olan ekran görüntüsü;


şeklinde olucak ve yukarıda göründüğü gibi Applocker'ı göreceksiniz. Alt dizini olan Executable Rules seçeneğine sağ tıklayarak Create New Rule ile yeni kural belirleme işleme başlıyoruz.



Yukarıdaki resimde görünen arayüzde farklı bir işlem yapmayacağız. Tabi yukarıda belirten bilgileri okumada yarar var. Next diyoruz.


Burada ne tür bir eylem gerçekleştireceğimiz soruluyor. Biz yetki kısıtlayacağımız için doğal olarak Deny (Reddetmek - gelen çalıştırma isteklerini) seçeneğini işaretleyip hangi kullanıcı veya gruba bu işlemi yansıtacağımızı Select butonuna tıklayarak gelen arayüzden belirliyoruz. Ben TestEmre kullanıcısına kısıtlamayı uygulamak istediğim için Enter the object name to select bölümüne TestEmre yazıp Check Names seçeneği ile bilgisayar içinden kullanıcıya ulaştım. Burada sizdeki kullanıcı farklı domainde yer alıyorsa kullanıcıya ulaşmak için gerekli ayarları üstteki bölümlerden yapmanız gerekmektedir. Next diyoruz.



Burada hiçbir işlem yapmayıp Next diyeceğiz fakat kısaca bilgi vermekte yarar olacaktır.

Publisher : Yayımcı, uygulamayı imzalamadıysa bu seçeneği seçiyoruz. Biz imzalamadığını kabul ediyoruz.

Path : Belirli bir dosya veya dizin için kural oluşturmak için seçilir. Dizin seçilmiş ise dizin altındaki tüm klasör ve dosyalar kurala tabi tutulacaktır.

File hash : İmzalanmamış bir uygulamaya kural koyacaksak seçilmelidir.

Publisher seçeneğini seçerek devam ediyoruz.


Yukarıdaki resimde gördüğünüz gibi kural koyacağınız uygulamayı seçiyoruz. Alttaki seçeneğe bakarsak exe uzantılı olmasına dikkat etmeliyiz. Ben buradan vSphere uygulamasını seçiyorum, bilgilerin çekildiğini görüyorum ve Next ile ilerliyorum.



Yine buna bağlı olarak özel durumlar olabilir örnek vermek gerekirse Office paketi için böyle bir kural oluşturduğumuzu varsayalım. İlgili kullanıcı Outlook uygulamasını yasakladığımızı düşünürsek Excel, ve Word uygulamasını çalıştırmasını sağlayabiliriz. Şuan öyle bir seçeneğimiz olmadığı için ilerlemeye devam edelim.



Bu bölümde oluşturduğumuz kurala bir isim veriyoruz ve Create diyoruz.


Önemli sistem dosyalarının çalışabilmesi için bizden varsayılan kuralların oluşturulması gerektiği bilgisi görüntüleniyor. Yes butonuna tıklayarak devam ediyoruz.




Buradan gördüğümüz üzere işlemimiz ve varsayılan kurallar gerçekleştirilmiş durumda.



Uyarı: Oluşturduğumuz kuralın client bilgisayarlar üzerinde etkin olabilmesi için Application Identitiy (Uygulama Kimliği) servisinin açık olması ve otomatik olarak çalışıyor olması gerekmektedir. Burada otomatikten anlatmak istediğim işletim sistemi her açıldığında Uygulama Kimliği servisinin otomatik olarak başlaması gerekmektedir. Aksi taktirde oluşturduğumuz kural etkin olarak çalışmayacaktır.

Yukarıdaki resim ile bu işlemi nasıl gerçekleştirdiğimizi görüntülüyoruz. Service status Start olması gerektiğini unutmamalıyız.

Şimdi son olarak yaptığımız işlemleri test edeceğiz. Kuralı ilişkilendirdiğimiz standart user account'u ile bilgisayara giriş yaptığımızda ve vSphere uygulamasını çalıştırmak istediğimizde;




Yukarıdaki resimdeki ekran görüntüsüyle testimizin istediğimiz şekilde gerçekleştirdiğini görüyoruz. Artık bu kullanıcı hiç bir şekilde bu uygulamayı çalıştıramayacaktır ta ki admin yetki vermedikçe.


15 Temmuz 2014 Salı

Local Group Policy Editor'ü ile yetkilendirme...



Merhaba, bugün size Windows üzerinde önceden çoğu kez aklıma gelen fakat bir türlü öğrenip uygulamaya girişim göstermediğim bir olaydan bahsedeceğim. Bu olayı kısaca tanımlarsak bilgisayarda bazı kullanıcılar tarafından çalıştırılmasını veya görülmesini istemediğimiz bileşenlere erişimini engellemesi diyebiliriz. Bu daha çok Active Directory dizin sistemini kullanan kurumlar içindeki kullanıcı, bilgisayar veya printer gibi bileşenler üzerinde erişim yetkilerini belirlemek için kullanılmaktadır. Bu Group Policy denilen sistem ile gerçekleştiriliyor. Ben bu yazıda daha çok localimizdeki bilgisayar üzerinde bazı erişim yetkilerini kısıtlama hakkında bahsetmeyi hedefledim(Local Group Policy Editor). Mesela bilgisayarımız üzerinde arka plan resminin değiştirilmesi ve default olarak gelen Windows Sounds ayarlarının yapılabilmesi yetkisini kullanıcıların elinden almayı deneyelim. Tabi bu yetkileri düzenlemek için o bilgisayar üzerinde admin olarak bu işlemleri yapmalısınız. Engelsiz halde iken engelleyeceğimiz özelliklerin bir ekran görüntüsünü gösterirsem:




Görüldüğü üzere renkli çerçeveye aldığım bölümlere tıklayarak bu olayları standart kullanıcı rahatlıkla yapabiliyordu. Şimdi bu kullanıcının yoluna taş koyma işlemine başlayalım. İlk olarak arama bölümüne gpedit.msc komutunu yazıp arama sonucu çıkan programı çalıştırıyoruz.



Karşımıza gelen arayüzde kısıtlamaları yapabileceğimiz iki tür configuration seçeneği bulunuyor. Computer Configuration üzerinden bir kısıtlama gerçekleştirirsek bu bilgiasayarın kendi üzerindeki kısıtlaması olacaktır. User Configuration bölümünden ise bilgisayarı kullanan userlara kısıtlama getirebiliriz. Biz User Configuration seçeneği altında Administrator Templates ve altında Control Panel (Denetim Masası) dizini altından Personelization (Kişiselleştirme) dizini altından arka planı değiştirilmesini engelleyecek olan bileşeni bulup çift tıklama yapıyoruz. Bu bölümde user'lara uygulayabileceğimiz tüm kısıtlamalar gerçekleştirilebilir, buraya bir göz atmanızı tavsiye ederim.




Karşıma gelen arayüzde Not Configured olarak işaretlenmiş seçeneği Enable yapıp uyguluyoruz.


Aynı şekilde sounds (ses) ayarı yetkisini değiştirebileceğimiz seçeneğiniz bulup çift tıklıyoruz.


Enable olarak işaretleyip uyguluyoruz.



Dilersek yukarıdaki seçenekten local üzerinde program ekle veya kaldırma işlemini de kısıtlayabiliriz.


Ya da yukarıdaki seçenekten olduğu gibi Control Panel (Deneim Masası)'ine erişim yetkisini de kısıtlayabiliriz. Fakat biz şu an bu işlemleri gerçekleştirmeyelim.


Yukarıda yapmış olduğum iki seçeneği Enable olarak değiştirmiş iseniz cmd'yi açıp komut satırına gpupdate /force yazarak yapılan yetkilendirme işlemlerini aktif edebilirsiniz. Eğer bunu yapmaz iseniz bu değişikliklerin aktif olmasının biraz gecikme olasılığı var. Karşınıza gelen soruya y veya e (YES/EVET) olarak girdiğinizde oturumunuz kapanacaktır ve işlemler aktif olacaktır. Bu işlemi yapmadan önce işlemin aktif olup olmadığını kontrol edin, eğer aktif olmuş ise bu işlemi gerçekleştirmenize gerek yoktur. Yeniden logon olunduğunda ya da işlemler aktif olmuşsa;



İşaretlemiş olduğum alanlara tıklayamadığınızı göreceksiniz. Bu işlemi eski haline döndürmek için aynı şekilde Enable yaptığınız seçeneği Not Configured yapıp apply etmeniz yeterli olucaktır.

Active Directory hakkında...



           Active Directory yapı olarak etkileşimi olduğu ağ içerisinde var olan kaynaklara erişimin kullanıcı bazında yetkilendirme işlemlerinin ayarlanması amacıyla oluşturulmuş bir dizin sistemidir. Bu işlemler kullanıcıya özel olarakta yapılabilir, kullanıcıları bir gruba tabi tutarakta yapılabilir veya sistem üzerindeki bir printer’a da uygulanabilir.
Staj yapmakta olduğum şirket içinde Active Directory yapısından bahsedersek kullanıcıların, şirket bilgisayarlarının, müşterisi olan firmaların ve varsa bunların çeşitli lokasyonlarının bilgilerini tutuyor, gruplama yapıyor ve bunları Group Policy ile yetkileri düzenlemiş halde tutuyor. Mesela bir şirkete personel alımı durumunda Active Directory içine o personelin hesabı yaratılır, tüm gerekli bilgileri eklenir. O kişiye verilecek bilgisayar için aynı işlemler yapılır ve kişiyle ilişkilendirilir. Bu personel hangi grup içinde yer alacaksa (Sistem yönetim ekibinde ise Sistem Yönetim Grubuna eklenir) o gruba eklenir ve bu ekleme işlemi ile o grubun yetkilerine tabi tutulur. Eklenen personelin sisteme dahil olabilmesi için birer kullanıcı adı ve parolası bulunur. Bu kullanıcı adı ve parola ile lokasyon içinde herhangi bir bilgisayardan sisteme giriş yapabilir fakat kendi bilgisayarından giriş yapmadığı durumlarda standart user olarak işlemini yapabilir. Yani o bilgisayar üzerinde kendi bilgisayarı üzerinde yapabileceği şeylerin hepsini yapamayacaktır. Kendi bilgisayarında oturum açtığında local user olup grubu ya da kendi adına hangi yetkilendirmeler belirlenmişse o yetkiler aktif olur. Standart userların yetkileri farklı bir bilgisayarda oturum açan kullanıcılar için geçerlidir. Standart user olan kullanıcı şirket içerisinde o bilgisayar içerisinde program kaldırma, değiştirme gibi olayları gerçekleştiremeyip sadece programları çalıştırabilir. Eğer kullanıcı domain user (ya da administrator) ise tüm bilgisayarlarda istediği işlemleri gerçekleştirebilecektir.
Active Directory içindeki temel terimlerden bahsedersek ;
·         Domain, kullanıcı ve kaynakları barındırır. Domain’e girmek için kullanıcı adı ve parola kullanılır. İçinde operational unit’leri barındırır.
·         Operational Unit, domainin alt parçalarıdır (Gruplar, user’lar, computer’lar). Kısıtllamalara tabi tutulurlar.
·         Tree, domain içinde belli bir hiyerarşi sağlar.
·         Forrest, içerisinde domainleri barındıran ortamın genel adıdır. İçinde treeler, domainler bulunur.



          Bu sistemde tüm kontrolleri yapıldığı Primary Domain Controller adı verilen bir server bulunur.Bu server’a replike olan Additional Server  adı verilen server’lar bulunur. Bu, sistem için ayrıca süreklilik sağlar. Primary serverda Additional server’ların içerdiği bilgileri barındırır. Bir Additional server’ın problem yaşadığı durumlarda bilgi Primary server’da bulunduğundan geri döndürülebilir, primary serverdaki oluşan bir problemde ise bilgiler zaten Additional server’larda var olduğundan sorun olmayacaktır. Etki alanı denetleyici olarak kullanılan domain controller sunucusunun şirket bütünlüğünü koruması, bilgisayarların daha etkili kullanılması ve güvenliğe kattığı önem bakımından kritik bir konuma sahiptir.

14 Haziran 2014 Cumartesi

DELEGATE VE EVENT...

Merhaba, bu yazımda kısaca C# delegate ve event yapısından bahsedeceğim. Delegate'ler Türkçe karşılığı olarak elçi, temsilci anlamına gelirler. Programlama alanında metotlara referanslık ederler. Delegate'lere anlam katan özelliği ise yalnızca bir metoda değil birden fazla metoda referanslık edebilmeleridir. Bu, bir delegate kullanımı ile aynı zamanda birden fazla metodu delegate'e eklemiş olduğunuz sırayla (burada içine uygun tipte metot alan bir liste gibi düşünebiliriz) çalıştırabiliriz anlamına gelir. Yalnızca parametre tipi, sayısı gibi kısıtlamaları göz önünde bulundurmamız gerekir. Bu bağlamda delegate'in class, enum gibi referans tipi olduğunu unutmamamız gerekir. Çalışma zamanında da delegate'in hangi metotlara referanslık etmesi ya da referans listesinden silinmesi mümkündür. Bunu kısa bir örnekle açıklarsam daha açıklayıcı olacağına inanıyorum:



Event(olay) yapısından biraz bahsedersek, eventler delegate tipinde olup genelde button, checkbox, textbox gibi kontrol yapılarında karşılaşacağımız bir işlem gerçekleştirdiğimizde veya gerçekleştirmediğimizde de dilersek otomatik olarak çalıştırılacak olan metotlardır. Bir işlem gerçekleştirmeden çalıştırılmasından kasıt çalar saat gibi düşünebiliriz, biz ona bir ayar yapıyoruz ve zamanı gelince o da kendi başına bu ayara uygun işlemini gerçekleştiriyor. Bu deleagate ve event yapısını biraz öğrendikten sonra aslında delegate'in event yapısından pek farklı bir yapı olup olmama konusunda kafanız karışması muhtemeldir. Şu anki durumumuzda bunu bir sonraki plana bırakıp birlikte nasıl çalıştıklarına bakalım:


Gördüğünüz üzere event'imiz delegate tipinde oldu ve onun parametrelerine geri dönüş tipine uygun metotları içeriyor. Burada dikkat edilmesi gereken bir diğer husus event'imize bir metot ekleyecek isek += ya da event'imizden bir metot silecek isek -= operatörlerini kullanmamız gerektiğidir. Örneğimizde event'imizin metotlarının çalışma zamanında belirlenmesini sağladık ve event ve delegate'in getirmiş olduğu özelliklerden yararlandık. Çalıştıracağımız metotlara referans verip toplama ve çıkarma işlemi metotlarının sırasıyla çalışmasını sağladık. Ben örnekte iki metodu event'e ekledim fakat dilersek çok daha fazla sayıda metot ekleyebiliriz. Böylelikle delegate ve event yapılarını kısaca görmüş olduk. Bu yapılardan gerektiği zamanlarda yararlanmayı bilmemiz bize birçok yönden avantaj sağlayacaktır.
Bu konuya da böylece kısa bir giriş yapmış bulunduk. Bir başka yazıda görüşmek üzere, iyi günler.  




4 Haziran 2014 Çarşamba

.NET Resource dosyaları...

          Merhaba, bu yazımda .NET'in bünyesinde barındırdığı resource dosyalarından bahsedeceğim. Resource dosyaları resim, müzik, video dosyalarını projelerimizi haricen eklemek amacıyla kullanılır. Resource dosyaları içine iki şekilde dosya ekleyebiliriz. Birinci yöntem local resource olarak eklemektir.
Form içinde picturebox gibi resim kontrolüne resim yüklemek istediğimizde karşımıza Select Resource penceresi gelir ve buradan local resource'u seçip resim yüklersek proje içerisindeki resim dosyaları proje ile birlikte yalnızca o bilgisayarda çalışır. Ya da o resim dosyalarını projeyi çalıştıracağımız bilgisayara yüklemeliyiz. İkinci yöntem ise size birazdan anlatacağım yöntem olan bir resource dosyası oluşturup resim, müzik veya videolarımızı onun içinde saklamaktır. Bu dosyalar .rsx uzantılı olarak proje içinde tutulurlar. Bunu bir örnek ile açıklayayım:


          Gördüğünüz üzere yeni bir Windows Forms Aplication oluşturup Toolbox'tan form içine picturebox, numericupdown, button ve timer konrollerini ekledim. Dilersek bunların tüm özelliklerini bileşen üstüne tıklayıp sağ altta beliren Properties bölümünden değiştirebiliriz. Bu projede ben eklediğim resimlerden oluşan bir slayt gösterisi yapmayı amaçladım. Mesela ben timer'in interval özelliğini 1000 milisaniye(1 saniyey tekabül ediyor), numeric up down'un minimum özelliğini 1 maximum özelliğini 100 olarak değiştireceğim. Çünkü projem istediğim doğrultuda ilerlesin ve hata vermesin istiyorum. Bu konuda bizi ilgilendiren asıl işlemlere gelirsek;


Solution Explorer bölümünden proje ismimize sağ tılayıp Add seçeniğinden New Item sekmesine tıklıyoruz.


Burada Resource File dosyasını işaretleyip dilersek yeni bir isimde verebiliriz Add butonuna tıklıyoruz.


Projemizde Resource dosyamızın oluştuğunu Solution Explorer alanında görüyoruz. Şimdi Strings seçeneğinden Images seçeniğine tıklıyoruz.


Karşımıza böyle bir arayüz gelicek. Bu arayüzde bulunan bileşenlerle dilersek kendimiz bir resim oluşturabiliriz. Mesela ben yukarıdaki gibi bir resim oluşturdum. Önceden paint programını kullanmış olanlar bu arayüze yabancı kalmayacaklardır. Ben slayt gösterimde bu resmede yer vereceğim fakat var olan resimleri nasıl ekleyeceğiz? Onun için şimdi,

                                                                          
Dilersek yukarıda gösterdiğim gibi dosyaya sağ click yapıp Add ve Existing Item seçeneğini tıklayarak dilersekte .rsx uzantılı dosyamızı tıklayarak boş alana sürükleyip ekleyebiliriz. Gördüğünüz gibi ben resimleri ekledim. Sıra geldi kodumuzu yazmaya:


                                                
Kodu tekbir resme küçük bir farkla sığdıramadım iki resim koyduğum için uzun bir kod olduğu zannedilmesin. Şimdi ilk olarak amaçtan bahsedersek butona ilk basımla slayt gösterisi başlasın ve numericupdown kontrolünün değerine göre gösteri hızlansın ve yavaşlasın istiyoruz. Numericupdown değerlerini saniye değeri olarak düşünüyoruz. Numericupdown un her değer değişiminde saniye ayarını numericUpDown_ValueChanged eventi içine yazdım. Butona her tıklamada yazısının değişimi ve timer'ın aktif edilip edilmeyeceğini kontrollerle belirledim. timer_Tick eventi içinde de değişken olan i değerine göre resimler ekrana sırayla getiriliyor. Projenin çalışmasından da bir görüntü verirsek eğer:


Picturebox kontrolü içinde resmin boyutunun otomatik olarak ayarlanması için properties bölümünden Size Mode özelliğini StrectchImage yapmak gerekir.
Resource dosyaları konusunda anlatacaklarım bu kadar, herkese iyi günler dilerim.

3 Haziran 2014 Salı

VERİ MADENCİLİĞİ VE VERİ AMBARI...

Veri Madenciliği nedir?

        Büyük miktardaki veriler içerisinden önemli olanlarını bulup çıkarmaya denir. Veri madenciliği uygulamalarında alt yapı gereksinimi veri ambarı ile sağlanır.

Veri Ambarı Nedir?

        İlişkili verilerin sorgulandığı ve analizlerinin yapılabildiği bir depodur. Veri ambarı veri tabanını yormamak için oluşturulmuştur. İlgili veriyi kolay, hızlı ve doğru biçimde analiz etmek için gerekli işlemleri yerine getirir.

Veri Ambarının Kullanım Amacı Nedir?

       Gizli ilişkiye ait olan verilerin gün yüzüne çıkartılıp işlenebilmesiyle verim arttırmayı amaçlar. Buna bir örnek gösterirsek;
       Bir alış-veriş merkezinde kahve alan müşterilerin %40'nın mutlaka çikolata türünden de alış veriş yaptığı saptansın. Bu bulguyu göz önünde bulunduran yönetici çikolata reyonu ile kahve reyonunu birbirlerine yakın olacak şekilde yeniden düzenleterek çikolata türü satım oranında belli bir yüzdeye varan artım sağlayabilir. İşte bu imkanı sağlayacak olan sistemin büyük bir parçası veri ambarı dediğimiz depodur. Bize bir stratejik analiz imkanı sunar.

Veri Ambarlarında Şema ve Tablo Yapıları

1. Yıldız Şema (Star Schema)

      En çok bilinen modelleme örneğidir. Modelin ortasında olgu tablosu (fact table) olarak adlandırılan ve içerisinde veri ambarının içerdiği en önemli veri kısmını gereksiz fazlalık bulundurmadan tutan merkezi bir tablo bulunur. Bu tablo boyut tablosu (dimension table) olarak adlandırılan keylerini tutuğu küçük tablolarla ilişkilidir. Bu yapı yıldıza benzetildiğinden bu şemaya Yıldız Şema (Star Shema) adı veerilmiştir.





2. Kar Tanesi Şema (Snowflake Schema)

      Dimension (boyut) tablolarının normalize (Normalization) edildiği, bundan dolayı verinin ek tablolara bölündüğü, yıldız şema modelinin değişik bir biçimidir.Yıldız şemada bulunan olgu tablosu (fact table) aynı şekilde burada da bulunur. Yalnız ilişkili olduğu boyut (dimension) tablolarının da normalize olup ilişkili olduğu boyut (dimension) tabloları bulunur. Bu şemanın yapısı da kar tanesine benzetilir.



3. Olgu Takımyıldızı Şema (Galaxy Schema)

      Karmaşık uygulamalar boyut tablolarını paylaşmak için çoklu olgu tabloları gerektirebilir. Bu çeşit bir şema yıldızların toplamı olarak görülebilir.