我的Java应用程序通过Hibernate使用数据库会话。
我想要做的是以某种方式,当我在我的应用程序中创建会话时,将该会话标识为“应用程序”会话。原因是我希望(通过之前的触发器)限制用户可以对表进行的更新,同时让应用程序让他们按照自己喜欢的方式进行操作。
换句话说,我的触发器是这样的:
if(user is an application)
allow update
else
raise oracle error
end if
任何人都知道最好的方法吗?
答案 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是您可以在查询中使用的别名。