2011-07-07

SQL Server Kurulu Sunucularda Antivirus Kurmak

Veritabanı sunucunuza bir virüsün musallat olup sisteminizi işleyemez hale getirmesi, sizin için en kötü senaryolardan birisi olsa gerek. Veritabanı sisteminiz çalışmadığı zaman kurumda hayat durur. Çünkü kurumdaki tüm uygulamaların can damarı veritabanıdır. Can damarından vurulmuş bir kurumun iş sürekliliği yada disaster'ı yoksa toparlanması çok zor olabilir. Veritabanı sistemi ayakta olmayan bir kurum ayakta değildir! Bu yüzden veritabanı sisteminizi olası virüs saldırılarına karşı korumanız gerekir. SQL Server kurulu veritabanı sunucularına antivirüs kurmaya çoğu DBA soğuk bakar. Soğuk bakmasının temel sebepleri: antivirüs programının ne zaman ne yapacağının tam olarak kestirilememesi, veritabanı sistemine ait bir bileşenin antivirüs tarafından blocklanabilme ihtimali, veritabanı sistem performansının düşme riski vb. gibi risklerdir. Bu riskleri minimize etmek için antivirüs programlarında çeşitli ayarların yapılması gerekir. SQL Server kurulu sunuculardaki antivirüs'lerde aşağıdaki adımlar exclude edilmelidir:
  • SQL Server Veri Dosyaları
    • .mdf
    • .ldf
    • .ndf
  • SQL Server Backup Dosyaları
    • .bak
    • .trn
  • Fulltext Katalog Dosyaları
  • Eğer kurulu ise SQL Analysis veri dosyalarının barındığı dizin
  • Eğer sunucu cluster ise
    • Quorum Disk Sürücüsü
    • C:\Windows\cluster
Belirli testlerden sonra tüm standalone, cluster ve geocluster veritabanı sunucularımıza antivirüs kurduk. Tabi antivirüs kurmanın yanında veritabanı sunucularında aşağıdaki adımları da uygulayarak veritabanı sisteminizi daha güvenli hale getirebilirsiniz:
  1. Genel internet erişiminin engellenmesi,
  2. Firewall'ın açık hale getirilmesi,
  3. Diğer sunucular tarafından dosya çalıştırmaya izin vermeme, SQL'e erişim dışında bir yetki vermeme,
  4. Veritabanı sunucusunun HTTP server olarak kullanılmaması(IIS yada Apache çalıştırmama),
  5. Veritabanı sunucusunda file sharing'den kaçınmak.

2011-07-06

SQL ve Performans Üzerine

Bu gece twitter'da T-SQL Code Review da performans ile ilgili bir kaç hususu 160 karakter ile arzı endam eyledik, merak eden zevat bunları aşağıda bulabilir:

  • T-SQL de WHERE koşulları eşitsizlik üzerine kurulu geliştiriciye eşittir i aşılamak gerekir.Zira tuttuğu yolun eşiti çıkmaz.
  • Cross Joini Inner Joine dönüştüremeyen geliştiricinin tüm yolları CROSS dur, table/index SCAN dan bir türlü başını SEEK e çeviremez.
  • SELECT * ı alışkanlık haline getirmiş bir geliştirici Network u kendisine tahsis edilmiş Formula 1 pisti zanneder. Kodu trafiği alt üst eder!
  • İyi bir SQL ci az kod ile çok şey alabilendir; çok şey ile az kaynak tüketendir; veriyi disk yerine cache den okutabilendir.
  • Kodu ORDER BY a alışmış olan kişileri ORDER BY (hizaya çekmek) yapmak zordur.
  • Çok büyük kayıtlara sahip Temp Table kullanma hastalığına yakalanmış bir geliştiriciyi Physical Table Hastanesinde tedavi etmek gerekir.

2011-07-04

LOGINPROPERTY

Login policy ayarları hakkında bilgi verir.


Syntax:
LOGINPROPERTY ( 'login_name' , 'property_name' )

Parametreler:
login_name: Hakkında bilgi alınacak SQL Server login adı
propertyname: Login için bazı özellik bilgileri geri döndürür. Propertyname aşağıdaki değerlerden birini olabilir:

BadPasswordCount : Yanlış bir parola ile girişlerin ardışık denemelerinin sayısını döndürür.

BadPasswordTime : Yanlış bir parola ile giriş yapmak için son girişim zamanını döndürür.

DaysUntilExpiration : Parolanın süresi kadar gün sayısını döndürür.

DefaultDatabase : Kullanıcının giriş için default veritabanını döndürür.

DefaultLanguage : Kullanıcının giriş için varsayılan dilini döndürür.

