3 Temmuz 2008 Perşembe

SQL Server 2008: Güvenlik ile ilgili değişiklikler

Son güncelleme tarihi: 02 Temmuz 2008


Merhaba arkadaşlar,


SQL Server 2008' in güvenlik ile ilgili politikalarının bazılarında, SQL Server' ın önceki versiyonlarına göre bazı değişiklikler oldu. Bu yazımda sizlere bu değişikliklerden bahsedeceğim.

Bildiğiniz gibi SQL Server 2005, önceki versiyonlarına göre çok daha güvenliydi. Gerek tasarım olarak, gerek kurulumda gerekse varsayılan ayarlarıyla. SQL Server 2008' de bu güvenlik tedbirleri daha da sıkılaştırılarak bir adım öteye gidilmiş. Çok ahım şahım değişiklikler değil bunlar, fakat bilmenizde ve yeri ve zamanı geldiğinde hesaba katmanızda yarar var. Bu arada, burada bahsedeceğim güvenlik ile ilgili olan değişiklikler, SQL Server' ın eski versiyonlarındaki özelliklere göre yapılan değişikliklerdir. SQL Server 2008' deki güvenlik ile ilgili yeni özelliklere, farklı makalelerde değineceğim.

Peki nedir bu değişiklikler?

- SQL Server 2008 Setup' ta yükleme veya sürüm yükseltme esnasında "sa" hesabının adını değiştirebilme.
- SQL Server' ın eski versiyonlarında BUILTIN\Administrators Windows Grubu, SQL Server System Administrators "sysadmin" sunucu sabit rolüne eklenirdi. SQL Server 2008' de böyle olmayacak, yani Windows Yöneticileri doğrudan SQL Server Sistem Yöneticileri olmayacak artık.
- SQL Server tarafından oluşturulan "SQLServer2005MSSQLUser$-BİLGİSAYARADI-$INSTANCEADI" gibi Windows Gruplarına artık doğrudan SQL Server' a erişim izinleri verilmeyecek. Bunun yerine bu haklar, SQL Server servislerini başlatmak için kullanılan Windows hesabına verilecek.
- Surface Area Configuration aracı SQL Server 2008' de yok, yani kaldırıldı. Bunun yerine İlke Temelli Yönetim (Policy-Based Management) özelliği ve Configuration Manager' daki değişiklikler kullanılabilecek.
- Kerberos desteği genişletildi. TCP\IP' nin yanında, artık Named Pipes ve Shared Memory' yi de kapsıyor.

SQL Server "sa" hesabının adının değiştirilmesi:
"sa" hesabı varsayılan SQL Login' idir. "sysadmin" üyesidir ve bu değiştirilemez. Bu role üye olan bir Login, içinde bulunduğu SQL Server Instance' ında tüm yetkilere sahiptir. Bunu bilen korsanlar, sisteminize girmeye çalışacağı zaman ilk önce "sa" hesabına saldırırlar. Bir çok saldırı durumunda daha sonra "admin" isimli bir hesap denediklerini gördüm. Aslında SQL Server' da varsayılan olarak "admin" isminde bir hesap yoktur. Ama bildiğiniz gibi alışkanlıklarımız, güvenlik konusuna gelince en kırılgan noktamızdır. İnsanlar alışkanlıktan dolayı genelde "admin" isminde bir Login oluştururlar ve bunu da "sysadmin" rolünün bir üyesi yaparlar. Bu nedenle de korsanlar, SQL Server Instance' ınıza saldırdıklarında ilk önce olduğunu varsaydıkları bu Login' leri kırmaya çalışırlar.

"sa" hesabının adını değiştirmeniz ve bu hesaba güçlü bir şifre vermeniz (ki güçlü şifre denirken kastedilen, şifrenin içinde büyük-küçük harflerin, rakamların ve işaretlerin kullanılmasıdır) korsanların sisteminize en güçlü Login' lerle girmelerini engelleyici tedbirlerden olacaktır.

Tabi ki bu değişiklikleri yapmadan önce sisteminizi, uygulamalarınızı, Function' ları, Script' leri, CLR Assembly' leri gibi şeyleri de tekrar gözden geçirmeniz gerekebilir. "sa" hesabına bağlı uygulamalarınız, bu hesap ismini değiştirdiğiniz için artık çalışmayabilirler. Bu nedenle gerekli değişiklikleri uygulamalarınızda da yapmanız gerekebilir.

Mümkün olan her zaman Windows Authentication kullanmanız önerilir, ama öyle durumlar olur ki SQL Authentication kullanmanız gerekebilir. İşte böyle durumlarda yukarıdaki paragraflarda değindiğim tedbirleri almanızda büyük yarar vardır.

"sa" hesabı hakkında daha fazla bilgi için buraya tıklayın.

Windows Yerel Gruplarındaki değişiklik:
SQL Server' ın kurulması esnasında bazı Windows yerel grupları oluşturulur. SQL Server' ın, SQL Server 2008' den önceki versiyonlarında SQL Server servislerinin başlatılması için kullanılan servis hesapları bu yerel gruplara ekleniyorlardı. Servis hesabı ve Windows yerel gruplarına, işletim sistemi dosyaları ve Windows sistemi üzerinde haklar veriliyordu. Bu hesap ve gruplara SQL Server' da da bazı haklar veriliyordu.

SQL Server' ın yüklenmesi veya sürüm yükseltmesi esnasında seçtiğiniz özelliklere göre oluşturulan Windows yerel grupları aşağıdakilerden oluşur:

- SQL Server 2000
- OLAP Administrators

- SQL Server 2005
- SQLServer2005DTSUser$BİLGİSAYARADI
- SQLServer2005MSFTEUser$BİLGİSAYARADI$INSTANCEADI
- SQLServer2005MSOLAPUser$BİLGİSAYARADI$INSTANCEADI
- SQLServer2005MSSQLServerADHelperUser$ BİLGİSAYARADI
- SQLServer2005MSSQLUser$ BİLGİSAYARADI$INSTANCEADI
- SQLServer2005NotificationServicesUser$BİLGİSAYARADI
- SQLServer2005ReportingServicesWebServiceUser$BİLGİSAYARADI$INSTANCEADI
- SQLServer2005ReportServerUser$ BİLGİSAYARADI$INSTANCEADI
- SQLServer2005SQLAgentUser$ BİLGİSAYARADI$INSTANCEADI
- SQLServer2005SQLBrowserUser$ BİLGİSAYARADI

SQL Server 2008' de de bu Windows yerel grupları oluşturulacak, ama artık bu gruplara SQL Server içinde haklar verilmeyecek. Sadece, doğru Erişim Kontrol Listesi (Access Control List), SQL Server Motoru ve diğer özellikler için işletim sistemi hakları etkinleştirmesi amacıyla kullanılacaklar. Ancak SQL Server Setup boyunca servis hesapları olarak seçilen hesaplara SQL Server' da haklar atanacak.

Bir başka deyişle, Windows yerel grupları artık sadece işletim sistemi görevleri için kullanılacaklar. SQL Server servisleri için seçilen hesaplar da SQL Server ve veritabanı işlemleri için kullanılacaklar. Bu konuda daha fazla bilgi için buraya tıklayın.

Surface Area Configuration aracı:
Bu araç SQL Server 2005 ile birlikte geldi ve bu aracı, SQL Server' ın bazı özelliklerini açmak ve kapatmak için kullanıyoruz.

SQL Server 2008' de ise Surface Area Configuration aracı kaldırıldı. Bunun yerine çok daha gelişmiş bir özellik olan Policy-Based Management özelliğini kullanacağız. Bu konuda SQL Server' ın sanırım Kasım CTP' sinde bir örnek yaparak bunu yayınlamıştım. Bu makalemi okumak için buraya tıklayın. Bu özellik kısaca size SQL Server bileşenleri için ilkeler tanımlamanızı ve ayrıntılı bir şekilde bu ilkeleri SQL Server içindeki Principal ve Rollere uygulamanızı sağlıyor. Bu konuda daha fazla bilgi için buraya tıklayın.

Surface Area Configuration aracındaki bağlantılarla ilgili ayarları da -SQL Server 2005' te de yapabildiğimiz gibi- SQL Server Configuration Manager' da yapabilirsiniz. Örnek vermek gerekirse, TCP\IP, Named Pipes vb. protokollerin etkinleştirilip kapatılması gibi...

Kerberos Authentication:
SQL Server 2008' den itibaren, Kerberos Authentication desteği Named Pipes ve Shared Memory protokollerini de kapsayacak şekilde genişletildi. Buna ek olarak Kerberos, Windows Active Directory olmadan da kullanılabilecek. Bu konuda daha fazla bilgi için buraya tıklayın.



Ekrem Önsoy

Kaynak: Bu yazıyı yayınlarken Books Online' dan yararlandım.

SQL Server 2008 Release Candidate 0

Merhaba Arkadaşlar!


SQL Server 2008' in ilk Release Candidate versiyonu artık indirilebilir!

SQL Server 2008 RC 0' ı indirmek için buraya yıklayın!

Not:
"Release Candidate" versiyon, üretim ortamında kullanılabilecek bir versiyon değildir. SQL Server 2008 henüz resmen piyasaya sürülmemiştir ve Ağustos-Eylül gibi piyasaya sürülmesi beklenmektedir.

SQL Server 2008 RC0 versiyonunu sadece test amaçlı kullanmanızı tavsiye ediyorum. Zaten 180 gün sonra otomatik olarak kullanılamaz hale gelecektir.


Kolay gelsin,
Ekrem Önsoy

"System.data.sqlclient.sqlerror: Restore detected an error on page (0:0:) in database "veritabanı_adı" as read from the backup set. (Microsoft.sqlserv

HATA MESAJI:
"System.data.sqlclient.sqlerror: Restore detected an error on page (0:0:) in database "veritabanı_adı" as read from the backup set. (Microsoft.sqlserver.smo)"

AÇIKLAMA:
SQL Server 2005' te bir yedek dosyasını açmaya (Restore) çalıştığınızda bu hata ile karşılaşabilirsiniz.

ÇÖZÜM:
Açmaya çalıştığınız yedek dosyası büyük bir ihtimalle bozuktur. Bu hata mesajının alındığı durumlarda gördüğüm sorun hep buydu. Daha iyi bir yedek dosyası bulup, onu açmanızı tavsiye ederim.

Cursor' lar hakkında dikkat edilmesi gereken birkaç husus

Cursor' lar hakkında dikkat edilmesi gereken birkaç husus

Son güncelleme tarihi: 20 Haziran 2008


Merhabalar,


Bu yazımda Cursor' ların ne olduğunu anlatmaktan ziyade, Cursor' lar konusunda neye dikkat edilmesi gerektiğini ve Cursor' lar hakkında bir kaç ipucunu sizlerle paylaşacağım. Yani Cursor' ların neden ve nasıl kullanıldığını en azından basit seviyede de olsa bildiğinizi farzediyorum.

Cursor' ları kullanırken iyi düşünüp taşınmak, alternatiflerine bakmak ve eğer başka seçenek bulunamazsa kullanmak gerekir. Çünkü Cursor ile yapılan işlerin bir çoğu, diğer alternatiflerle de yapılabilmektedir. Bu yazımda bu alternatiflere değinmeyeceğim, ama en azından başlık olarak şunları sayabilirim: CASE, WHILE, tek satır döndüren SELECT sorguları. Kullanabildiğinizde Cursor yerine bu alternatifleri kullanmaya çalışın. Çünkü çoğu durumda Cursor' ların performansı, bu alternatiflerinin performansından daha düşük olacaktır.

Cursor' ların Kapatılması ve Hafızadan Kaldırılması
Cursor' lar konusunda dikkati edilmesi gereken bir husus ise, Cursor' ları bir Funtion veya SP içinde kullandıktan sonra kapatıp hafızadan silmektir. Bu işlemler için Cursor işleminin sonuna "CLOSE " ve hemen altında da "DEALLOCATE " komutları konmalıdır. CLOSE komutu tek başına yeterli değildir, çünkü sadece kilitlerin (lock) kalkmasını sağlar. Cursor' ı hafızadan temizleyen komut ise DEALLOCATE' tir. DEALLOCATE ile hafızadan kaldırılmamış bir Cursor, hafızayı işgal etmeye devam eder.

Hazıfadan kaldırılmamış Cursor' ları, SQL Server 2005' teki "SELECT * FROM sys.dm_exec_cursors(0)" komutu ile belirleyip, CLOSE ve DEALLOCATE komutlarıyla kapatıp hafızadan silebilirsiniz.

Performans
Daha iyi bir Cursor performansı için, sadece gerekli alanları ve satırları sorgulamalısınız. Meselâ aşağıdaki örnek, çoğu durum için oldukça kötü bir örnektir.

DECLARE cur_Personel_Listesi CURSOR FOR SELECT * FROM DBO.PERSONEL

Kötüdür, çünkü tüm alanları getirmekle kalmıyor, aynı zamanda da herhangi bir WHERE şartı kullanarak veritabanından dönecek olan kayıtları da sınırlamıyor. Bunun sonucu ise, çok daha fazla hafıza sarfiyatı olacaktır.

Eş Zamanlı Kullanım (Concurrency)
Eğer oluşturacağınız CURSOR ile herhangi bir kaydı değiştirmeyecekseniz, o zaman CURSOR' ın READ_ONLY seçeneğini de belirtmelisiniz. Bu, herhangi bir kilitlemenin olmayacağının göstergesidir. Eğer bu seçeneği açık bir şekilde belirtmezseniz, SQL Server bu Cursor' ı güncellenebilir olarak tanımlayacaktır. Çünkü bu, Cursor' ların varsayılan seçeneğidir.

