- PR -

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

投稿者投稿内容
ちゃんこ
会議室デビュー日: 2004/01/11
投稿数: 10
投稿日時: 2004-10-20 22:42
SQLを投げるC#のアプリケーションを作成しています。
SELECT文は良いのですが、UPDATEやDELETEは許可したくないのです。
良い方法はあるでしょうか?

プログラムとしては、以下のような感じです。

string cmdSql= "select * from dual"
OracleConnection conn = null;
conn = new OracleConnection ("User Id=scott;Password=tiger;Data Source=ora_service");
conn.Open();
OracleCommand cmd = new OracleCommand(cmdSql, conn);
OracleDataReader myReader = cmd.ExecuteReader();

「select * from dual」のところにupdate文やDDL文(TRUNCATEなど)があればエラーにしたいのです。よろしくお願いします。

[ メッセージ編集済み 編集者: ちゃんこ 編集日時 2004-10-20 22:43 ]
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-10-21 00:22
C# やった事無いんでよう解りませんが、大体こんな感じ!?

コード:
if(String.Equals(cmdSql.Substring(0,6), "select")){
    OracleConnection conn = null; 
    conn = new OracleConnection ("User Id=scott;Password=tiger;DataSource=ora_service"); 
    conn.Open(); 
    OracleCommand cmd = new OracleCommand(cmdSql, conn); 
    OracleDataReader myReader = cmd.ExecuteReader(); 
}

ちゃんこ
会議室デビュー日: 2004/01/11
投稿数: 10
投稿日時: 2004-10-21 12:31
やはり、テキストを読み込んで判定するしかないんですかね。

コメントの判定なども考えると、少し大変だと思ったので、
ADO.NETの機能でReadOnlyの機能がないかと思ったのですが。。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-10-21 12:44
こんにちは。

>SQLを投げるC#のアプリケーションを作成しています。
>SELECT文は良いのですが、UPDATEやDELETEは許可したくないのです。
>良い方法はあるでしょうか?

プログラム側でこれをやる意味ってなんでしょうか?
SELECT以外したくないのであれば、書かなければいいのでは。。。
チームで開発していて、誰にもSELECT以外使わせたくないってことなのかな??

Oracle使ったことが無いので詳しく分かりませんが、権限でSELECT以外は出来なくするようにデータベース側を設定するってのはダメなんでしょうか?
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-10-21 15:18
OracleDataReader使っているなら、そもそもSELECT以外はできないのでは?
DELETE/INSERT/UPDATE文を投げると
>OracleDataReader myReader = cmd.ExecuteReader();
で例外が発生すると思います。(未確認ですが)

後はnoderaさんのレスにあるようにSELECT権限のみを持つユーザを作成し、
そのユーザでアプリを利用しても良いと思います。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-10-21 19:43
C#(アプリケーション)でやるような事じゃないよなあ。Oracle で revoke しといて、あとは権限違反の例外をキャッチするようにしておいたほうが楽だし。最近、データベースをストレージとしてしか思ってなくて、すべての制御をアプリケーションでやろうと四苦八苦している人が多いね。データベースを計算処理機構として使うとかなり楽できることも多いのに…。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2004-10-21 20:08
制約条件とかもね これがあると絶対起きてはならないデータ不整合を防げる
ちゃんこ
会議室デビュー日: 2004/01/11
投稿数: 10
投稿日時: 2004-10-22 04:15
>プログラム側でこれをやる意味ってなんでしょうか?
>C#(アプリケーション)でやるような事じゃないよなあ。

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

>OracleDataReader使っているなら、そもそもSELECT以外はできないのでは?

私もそうかなと思ったのですが、UPDATE文を設定して実行すると、エラーは発生せず結果も更新されていました。。

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