これは、デフォルトで SQL Server をより安全にするために、Surface Area Configuration Toolを導入した SQL Server 2005 以降、すぐに無効になっています。このツールは廃止されましたが、 を使用して動作を制御できますsp_configure
。MSDN に例が示されています。
-- 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 を使用してファイル システムにアクセスするための適切な出発点を示します(ただし、検索すると、より最新で網羅的な方法が見つかります)。