2009年6月27日土曜日

[SQL Server]ファイル出力への道

SQL Server 2008 にて、ストアドプロシージャでログファイルを出力しましょうという話が挙がった。OracleのUTIL_FILEパッケージのようなものが用意されていると思って安請け合いしてしまったが、SQL Serverにはそういうの無いんですね…

調べると、システム拡張ストアド「xp_cmdshell」を使用すれば良いとのこと。DOSコマンドをSQL Serverから実行するものらしい。要はこのストアドでechoコマンド等を実行してファイル作れと。

但し、DOSコマンドが実行できるということは、echo以外のコマンドももちろん実行できてしまい危険極まりないため、デフォルトではこのストアドは無効となっており、sysadmin権限持っていようが実行できない状態。なので、これを使用するためには、有効にするスクリプト実行したり、さらにプロキシアカウントなるものを設定したりしなければならないのだが、これら全てを1ページで解説したページが見つからなかった(またまた検索力不足?)。よって、ここにメモする次第である。

1.「xp_cmdshell」の有効化

以下のスクリプトを実行。

2.「xp_cmdshell」の実行権限付与

下図のような感じでユーザーに「実行」権限を付与する。


3.プロキシアカウント(コマンドの実行アカウント)の用意

コマンドを実行するためのOSアカウント・ドメインアカウントを用意しましょう。意図しないコマンドの実行による障害を防ぐために、権限は必要最小限にしましょう。ログファイルを出力したい場合は、出力先フォルダに対する書き込み権限を忘れずに。

4.「xp_cmdshell」とプロキシアカウントの紐付け

以下のスクリプトを実行。


以上で設定終わり。以下のようにechoコマンド呼んだらうまくいきました。

0 件のコメント: