7

重複の可能性:
'xp_cmdshell' SQL Server を有効にする

SQL Server 2012 でコマンドを実行するとxp_cmdshell、次のメッセージが表示されます。

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

しかし、SQL Server 2000 では、このクエリは正常に実行されます。

4

2 に答える 2

20

これは、デフォルトで SQL Server をより安全にするために、Surface Area Configuration Toolを導入した SQL Server 2005 以降、すぐに無効になっています。このツールは廃止されましたが、 を使用して動作を制御できますsp_configureMSDN に例が示されています

-- 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

(私も何年も前にこれについてブログを書きました。)

その理由は、これが潜在的なセキュリティ ホールであるからです。SQL Server の実行を許可するxp_cmdshellと、理論的には、SQL Server はそこにオペレーティング システム コマンドを送信、あなたが考えていたすべてのセキュリティをバイパスできます。これは、SQL Server サービス アカウントやプロキシ アカウントが sysadmin またはその他のレベルに昇格されている場合に特に問題になります。これは、実行できる必要があることだけを明示的に定義するよりも簡単だからです。

コマンド ラインの対話をサポートするために有効または無効にするのではなく、セキュリティをある程度制御しながらオペレーティング システムの機能を公開する一般的な方法は、SQL-CLR を使用して必要な OS レベルの機能を実装することです。ここでは、CLR を使用してファイル システムにアクセスするための適切な出発点を示します(ただし、検索すると、より最新で網羅的な方法が見つかります)。

于 2013-01-27T18:00:44.170 に答える
3

これは、SQL Server 2012 では無効になっています。ただし、SQL Server 2008 では次のコマンドを実行できます。

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
于 2013-01-27T17:34:48.177 に答える