2009-04-02 9 views
1

Javaアプリケーションは、Hibernateを介してdbセッションを使用します。Oracleセッションに識別子を添付する

何かしたいのは、アプリでセッションを作成するときに、そのセッションを「アプリケーション」セッションとして識別することです。その理由は、ユーザーがテーブルに行う更新を制限すること(以前のトリガを介して)が、好きなことを行うためにアプリケーションの一式を与えたいからです。言い換えれば

、私のトリガーは次のように行います:

if(user is an application) 
    allow update 
else 
    raise oracle error 
end if 

誰もがこれを行うための最善の方法を知っているの?あなたのトリガーインサイド

+0

誰かが、彼らは自分のマシン上のアプリケーションを持っていると仮定すると、あなたになりすましアプリケーションを書くことができます。私はあなたがこれを知っていると仮定しており、この有能ではないユーザに頼ることができます。 –

答えて

1

次のように記述:

select 
    terminal, 
    username, 
    osuser, 
    program 
into 
    svTerminal, svUserName, svOSUser, svProgram 

from 
    v$session 
where 
    audsid=SYS_CONTEXT('USERENV','SESSIONID'); 

if svProgram <> 'MyApplicationTitle' then 
    raise oracle error 
end if; 

また、あなたは、このクエリを実行する場合は利用可能な他のどのような変数を参照することができます

select * form v$session; 

トリガーがコンパイルできない場合は、許可する必要がありますv $ sessionのトリガーを持つユーザーのアクセス権を選択します。

grant select on sys.v_$session to <username>; 

更新:v_ $ sessionのアンダースコアは間違いではありません。これは、sysの中で許可が与えられる本当の名前です。 v $ sessionは、クエリで使用できるエイリアスです。

+0

これはばかだと非常に簡単です。インスタンスsqlplusw.exeの名前をMyApplicationTitleに変更すると、トリガーはこれを認識しません。 – tuinstoel

関連する問題