'xp_cmdshell' SQL Serverを有効にする


177

実行したい EXEC master..xp_cmdshell @bcpquery

しかし、次のエラーが発生します。

このサーバーのセキュリティ構成の一部としてこのコンポーネントが無効になっているため、SQL Serverはコンポーネント 'xp_cmdshell'のプロシージャ 'sys.xp_cmdshell'へのアクセスをブロックしました。システム管理者は、sp_configureを使用して「xp_cmdshell」の使用を有効にすることができます。'xp_cmdshell'の有効化の詳細については、SQL Server Books Onlineの「Surface Area Configuration」を参照してください。

これをアクティブにする方法、または機能を有効にする前に何かを実行する方法はありますか?

それを解決するには?

回答:


370

有効にする必要があります。xp_cmdshell MSDN docsのPermissionセクションを確認してください。

http://msdn.microsoft.com/en-us/library/ms190693.aspx

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

2
本当に、とてもシンプルで効果的です!
indofraiser、2015年

2
SQL Management Studioを管理者として実行してください
Haim Raman

本当にありがとうございました。数日間の解決策を探しています。
Mohan Rajput

2
セキュリティ -有効にしますが、注意してください!覚えておいてください:これ
1972

39

再構成後に詳細オプションを非表示にすることもできます。

-- show advanced options
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
-- enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
-- hide advanced options
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE
GO

19

サーバーを右クリック->ファセット->表面領域の構成-> XPCmshellEnbled-> true ここに画像の説明を入力してください


9

他の回答に記載されているように、(SQL 2005以降では)トリックのためのグローバル構成設定を変更することであるshow advanced optionsxp_cmdshell1、そのためには、。

これに加えて、以前の値を保持したい場合は、sys.configurations最初から値を読み取り、最後に逆の順序で適用できます。不要なreconfigure呼び出しを回避することもできます。

declare @prevAdvancedOptions int
declare @prevXpCmdshell int

select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options'
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell'

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 1
    reconfigure
end

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 1
    reconfigure
end

/* do work */

if (@prevXpCmdshell = 0)
begin
    exec sp_configure 'xp_cmdshell', 0
    reconfigure
end

if (@prevAdvancedOptions = 0)
begin
    exec sp_configure 'show advanced options', 0
    reconfigure
end

これはSQL Serverバージョン2005以降に依存していることに注意してください(元の質問は2008年でした)。


4

受け入れられた回答はほとんどの場合機能しますが、私はいくつかのケースに遭遇しました(まだ理由はわかりません)。WITH OVERRIDEin RECONFIGUREを使用してクエリを少し変更すると、解決策が得られます

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

期待される出力は

構成オプション「詳細オプションの表示」が0から1に変更されました。RECONFIGUREステートメントを実行してインストールします。
構成オプション「xp_cmdshell」が0から1に変更されました。RECONFIGUREステートメントを実行してインストールします。


4

この質問が解決されたとしても、私はそれについて私のアドバイスを追加したいと思います... 開発者として私は無視しました。

メッセージ警告で示されているように、MSSQLのxp_cmdshellが有効であることはセキュリティにとって重要であることを理解することが 重要です

SQLQサーバーは、コンポーネント 'xp_cmdshell'のプロシージャ 'sys.xp_cmdshell'へのアクセスをブロックしました。このコンポーネントは、このサーバーのセキュリティ構成の一部として無効になっているためです。[...]

サービスを有効にしたままにすることは一種の弱点であり、たとえばWebアプリでは、攻撃者からのコマンドSQLを反映して実行する可能性があります。人気のあるCWE-89SQL Injectionソフトウェアの弱点である可能性があるため、これらのタイプのシナリオは、CAPEC-108などの可能な攻撃への道を開く可能性があります。Command Line Execution through SQL Injection

私は楽しいことをしたいと思っています。開発者とエンジニアは意識して物事を行い、私たちはより安全になります!


0

私にとって、SQL 2008 R2での唯一の方法はこれです:

EXEC sp_configure 'Show Advanced Options', 1    
RECONFIGURE **WITH OVERRIDE**    
EXEC sp_configure 'xp_cmdshell', 1    
RECONFIGURE **WITH OVERRIDE**

-1

SQLcmdを使用して実行できます。次のコマンドを実行しました。 ここに画像の説明を入力してください


2
この回答がこの質問の他の回答者とどのように異なるかを示してください。また、スクリーンショットではなく、コードのコードブロックを使用してください。
Athafoud 2017

c:\> sqlcmd -S。-E 1)EXEC sp_con \
arnav 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.