HistoryLength : Şifre politikası uygulama mekanizmasını kullanarak, giriş için izlenen parola sayısını döndürür. 0: Password Policy uygulanmıyorsa. 1: Password Policy uygulanıyorsa.

IsExpired : Oturum açma süresinin dolup dolmadığı hakkında bilgi verir.

IsLocked : Loginin kilitli olup olmadığı hakkında bilgi verir.

IsMustChange : Bir sonraki girişte şifrenin değiştirilmesinin gerekip gerekmediğini hakkında bilgi verir.

LockoutTime : Lock tarihini geri döndürür.

PasswordHash : Şifrenin hash halini geri döndürür.

PasswordLastSetTime : Geçerli parolanın set edildiği tarihi döndürür.

Not: Login üzerinde VIEW yetkisini gerektirir. Password Hash için CONTROL SERVER yetkisini gerektirir.

Örnek-1: Mehmet kullanıcısının bir sonraki oturumda şifresinin değiştirilmesinin zorunlu olup olmadığını kontrol edelim

SELECT LOGINPROPERTY('mehmet', 'IsMustChange');

Örnek-2: Mehmet kullanıcısının lock olup olmadığını kontrol edelim

SELECT LOGINPROPERTY('mehmet', 'IsLocked');

Örnek-3: Lock olan tüm kullanıcıların listesini aşağıdaki T-SQL ile alabilirsiniz:

select name
from sys.server_principals
where loginproperty(name, 'IsLocked') =1

2011-07-02

SQL Server'da Görevler Ayrılığı (Separation of Duties)

Güvenlik giderek kurumlar için daha da çok önem kazanmaktadır. Bu doğrultuda kurumlar önemli verilerini korumak amacıyla kullanıcı ve yöneticilerin yetkilerini minimum seviyeye çekmek istemektedirler.

En basit ifadesiyle görevler ayrılığı ilkesi kurum için tehditleri ve güvenlik açıklarını önlemek üzere kullanıcıların yetkilerini düzenlemektir. Görevler ayrılığı ilkesini benimseyen kurumlar, tüm yetkilere sahip SQL Server DBA kullanıcılarının yetkilerini de düzenlemeye ihtiyaç duymaktadırlar.

SQL Server 2008 R2 yasal uyumluluk ve güvenlik uygulamalarını gerçekleştirmek üzere gerekli olan tüm araçları bünyesinde sunmaktadır. Görevler Ayrılığı ilkesinin gereksinimlerini uygulayarak verilerin korunmasını sağlarken, DBA kullanıcılarının da verimli çalışmaya devam edebilmeleri için neler yapılması gerektiğine dair sunduğumuz makale için: SQL Server Seperation of Duties

Kaynak: Microsoft TechNet

2011-06-23

SQL Server Agent Job, Schedule'ı Bittiği Halde Çalışıyor!

Bir SQL Server Agent job tanımladınız. Job frekansını recuring olarak set ettiniz. Job schedule'ını daily olarak ayarladınız. Job'ın çalışması için başlangıç ve bitiş tarihleri verdiniz. Job'ınızın bitiş tarihi bittikten sonra SQL Server Agent servisini restart ettiniz.  İşte tam bu noktada film kopuyor! O da ne, job'ınızın en son çalışma tarihi geçildiği halde job'ınız hala çalışmaya devam ediyor. Job Activity Monitor'de baktığınızda job'ınızın Next Run ı olmayacak ama Last Run ı sürekli olacak. Bu durum SQL Server Agent servisinin bir bug'ı ve bu bug Microsoft tarafından teyid edilmiş durumda. Sorun SQL Server Agent Job servisinin schedule algoritmasının hata üretmesinden kaynaklanıyor.

Çözüm: Aşağıdaki sürümler için ilgili Cumulative Update'leri yüklemek:
  1. SQL Server 2008 SP1 için CU 11 yüklemek
  2. SQL Server 2008 SP2 için CU 2 yüklemek
  3. SQL Server 2008 R2 için CU 6 yüklemek

2011-05-21

Yetki Kontrolü Yapma

/*
Bir veritabanında Delete yetkisi olan kullanıcıları aşağıdaki SQL kod  ile bulabilirsiniz:
*/

SELECT
a.*,
b.*
FROM sys.database_principals a
INNER JOIN sys.database_permissions b ON b.grantee_principal_id = a.principal_id
WHERE b.permission_name = 'DELETE'

2011-05-02

Microsoft SQL Server 2005/2008 Failover Clustering Workshop

Batuhan Yıldız'ın konuşmacı olacak katılacağı Microsoft SQL Server 2005/2008 Failover Clustering Workshop'unda olacağım.

Level: Up to 300
Tarih: 3-5 Mayıs 2011
Yer: Bellevue Residence, Aydın Sokak. No:7 Levent, 34340

