DBA olarak bazen system üstünde
işlem yapmak isteyebilirsiniz. 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.
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
GO
sp_configure 'xp_cmdshell',1
reconfigure
dir komutunu tekrar çalıştırırsak sonucu göreceğizdir.
xp_cmdshell 'dir c:\'
Yazımın başında xp_cmdshell i
kullanabilmek için sysAdmin olmak gerekiyor demiştim.
SQL Server da xp_cmdshell i kullanabilmek için sysAdmin
rolüne sahip olmak gerekmektedir. Ya da proxy account
kullanmak gerekmektedir.Bugünkü makalemizin konusuda proxy account kullanarak sysAdmin olmayan user lara xp_cmdshell i kullandırabilmek için yapılması gereken ayarların ne olduğunu anlatmak olacaktır.
Adım olarak denemeler yapacağız bir sql login create edelim
ve master a map yapalım. Kullanıcı adı xpDeneme ve
şifresi x.
USE
[master]
GO
CREATE LOGIN [xpDeneme] WITH
PASSWORD=N'x', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE
[master]
GO
CREATE USER [xpDeneme] FOR
LOGIN [xpDeneme]
GO
Şu an da xpDeneme user ı
ile SQL Server üzerinden xp_cmdshell 'dir'
komutunu çalıştırırsanız aşağıdaki gibi bir hata alacaksınızdır.
The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
Bu hatayı almaktayız, çünkü xpDeneme login i sysAdmin değil. Dolayısıyla proxy account kullanmamız gerekmekte. Bunun için aşağıdaki kodu server üzerinde yetkili bir windows yada domain user çalıştıralım.
The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
Bu hatayı almaktayız, çünkü xpDeneme login i sysAdmin değil. Dolayısıyla proxy account kullanmamız gerekmekte. Bunun için aşağıdaki kodu server üzerinde yetkili bir windows yada domain user çalıştıralım.
EXEC sp_xp_cmdshell_proxy_account 'windowsusername', 'password';
GO
xpDeneme login i için
master db sinde bulunan xp_cmdshell e execute yetkisi verelim
GRANT exec ON xp_cmdshell TO
xpDeneme
GO
xpDeneme login i ile tekrar xp_cmdshell
'dir' kodunu çalıştırırsak sonucun geldiğini göreceksiniz. Dolayısıyla
işlemlerimizi tamamlamış oluyoruz.
Burada dikkat etmeniz gereken
şöyle bir şey var. Bütün ayarlamaları yapmış olmanıza rağmen aşağıdaki gibi bir
hata almanız mümkün.
An error occurred during the
execution of sp_xp_cmdshell_proxy_account. Possible reasons: the provided
account was invalid or the '##xp_cmdshell_proxy_account##' credential
Bunun sebebide 4.adım ı server
üzerinde yetkili olan bir user için yapmamış olmanız. Bu adıma da dikkat
ederseniz bir sorun yaşayacağınızı düşünmüyorum.
Hiç yorum yok:
Yorum Gönderme