SQL Server 2005 ストアド プロシージャからの FTP のベスト プラクティスは何ですか?
-
08-06-2019 - |
質問
SQL Server ストアド プロシージャから FTP コマンドを実行する最適な方法は何ですか?現在、次のようなものを使用しています。
EXEC master..xp_cmdshell 'ftp -n -s:d:\ftp\ftpscript.xmt 172.1.1.1'
問題は、FTP がエラーで終了した場合でもコマンドが成功したように見えることです。また、 xp_cmdshell
特別な権限が必要であり、セキュリティ上の問題が発生する可能性があります。
解決
SQL 2005 を実行している場合は、CLR 統合アセンブリでこれを実行し、System.Net 名前空間の FTP クラスを使用して単純な FTP クライアントを構築できます。
例外をトラップして処理できると、xp_cmdshell を使用する必要があるセキュリティ リスクを軽減できるという利点があります。
ちょっと考えてみます。
他のヒント
もう 1 つの可能性は、DTS または Integration Services (SQL Server 7 または 2000 の場合は DTS、2005 以降の場合は SSIS) を使用することです。どちらも Microsoft 製で、SQL Server インストール (少なくとも Standard Edition) に含まれており、FTP タスクがあり、SQL Server からのインポート/エクスポート ジョブ用に設計されています。
データベース内から FTP を実行する必要がある場合は、Kevin が提案したように .NET アセンブリを使用します。これにより、プロセスを最大限に制御できるほか、レポート用に意味のあるエラー メッセージをテーブルに記録できるようになります。
もう 1 つのオプションは、コマンドを実行するためにデータベースを読み取るコマンド ライン アプリを作成することです。次に、そのコマンド ライン アプリを毎分または必要なポーリング期間に呼び出すスケジュールされたタスクを定義できます。これは、データベース サーバーで CLR サポートを有効にするよりも安全です。
Kev が例を投稿しました ここに これは、「これを CLR 統合アセンブリで実行し、System.Net 名前空間の FTP クラスを使用して単純な FTP クライアントを構築する」という彼の提案を実装しています。