PDA

View Full Version : اشکال در اجرای xp_cmdshell



sajjad_kochekian
شنبه 13 شهریور 1389, 00:13 صبح
دستور زیر ا وقتی اجرا می کنم پیغام خطای زیر را میده .
این security را کجا میشه فعال کرد.


Master . . xp_cmdshell
′ Dir C:\ ′


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.

esmit61
شنبه 13 شهریور 1389, 02:30 صبح
چون به صورت پیش فرض دسترسی به این قسمت وجود نداره


On the Start menu, point to All Programs, point to Microsoft SQL Server 2008, point to Configuration Tools, and then click SQL Server Configuration Manager.

Use the SQL Server Configuration Services area to start components and configure the automatic starting options.

بهزادصادقی
شنبه 13 شهریور 1389, 03:02 صبح
در حال حاضر، SQL Server شما طوری پیکر بندی شده که جلوی اجرای دستور xp_cmdshell را می گیرد. برای اینکه بتوانید این دستور را اجرا کنید، باید پیکر بندی SQL Server خود را عوض کنید. شما از دو طریق مختلف می توانید این کار را انجام دهید، که اتقاقا، همان پیغام خطائی که از SQL Server دریافت نموده اید به هر دوی این راه ها اشاره می نماید.

1. استقاده از stored procedure سیستمی معروف به sp_configure.
2. استفاده از برنامه SQL Server Surface Area Configuration که یکی از برنامه هایی است که در هنگام استقرار SQL Server 2005 در روی منوی Configuration Tools در Windows قرار داده می شود.

استفاده از sp_configure استاندارد خاص خود را دارد. تعداد عظیمی از گزینه های پیکر بندی SQL Server را می توان با این stored procedure تنظیم کرد. معمولا این sp دو تا پارمتر دارد. معمولا، با استفاده از پارامتر اول آن شما به SQL Sever می گویید که کدام یک از گزینه های پیکر بندی سرور را می خواهید تغییر دهید. معمولا، با استفاده از پارامتر دوم این اس پی به SQL Server می گویید که ارزش یا مقدار جدید آن گزینه چه باید باشد. مثلا، در مورد توان استفاده از دستور xp_cmdshell، کد ذیل به SQL Server دستور می دهد که قابلیت اجرای این دستور را فعال کند:



EXEC sp_configure 'xp_cmdshell', 1


اینحا، عدد 1 این معنی را می دهد که شما می خواهید قابلیت مذکور را فعال نمائید. استفاده از عدد 0 در مقام پارامتر دوم به این معنی خواهد بود که شما می خواهید سرور این قابلیت را غیر فعال نماید.

ولی اگر کد بالا را اجرا کنید، خواهید دید که هنوز نمی توانید از xp_cmdshell استفاده نمائید. علتش این است که تغییراتی را که با استفاده از sp_configure دستور آنها را می دهید بلافاصله در سیستم مورد اعمال قرار نمی گیرند. شما می توانید با چند بار اجرای sp_configure، لیست متعددی از تغیرات پیکر بندی را به SQL Server ابلاغ نمائید. همه دستورات شما برای تغییر وضعیت پیکربندی سرور در خود سرور جمع آوری و آماده اجرا خواهند شد. ولی اجرای واقعی آنها فقط زمانی اتفاق می افتد که شما دستوری به اسم reconfigure را اجرا کنید. این دستور به SQL Server می گوید که تمام تغییراتی را که کاربر با استفاده از sp_configure در پیکر بندی سرور درخواست کرده است را بلافاصله اعمال نماید.

پس، کد شما در حقیقت باید این باشد:



EXEC sp_configure 'xp_cmdshell', 1
GO

RECONFIGURE
GO


حال، امکان دارذ اجرای دستورات بالا در سیستم شما به مشکلی بر خورد. امکان دارذ زمانی که شما دستورات بالا را در SQL Server Management Studio اجرا می کنید، به خطای زیر بر بخورید:



Msg 15123, Level 16, State 1, Procedure sp_configure, Line 51
The configuration option 'xp_cmdshell' does not exist, or it may be an advanced option.


حل این مسئله ساده است. مشکل از آنحا سرچشمه می گیرد که تعداد گزینه هایی که شما می توانید با sp_configure پیکر بندی شان را تغییر دهید آن قدر زیاد است که Microsoft تصمیم گرفته آنها را به دو گروه تقسیم کند. یک گروه از آنها را گروه معمولی می نامند، و شما همیشه از طریق sp_configure به آنها دسترسی دارید. گروه دیگر را گروه Advanced Options می نامند. قابلیعت فعال کردن xp_cmdshell یکی از گزینه های این گروه است. تنها فرق این گزینه ها با گزینه های معمولی این است که sp_configure معمولا آشنایی با آنها را تکذیب می کند. یعنی، هر وقت سعی کردید یکی از این گزینه های پیکر بندی را تغییر دهید، SQL Server خطایی را که در بالا مشاهده می کنید به شما باز می گرداند. مگر اینکه اول از SQL Server بخواهید که دیگر آشنایی با این گزینه ها را تکذیب نکند. برای این کار، شما باید از خود sp_configure استفاده کنید. اجرای دستور زیر:



EXEC sp_configure 'show advanced options', 1
GO

RECONFIGURE
GO


باعث می شود SQL Server دیگر خود را به کوچه علی چب نزند، و رضایت دهد به اینکه با گزینه های گروه Advanced Options نیز آشناست و می تواند با آنها کار کند. اگر شما کد بالا را اجرا کنید، یک دفعه می بینید که خطایی را که در بالا از sp_configure هنکام سعی در استفاده از گزینه 'xp_comdshell' دریافت می کردید، ذیگر دریافت نخواهید کرد.

پس، کلا، اگر می خواهید همه این کارها را یک باره و با هم انجام دهید، کافی است که کد زیر را اجرا نمائید:



EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO