İpucu – Sql Server’a Admin Olarak Bağlanamamak

Yakın zamanda başıma gelen bir olaydan bahsetmek istiyorum..

Domain değişikliği yapmıştık. Genel anlamda zorlu bir süreçti. Daha sonra test sistemimizdeki Sql Server 2008 üzerinde yetki ile alakalı ufak bir sıkıntı yaşadık. Şöyle ki;

Windows Authentication olarak Sql Server’a bağlandım ve sysadmin rolündeki tüm windows hesaplarını, tekrar eklemek üzere kaldırmaya başladım. Son kaldırdığım hesap çok tanıdıktı! Ve bir sonraki işlemimde aldığım yetkin yok hatası ile farkettim / hatırladım ki Sql Server 2008’de BuiltinAdministrators grubu varsayılan olarak sysadmin rolünde değildi. Halbuki Sql Server 2005’te, kurulum esnasında bu grup ekleniyordu..

Sonuç olarak çulsuz kalmıştım, bunun başka da bir açıklaması olamazdı.. Neyse ki sa kullanıcısı duruyordu diyerek avuttum kendimi. Ama bu da pek uzun sürmedi. Sa hesabı ile hatalı girişler yaptım önce. Denedim, denedim.. Olmadı. (Test sistemi olduğu için önemsenmiyordu ve sa kullanılmadığı için elimdeki şifreler güncellenmemişti) Ee haliyle sa hesabı kilitlendi ve “login failed for user sa because the account is currently locked out” hatası almaya başlamıştım.

Sql Server’ı kaldırıp-kurmak, veritabanları eklemek (detach/attach) gibi bir dünya iş yükü anlamına gelen bu sonuçtan basitçe nasıl kurtulabileceğimizi anlatmak istiyorum bu yazıda..


Sql Server’ı tek kullanıcı modu (Single-User Mode) ile açmamız gerekiyor. Bu mod sistem adminlerinin Sql Server’a erişebilme yetkilerini kaybettiğinde durumu kurtarma amaçlı hazırlanmıştır. (Aha da!)

Hangi şartlarda kullanılması gerektiğine bakarsak;

– Tüm sysadmin rolündeki Sql Server hesaplarının yanlışlıkla silinmesi veya aktif olmaması durumlarında,

– Tüm sysadmin rolündeki Windows hesapları/gruplarının yanlışlıkla silinmesi veya aktif olmaması durumlarında,

Sa hesabının aktif olmaması, şifresinin bilinmemesi veya kilitli olması durumlarında kullanabiliriz.

Single-User modunu kullanabilmek için admin yetkilerine sahip bir windows kullanıcı hesabı gerekiyor. Bu hesap ile Sql Server’a Single-User Mode’u ile bağlanıp admin yetkilerine sahip bir windows hesabını Sql Server Role’lerinden sysadmin’e ekleyeceğiz.

Adından da anlaşıldığı üzere, bu modda Sql Server’a sadece bir kullanıcı ile erişebiliyoruz. Bu sebeple öncelikle Sql Server Agent ve Sql Server servislerini durdurmalıyız. Çünkü Single-User modunda Sql Server’ı başlattığımızda farklı bir kullanıcının bizden önce bağlanabilme ihtimalini engellememiz gerekiyor.

Servisleri durdurduktan sonra command prompt’a geçerek “C:Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn” dizinine erişip aşağıdaki kod ile Sql Server’ı Single-User Mode’da başlatıyoruz. ( Benim makinamda kurulu varsayılan yol bu, sizde değişiklik gösterebilir. )

sqlservr -m
( -m: Sql Server’ı Single-User Mode’da başlatmak için kullanıyoruz. )

Pek çok bilgi geliyor ekrana ve hazır olduğunda aşağıdakine benzer bir ekran ile karşılaşıyoruz.

Sql Server’ı Single-User Mode’da başlattıktan sonra, yeni bir command prompt açıp sqlcmd utility‘si yardımı ile sorgularımızı yazıyoruz.

sqlcmd -e
( -e: trusted connection anlamında kullanılıyor. )

Bağlandığımızda satır sayılarını gösteren ve bizden sorgu yazmamızı bekleyen bir ekranla karşılaşıyoruz. Burada sırasıyla aşağıdaki kod bloklarını yazıp çalıştırıyoruz.

create login [PCPURAXAYS\PURAK] from windows go

Böylelikle admin grubundaki PCPURAXAYS\PURAK windows hesabı Sql Server’ın kullanıcı hesaplarına eklendi. Eklediğimiz bu hesaba rol tanımlaması yapmak için de aşağıdaki kod bloğunu çalıştırıyoruz.

exec sp_addsrvrolemember [PCPURAXAYS\PURAK], [sysadmin] go

Farkettiğiniz üzere aslında t-sql sorgu cümleleri yazıp çalıştırıyoruz. Son yazdığımız satırlar sonucunda ise bir sistem saklı yordamı ( stored procedure ) olan sp_addsrvrolemember‘ı kullanarak sysadmin rolüne PCPURAXAYS\PURAK windows hesabını dahil ediyoruz.

İşlemimizi gerçekleştirdik.

shutdown go

Kodları ile bağlantımızı kapatalım. Böylelikle Sql Server’ı Single-User Mode ile başlattığımız oturumun da sonlandığını göreceğiz.

Son olarak Sql Server servisini başlatıyoruz. Artık Sql Server Management Studio’yu kullanarak PCPURAXAYS\PURAK hesabı ile Windows Authentication modunda bağlantı gerçekleştirebiliriz. Security sekmesi altındaki Server Roles’un içeriğine baktığımızda sysadmin rolüne PCPURAXAYS\PURAK hesabının dahil edildiğini görebiliriz.

Sanıyorum ilk işimiz sa kullanıcı şifresini değiştirmek veya sysadmin rolüne yeni kullanıcılar eklemek olacaktır.. =)

:: Notlar

- Sql Server Management Studio kullanılarak veritabanına bağlanıp sorgu çalıştırıldığında, Microsoft .Net Framework SqlClient provider'ı, command prompt ile sqlcmd utility'si kullanıldığında ise OLE DB provider'ı kullanılıyor.

- Troubleshooting: Connecting to SQL Server When System Administrators Are Locked Out
- sqlcmd Utility
- Starting SQL Server in Single-User Mode
  • http://alikaptanoglu.blogspot.com uykucu

    Yararlı olmuş eline sağlık.