将标识符附加到Oracle会话

时间:2009-04-02 13:14:34

标签: java database oracle hibernate

我的Java应用程序通过Hibernate使用数据库会话。

我想要做的是以某种方式,当我在我的应用程序中创建会话时,将该会话标识为“应用程序”会话。原因是我希望(通过之前的触发器)限制用户可以对表进行的更新,同时让应用程序让他们按照自己喜欢的方式进行操作。

换句话说,我的触发器是这样的:

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

任何人都知道最好的方法吗?

2 个答案:

答案 0 :(得分:3)

将权限授予角色可能更简单,然后让应用程序设置该角色。

http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10004.htm#sthref9521

答案 1 :(得分: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触发器的用户授予select权限。您可以通过执行以下系统来执行此操作:

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

更新:v_ $ session中的下划线不是错误的。这是sys中可以给出授权的真实姓名。 v $ session是您可以在查询中使用的别名。