- - PR -
【ASP.NET】セッション変数の値を外部で利用する方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-11 16:18
ASP.NET(VB.NET)&Oracle で開発しております。
現在開発しているWebシステムで、Oracle の TRIGGER を利用して、UPDATE と DELETE のログを採取しようと考えております。 要は、画面上でいつ誰がどういう処理(UPDATE・DELETE)をしたかを記録したいのです。 そこで問題となっているのが、「どのユーザが処理をしたか」という情報が取れない、という点です。ここで言う「ユーザ」というのは、OSのログインユーザではなく、開発中のシステムにログインしているユーザのことを指します。 (ログイン完了後、Session変数に保持しています) UPDATE は、UPDATE するテーブルに「更新ユーザID」という列があるので、これを利用すれば可能なのですが、問題は DELETE です。物理削除してしまいますので・・・ こういった場合は、アプリの方で、DELETE の時だけログをはくようにするしか無いのでしょうか? みなさんのお知恵をお借りしたいと思い、掲載した次第です。 よろしくお願い致します。 編集 : 件名が内容とあまりリンクしていませんね。申し訳ありません。 [ メッセージ編集済み 編集者: ひろれい 編集日時 2006-05-11 16:26 ] | ||||||||
|
投稿日時: 2006-05-11 16:37
UPDATE の場合も列から取ると、 最終更新者しかわからないことになってしまいませんか? DELETEでログを出力するつもりなら、 更新や追加でも同様にログを出力するようにしたほうがいいかも | ||||||||
|
投稿日時: 2006-05-11 17:04
かるあさん、お返事ありがとうございます。 はい。ログなので、その時に UPDATE した人(最終更新者)さえ分かれば良いのです。 ログテーブルには、UPDATE もしくは DELETE が行なわれた都度、レコードを作成していきますので。 ちなみに、ログのレコードには更新前データと更新後データの両方を出力します。
追加は、アップロード処理があって、ログを取り出すとあっという間にログ件数が大量になってしまうため、見送りました。 本当は、ログ採取方法は統一したいのです。 出来れば、工数が少ない TRIGGER で統一したいと考えています。 (今からアプリの更新と削除に全対応すると大変な工数になりますので・・・) ただ、DELETE の場合の最終処理者が取得できないため、困っている次第です。 | ||||||||
|
投稿日時: 2006-05-11 17:27
あっすみません。勘違いしていました。 UPDATE/DELETE のときに TRIGGER の中で 更新ログを出力したいっていうことですね。 うーん すみません良い手が思いつきません。 | ||||||||
|
投稿日時: 2006-05-11 18:03
ひろれいさんの立ち位置を推測すると、UPDATE/DELETE処理自体には手を出せない立場ということなんでしょうか?
ちなみにトリガーはBEFOREもしくはAFTERの指定ができます。 INSTEAD OFでトリガーだけ発行もできます ただDELETE文だけの場合、「更新ユーザID」列は当然古いままなので、もう一工夫いりますね・・・ | ||||||||
|
投稿日時: 2006-05-11 20:37
雲山さん、お返事ありがとうございます。 いいえ、手は出せますよ。ただ、修正箇所がそれなりにあるので、出来る限りソースは修正したくないな、と。製造・単体テストがある程度終わっているので、戻り工数が多くなってしまいますし。TRIGGER で対応できれば、そちらのテストで済みますよね。
TRIGGER 自体は作成できているので、後は deleting 時に設定するユーザIDだけなのです。 その「もう一工夫」で何か良い手がないかと考えているのですが、なかなか難しいですね・・・ | ||||||||
|
投稿日時: 2006-05-11 21:15
ちょっと視点が変わりますが。
HttpModuleを使ってみるのはどうでしょう。 UpdateやDeleteの際のリクエストのパターンを全部洗い出す必要はあるかもしれませんが、現行のソースに何も手を加えず、ユーザの操作をロギングできるかと思います。 Session変数の状態がきちんと格納されてからとなると、PreRequestHandlerExecuteイベントに対して独自の処理メソッドを実行するような形になるでしょう。 このイベントはページの処理がはじまる直前に発生するので、この時点でブラウザからのリクエストの内容を確認し、UpdateやDeleteのパターンに一致する場合にSession変数内のユーザ情報とリクエストのなかから必要なデータを取り出してログに残すことができるはずです。 | ||||||||
|
投稿日時: 2006-05-12 06:13
欧米の政府関係のシステムでは会計監査上の理由で、テーブルからレコードを物理的に削除することは禁止されているようです。削除フラグを付けて論理削除するのが一般的なようです。 グーグルで検索したら同じような記事がありました。英語ですが、よろしければ参考にしてください。 http://www.developerfusion.co.uk/show/2413/ _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 |