Gündem:
Module 1: SQL Server High Availability Solutions
Module 2: Clustering Windows Server 2008 R2
Module 3: Configuring the Distributed Transaction Coordinator (MSDTC)
Module 4: Planning to Cluster SQL Server 2008
Module 5: Implementing a SQL Server 2008 Failover Cluster
Module 6: Rolling Upgrades and Updates to SQL Server 2008
Module 7: Maintaining and Troubleshooting a Clustered Instance of SQL Server 2008

2011-04-09

"The cluster resource of the Sql Server does not have a dependency on it" Hatası

Mevcut  cluster veritabanı sunucunuza yeni disklerin eklenmesi gerekebilir. Bu durumda disklerinizi Storage ekibinden alıp Cluster ekibine teslim ettiniz. Cluster ekibiniz de bu diskleri cluster a eklemiş olsun.  Bu yeni disklere başka sunuculardaki veritabanlarınızı restore yöntemiyle taşımak istiyorsunuz. Bu taşıma işlemi için detaylı düşünüp veritabanı kısmını ilgilendiren onlarca adımı tek tek yazıp; bu adımlarım scriptlerini çıkardınız. Bu scriptleri tek tek çalıştırıyorsunuz. Fakat restore adımında aşağıdaki hata ile karşılaşıyorsunuz:

Hata:
Msg 5184, Level 16, State 2, Line 1
Cannot use file 'X:\XXX.mdf' for clustered server. Only formatted files on which the cluster resource of the server has a dependency can be used. Either the disk resource containing the file is not present in the cluster group or the cluster resource of the Sql Server does not have a dependency on it.
Msg 3156, Level 16, State 3, Line 1
File 'XXX_data' cannot be restored to 'X:\XXX.mdf' . Use WITH MOVE to identify a valid location for the file.
Msg 5184, Level 16, State 2, Line 1
Cannot use file 'Y:\\XXX_1.ldf' for clustered server. Only formatted files on which the cluster resource of the server has a dependency can be used. Either the disk resource containing the file is not present in the cluster group or the cluster resource of the Sql Server does not have a dependency on it.
Msg 3156, Level 16, State 3, Line 1
File 'XXX_log' cannot be restored to 'Y:\\XXX_1.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 1
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.


Çözüm: Yeni eklediğiniz X:\ ve Y:\ disklerinizi SQL Server Cluster kaynaklarına ekleyin ve işlem adımlarınıza kaldığınız yerden devam edin.

Benim gibi tüm adımları çıkarıp, bu adımların ne kadar süreceğini biliyorsanız; uzun sürecek adımlarda çayınızı alıp kemali afiyetle yudumlayabilirsiniz yada yürüyüş yapabilirsiniz.

2011-04-06

Bulut ve Sunucu Ortamlarında Yeni Teknolojiler ve Güvenli Bilişim

7 Mayıs Cumartesi  günü  Bulut ve Sunucu Ortamlarında Yeni Teknolojiler ve Güvenli Bilişim konulu tam günlük Üniversite semineri düzenleniyor.

AJANDA
09:30–10:00 Kayıt
10:00–11:00 Yeni Nesil Siber Tehditler Karşısında Eski Tip Savunma Yöntemlerinin Yetersizliği – Huzeyfe ÖNAL
11:00–11:15 Çay Kahve Arası
11:15–12:15 Windows Intune ve Office 365 – Hakan UZUNER
12:15–13:15 Öğle Yemeği

13:15–14:15 Sanallaştırmada Hyper-V & Virtual Machine Manager Düeti – Serhat AKINCI
14:15–14:30 Çay Kahve Arası
14:30–15:30 DDoS Saldırıları ve BotNet Sorunu – Huzeyfe ÖNAL
15:30–15:45 Çay Kahve Arası
15:45–16:45 Shadow Forensics – İbrahim Saruhan –SANS
16:45–17:00 Kapanış

Adres : Ege Üniversitesi Bilgisayar Mühendisliği Bölümü 2.Kat B4 Amfisi - Bornova Metro Karşısı
Kayıt için http://www.cozumpark.com/register/kayit.aspx

2011-04-03

Tablodaki Bir Kayıtın Kapladığı Yeri Bulma

Herhangi bir tablonuzdaki bir kayıtın(row) ne kadar yer kapladığını(size) merak ediyorsanız aşağıdaki SQL ile bunu alabilirsiniz:

select sum(max_length) As ColumnSize
from sys.columns sc
where object_id=object_id('Musteri')


Bir veritabanındaki tüm tabloların row size'ını ise aşağıdaki SQL ile alabilirsiniz:

select object_name(object_id),
sum(max_length) As ColumnSize
from sys.columns sc
group by object_name(object_id)

.::YASAL UYARI::.

©2004-2023 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.