- PR -

ASP.NETでファイル書込みしたいのですが

投稿者投稿内容
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-06-02 18:12
こんにちは、でっちです。

どなたも指摘されてませんが...

引用:

ログ出力はlog4netにてファイルを出力し、そのファイルをOracleで外部テーブルとして読込み、データセットでアクセスし表示などの処理をしていました。



log4net使ってるなら、テーブル作って直接DBにログ吐いちゃう設定にした方が早いような...
APサーバが複数台になった時にも対応が取れますし。

ファイルの書込み権限は、「ASP.NET ユーザ 偽装」あたりのキーワードでググると幸せになれると思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-02 22:31
今年初めにハマりました。

 DB サーバに「ASPNET」アカウントがある場合、Web サーバの「ASPNET」アカウントとパスワードが異なるため、書き込みできません。
あ、Windows 2003 Server か。
『たぶんNETWORK SERVICEだと思いますよ…』ですね。

 DB サーバと Web サーバに、同じ名前で同じパスワードのアカウントを作り、ファイルを書き込むときだけそのアカウントに偽装します。

 ドメイン環境なら、ドメインのアカウントに偽装します。
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2006-06-02 23:20
引用:

でっち6号さんの書き込み (2006-06-02 18:12) より:
こんにちは、でっちです。

どなたも指摘されてませんが...

引用:

ログ出力はlog4netにてファイルを出力し、そのファイルをOracleで外部テーブルとして読込み、データセットでアクセスし表示などの処理をしていました。



log4net使ってるなら、テーブル作って直接DBにログ吐いちゃう設定にした方が早いような...
APサーバが複数台になった時にも対応が取れますし。

ファイルの書込み権限は、「ASP.NET ユーザ 偽装」あたりのキーワードでググると幸せになれると思います。




そうですね。ADOAppenderでしたっけ?
最初頃それも考えたんですが、メッセージ部分は一括して1つのカラムに出力することになるはずです。
そのメッセージ部分にカンマ区切りで複数の情報を入れ、それぞれの内容で検索をかけたかったので、Oracleの外部テーブルを作ることにしたのです。

現在ひとつひとつハマリ中です。
Log4netのファイル出力先のパスをUNCで書くとよいということでしたが、
ためしにローカルのファイルを指定してみました。

<param "File" "C$\\Test\\weblog.log" />

すると思いっきり"C$\\Test\\weblog.log"という名前のファイル名になって出力されました。定義ファイルはXMLファイルなのでうまくいかないのでしょうか?
(それとも¥の書き方がXMLだと違う?)
ここがクリアされないと、偽装がうまくできてもダメですよねぇ。
(\\と表示されている部分は¥マーク(半角)です)

偽装についてはまだ勉強中です。
わかりそうでわかりませんが、もう少し頑張ってみます。
wild cat
会議室デビュー日: 2002/08/29
投稿数: 13
投稿日時: 2006-06-03 03:19
UNCの指定は、
\\DBServer\test\weblog.log
ではないですか?
(\は¥です。また、"DBServer"は適宜変更してください。)
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-06-03 16:39
引用:

Jittaさんの書き込み (2006-06-02 22:31) より:
 DB サーバと Web サーバに、同じ名前で同じパスワードのアカウントを作り、ファイルを書き込むときだけそのアカウントに偽装します。
 ドメイン環境なら、ドメインのアカウントに偽装します。



これ大事ですよね。特に
ファイルを書き込むときだけそのアカウントに偽装します。
の部分。

これは、Microsoft の consult の方に聞いて素直に納得したんですが、通常 .NET で偽装というと web.config での偽装を想定することが多いと思うので補足が必要ではないですか? > jitta さん

web.config の場合、ASP.NET で動くものすべてがその偽装 account で動くため、secure ではないですね。
# まあ、ここら辺はどこまでの security level を求められるかにもよりますがね。
# ちゃんとやるとなるとそれこそ手間かかりますから。

ちなみに、OS とかが標準で持っている機能を利用しようとしないで偽装を行う場合、一般的に password が必須だったりします。
# まあ、OS が標準で持っている機能にしたって内部で password を保存しているわけですが・・・

そういった場合、password をどこにどうやって保存するかというのが問題になります。
Microsoft では一応こんな方法を公開していますね。

セキュリティ保護された ASP.NET アプリケーションの構築 : 認証、認定、および通信のセキュリティ保護
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2006-06-03 21:29
Jittaさん、ちゃっぴさんありがとうございます。

やっぱり軽い気持ちではやらないほうがよさそうですね。
勉強している時間は今はないので(納品間近です!)今回はデバッグログのみ
log4netでファイル出力して、管理画面で検索可能なログ(トランザクションが発生する場合のみ出力)はDBに登録する事にしました。

結局偽装は行わなかったわけですが、
いづれ必要になるテクニックだと思いますのでやはり勉強は必要だと思います。
それにできなかったのが悔しい・・・。

とりあえず今回はこのへんで。
皆様、いつも本当に本当にありがとうございました!
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-06-04 21:54
IIS5だとweb.configで偽装する形になりますが、IIS6の場合はワーカープロセスの
実行アカウント(ASP.NETの実行ユーザ)を変更するのが簡単にできるようですね。
「ASP.NETでいってみよう」という本にIISと別マシンにあるSQL Serverとの連携と
いうことで説明されていますが、ファイルシステムであっても同様の手順で
いけると思います。
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2006-06-04 23:15
どっとねっとふぁんさん、私その本持ってます!
ASP.NETを始めるにあたって、一番最初に買った本です。

いやぁ、当時はそこまで読み込んでなかったんですね。
もちろん読み直します!
貴重な情報ありがとうございました。
ぜひ、ぜひトライしてみますよぅ!

スキルアップ/キャリアアップ(JOB@IT)