こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

select されたレコードの操作

以下のようなuser_idとuser_pwのtableがあります。

|id(ai)|user_id|user_pw|flg|
|1|AAA|111|0|
|2|BBB|222|0|

select id from table where user_id = AAA
をされると 1 を返し、
update table set flg = 1 where id = 1 かまたは
update table set flg = 1 where user_id = AAA

を発行したいと思っています。
ただ、sql 発行元から2個のsqlを出せない事情があり、DB側で対応しなければなりません。
トリガはselectでは使えませんよね? 
最悪、query_logを監視しながらselectが来たら自分でupdateを発行するスクリプト
しかないのかと考えています。
アドバイスお願いします。

投稿日時 - 2012-10-18 06:19:35

QNo.7753963

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

No.1です。

システム監査の一環という事でしょうか。
理解不足で申し訳ありませんでした。

が、自分自身をupdateするというのは、どうかと思います・・・。

そういった機密性の高いデータにアクセスがあったかどうかは、別なテーブルやログ・ファイル等に追記していくのが一般的です。

ちなみに、このようなオープンソースのソフトがありますので、利用されてみては如何でしょうか。

参考URL : http://sourceforge.jp/magazine/12/03/27/1333243

※また見当違いの回答でしたらスミマセン。

投稿日時 - 2012-10-18 10:42:12

補足

ありがとうございます。

戴いたURLを見てみます。

自身のtableをupdateするのも簡略化のためでございまして
本当は違うホストのちがうDBをupdate(本当はinsert)しております。

説明不足ですみません。

投稿日時 - 2012-10-18 10:58:04

なぜそのような処理をしなければならないのか、事情が分かりませんが・・・。

selectを監視してupdateするような仕組みが出来たとした場合、もし間違ってselectしてしまったような場合でも、データが更新されてしまうと思うのですが・・・。

ID、PWを誰かに見られたらフラグを立てて監視する。という目的で使用するのであれば、そもそも論として、ID,PWを暗号化し格納しておくのが普通かと思います。
見当違いでしたらスミマセン。

投稿日時 - 2012-10-18 09:48:05

補足

ありがとうございます。

目的は、そのuser_idによりselectされた事実を残すための処理となります。

select id from table where user_id = AAA and user_password = 111
では 1 をかえし
select id from table where user_id = AAA and user_password = 000
では null をかえす。

普段は1かnullが戻ってきたときにupdate を発行して上記目的を果たすのですが
今回はsql発行に制限がある(一般的なアプリケーション)ため、他の方法を探っています。


ID,PWはhash して格納してます。
#質問の本論ではないので、簡略化しました。

投稿日時 - 2012-10-18 10:27:02

あなたにオススメの質問