Recent comments

İçerik Ara



Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2011
Takvim
<<  May 2012  >>
MoTuWeThFrSaSu
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Keywords

DBA olarak bazen system üstünde işlem yapmak isteyebiliriz. Yada server da windows account umuz yoktur ama windows üzerinde bir işlem yapmamız gerekebilir. Böyle bir durumda xp_cmdshell imdadınıza yetişecektir.

xm_cmdshell ile windows üzerinde işlettiğiniz komutları SQL Server aracılığıyla yapabilirsiniz. Burada yapabilecekleriniz SQL Server service account unun yapabilecekleri ile sınırlı. Eğer local admin se değmeyin keyfimize :)

xm_cmdshell i SQL Server da kullanan login in sysAdmin olması gerekmekte. Bu şekilde bir sysAdmin user ıyla ilk denememizi yapalım.

Örneğin c:\ klasörüne dır çekelim.

xp_cmdshell 'dir c:\'

 

Execute ettiğimizde aşağıdaki gibi bir hata aldığınız değil mi?

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.

Bunun sebebi SQL Server kurulumunda güvenlikten dolayı default olarak xm_cmdshell in disable gelmesi. Dolayısıyla bu işlemi gerçekleştirmek istiyorsak xp_cmdshell i enable etmeliyiz.

xp_cmdshell i sp_configure ile enable edebiliriz. bunun için aşağıdaki kodu execute etmeniz yeterlidir.

 

sp_configure 'show advanced options',1
reconfigure
sp_configure 'xp_cmdshell',1
reconfigure


dir komutunu tekrar çalıştırırsak sonucu göreceğizdir.

xp_cmdshell 'dir c:\'


dr1

Yazımın başında xp_cmdshell i kullanabilmek için sysAdmin olmak gerekiyor demiştim. Bu gerekliliğin nasıl ortadan kaldırılabileceğini anlattığım makaleme aşağıdaki linkten ulaşabilirsiniz.

http://www.turgaysahtiyan.com/post/SQL-Server-Proxy-Account-Kullanarak-sysAdmin-Olmayan-User-lara-xp_cmdshell-Kullandc4b1rmak.aspx

İyi çalışmalar

Turgay Sahtiyan

Vmware gibi sanallaştırma çözümleri, sundukları kolaylıklardan dolayı daha sık kullanılır oldu. Bu gibi çözümlerde template üzerinden 20 dk gibi kısa bir sürede yeni bir windows server hazırlamak mümkün. Template diğer sunduğu bir özellik ise bütün server larda olmasını istediğimiz programları template e yüklemek ve bu şekilde yeni hazırlanan server ların default olarak bu programlara sahip olmasını sağlamak. Bu bize ciddi anlamda zaman kazandırmakta.

SQL Server da template içine dahil edilebilen uygulamalardan biri. Bu yapı sayesinde 20 dk gibi bir sürede üzerinde SQL Server olan bir Windows server ı configuration ları bile yapılmış halde hazırlamak mümkün.

Bu şekilde template üzerinden hazırlanan SQL Server da ufak bir ayar yapmak gerekmekte. Yeni kopyalanan server ın adı template server adından farklı olduğu için SQL Server tarafında server adını değiştirmek gerekmekte.

İşte bugünkü makalemizin konusu SQL Server da server adının nasıl değiştirildiğini görmek ve aynı zamanda bu değişiklik esnasında ortaya çıkan bir problem olan @@servername in neden null değer getirdiğine bakmak.

İlk önce instance ımızın adına bir bakalım.

sd1

Şimdi adı değiştirelim. İlk önce olan server ı drop edeceğiz. Daha sonrada yeni isimle server ı add edeceğiz.

sp_dropserver 'FUNNYCIK\S10ENT'
GO
sp_addserver 'FUNNYCIK\S10ENT_Temp',local
GO

 

SQL Şimdi instance adına tekrar bakalım.

sd2

Gördüğünüz gibi sys.servers ta beklediğimiz sonuç gelirken @@servername hala eski server adını getirmekte. Bunun sebebi değişikliğin aktif hale gelebilmesi için SQL Server Service ini restart etmemiz gerekmekte.

Service i restart edip instance adına tekrar bakalım.

sd3

Her 2 sorgu sonucu da istediğim sonucu verdi. İşlemlerimiz tamam.

 

Şimdi yazımın başında bahsettiğim hata mesajına gelelim. Yani @@servername in null değer döndürmesi.

Bunun sebebi sp_addserver SP sinde local keyword ünün kullanılmaması.

Yani aşağıdaki gibi bir kullanımda @@servername sorgusu null değer döndürecektir.

sp_dropserver 'FUNNYCIK\S10ENT_Temp'
GO
sp_addserver 'FUNNYCIK\S10ENT'
GO

 

sd4

Dolayısıyla ne yapmıyoruz. local keyword ünü yazmayı unutmuyoruz. :)

 

İyi çalışmalar

Turgay Sahtiyan