Java 将标识符附加到Oracle会话
我的Java应用程序通过Hibernate使用db会话 我想做的是,当我在应用程序中创建会话时,将该会话标识为“应用程序”会话。原因是我希望(通过before触发器)限制用户可以对表进行的更新,同时允许应用程序全权执行它喜欢的操作 换句话说,我的触发器执行以下操作:Java 将标识符附加到Oracle会话,java,database,oracle,hibernate,Java,Database,Oracle,Hibernate,我的Java应用程序通过Hibernate使用db会话 我想做的是,当我在应用程序中创建会话时,将该会话标识为“应用程序”会话。原因是我希望(通过before触发器)限制用户可以对表进行的更新,同时允许应用程序全权执行它喜欢的操作 换句话说,我的触发器执行以下操作: if(user is an application) allow update else raise oracle error end if 有人知道最好的方法吗?在触发器中写下以下内容: select term
if(user is an application)
allow update
else
raise oracle error
end if
有人知道最好的方法吗?在触发器中写下以下内容:
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;
如果触发器未编译,则应向具有v$session触发器的用户授予select权限。您可以通过在系统中执行以下操作来实现这一点:
grant select on sys.v_$session to <username>;
将sys.v_u$session上的选择授予;
更新:v_$session中的下划线不是错误。这是sys中的真实名称,可以在其中提供授权。v$会话是一个别名,您可以在查询中使用。在触发器中写入以下内容:
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;
如果触发器未编译,则应向具有v$session触发器的用户授予select权限。您可以通过在系统中执行以下操作来实现这一点:
grant select on sys.v_$session to <username>;
将sys.v_u$session上的选择授予;
更新:v_$session中的下划线不是错误。这是sys中的真实名称,可以在其中提供授权。v$会话是一个可以在查询中使用的别名。将权限授予角色,然后将应用程序设置为该角色可能更简单
将特权授予角色,然后让应用程序设置该角色可能更简单
其他人可以编写一个假装是你的应用程序,假设他们的机器上有你的应用程序。我假设你知道这一点,并且可以相信你的用户没有这样的能力。其他人可以编写一个假装是你的应用程序,假设他们的机器上有你的应用程序。我假设你知道这一点,并且可以相信你的用户不具备这样的能力。这很容易被愚弄。例如,你可以将sqlplusw.exe重命名为MyApplicationTitle,触发器不会注意到这一点。这很容易被愚弄。例如,您可以将sqlplusw.exe重命名为MyApplicationTitle,触发器不会注意到这一点。