- PR -

読取専用(SELECTのみ)のアプリケーション

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-10-22 07:49
unibon です。こんにちわ。

トランザクションを開始してから、(SELECT のはずだけどもしかしたら UPDATE かもしれない)SQL を実行し、その実行後は有無を言わさずロールバックしてしまう、という方法はどうでしょうか?良い副作用として、DML だけが許可され、DDL(DROP TABLE 等)を拒否できます。
思い付きなので、ほんとうにこんなことができるのかはわかりませんが。
ただ、お遊び的なアプリケーション(スクラッチ的なツール)ならこれでもよいのですが、普通はもっと別のソリューションのほうが良いでしょう。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-10-22 10:25
引用:

unibonさんの書き込み (2004-10-22 07:49) より:
トランザクションを開始してから、(SELECT のはずだけどもしかしたら UPDATE かもしれない)SQL を実行し、その実行後は有無を言わさずロールバックしてしまう、という方法はどうでしょうか?良い副作用として、DML だけが許可され、DDL(DROP TABLE 等)を拒否できます。


DDLってロールバックできないんじゃ…?
まあ、普通にDBユーザの権限で制限するのが無難じゃないかと思います…
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-10-22 10:37
unibon です。こんにちわ。

引用:

なちゃさんの書き込み (2004-10-22 10:25) より:
DDLってロールバックできないんじゃ…?


まあ、トランザクション内のコンテキストで DDL を実行すると、そもそもエラーになるかな、と思います...

引用:

なちゃさんの書き込み (2004-10-22 10:25) より:
まあ、普通にDBユーザの権限で制限するのが無難じゃないかと思います…


そうですね。ただ、設定が複雑だし、抜けがあったら怖いし、設定を変えてまた元に戻すのも面倒だし、とかそういう場合もあるかなと思います...

#あとで、引用の間違いを修正しました。

[ メッセージ編集済み 編集者: unibon 編集日時 2004-10-22 10:38 ]
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-10-22 10:59
引用:

実はSQLを投げるツールを作っています。本番に間違ってUPDATEやDELETEを投げてしまわないように読取専用のチェックボックスをつけようとしています。
ちなみに読取り専用ユーザも作っていますが、そのユーザを使わない人も多いのでチェックボックスで制御できないかと考えたのです。



既に読取専用ユーザを作成されているなら、ツール経由でOracleにアクセスするユーザを固定してしまってはどうでしょうか?
業務AP以外での本番DB更新は原則、認めない方針で良いと思います。
バグによるデータ障害のリカバリやマスタテーブルの更新時にはSQL文を作成してもらって、管理者がSQL*Plusで実行する。これでどうでしょうか。

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