Örnek:
DECLARE cur_Personel_Listesi CURSOR READ_ONLY FOR SELECT Personel_No FROM DBO.PERSONEL WHERE Personel_No > 10 AND Personel_No <20

Eğer güncellenebilir bir Cursor gerekiyorsa, o zaman OPTIMISTIC seçeneğini tercih etmeye çalışın. SCROLL_LOCK seçeneği tüm kayıtların başarıyla güncelleneceğini taahhüt eder, fakat büyük miktarda kaynak tüketir.

Cursor Tipleri
Bir Cursor' ı FORWARD_ONLY ve\ya da FAST_FORWARD olarak tanımlayabilirsiniz. FORWARD_ONLY tipi, Cursor' ın sadece ileriye doğru devam edeceğini ve başka bir noktaya konumlandırılamayacağını gösterir. Bu, diğer tiplere göre en etkili tiptir. Diğer tipler olan STATIC, KEYSET ve DYNAMIC geçici tabloları ve ek sunucu hafızasına ihtiyaç duyacakları için FORWARD_ONLY kadar etkili değillerdir.

Örnek:
DECLARE cur_Personel_Listesi CURSOR FORWARD_ONLY READ_ONLY FOR SELECT Personel_No FROM DBO.PERSONEL WHERE Personel_No > 10 AND Personel_No <20

FAST_FORWARD seçeneği ise FORWARD_ONLY gibidir. Cursor' ın gene sadece tek bir yöne doğru hareket edebileceğini gösterir. Bununla birlikte bu seçenek, Cursor' ın salt-okunur olduğunu da belirtir. FORWARD_ONLY seçeneği ise varsayılan olarak salt-okunur değildir. Bu nedenle FORWARD_ONLY' nin salt-okunur olması için bu komutla birlikte yukarıdaki örnekteki gibi READ_ONLY seçeneği de kullanılır. Ama READ_ONLY seçeneğini FAST_FORWARD ile kullanmaya gerek yoktur.


Ekrem Önsoy

"Directory lookup for the file "C:\Deneme\Ornek.mdf" failed with the operating system error 3(error not found)."

HATA MESAJI:
"Directory lookup for the file "C:\Deneme\Ornek.mdf" failed with the operating system error 3(error not found)."

AÇIKLAMA:
SQL Server 2005' te bir dosya yolu belirterek bir işlem yaptığınızda bu hata mesajı ile karşılaşabilirsiniz.

ÇÖZÜM:
Belirtilen yolun var olduğundan emin olun.

Meselâ böyle bir hata mesajı ile karşılaştığınızda, "C:\" sürücünüzde "Deneme" isimli bir klasörün olup olmadığından şüphe duyabilirsiniz.

"Move the file to a local NTFS volume, where the sector size can be retrieved."

HATA MESAJI:
"Move the file to a local NTFS volume, where the sector size can be retrieved."

AÇIKLAMA:
SQL Server 2005 yüklemesinin sonunda, yüklemenin başarısız olduğu konusunda böyle bir hata mesajı ile karşılaşabilirsiniz.

ÇÖZÜM:
SQL Server 2005 Instance' ını yüklemeye çalıştığınız diskte herhangi bir sorun olup olmadığından emin olmalısınız.

Bu hata ile karşılaşılan durumda, SQL Server 2005 Instance' ının yüklenmeye çalışıldığı sabit diskte bozuk kesin olup olmadığından emin olun. Eğer emin olamıyorsanız, o zaman SQL Server Instance' ınızı başka bir diske kurmaya çalışın.

"Tuning this edition of SQL Server 2005 is not permitted."

HATA MESAJI:
Tuning this edition of SQL Server 2005 is not permitted.

AÇIKLAMA:
Database Engine Tuning Advisor' ı çalıştırdığınızda böyle bir mesaj ile karşılaşabilirsiniz.

Database Engine Tuning Advisor (DTA) SQL Server 2005' in sadece Standard ve Enterprise Edition' larına karşı çalıştırılabilir. Tabii ki Developer ve Evaluation Edition' lara karşı da çalıştırılabilir, fakat lisans anlaşmaları gereği SQL Server 2005' in bu sürümleri zaten üretim ortamlarında kullanılamaz.

DTA, SQL Server 2005' in Workgroup ve Express Edition' larına karşı çalıştırılamaz. Çalıştırmayı denediğinizde ise, bu hata mesajı ile karşılaşırsınız.

SQL Server 2005 Instance' ınızın sürüm bilgisini öğrenmek için, SQL Server Instance' ınıza bağlanın ve Query Editor penceresinde, aşağıdaki kodu çalıştırın:

SELECT @@VERSION