代码之家  ›  专栏  ›  技术社区  ›  pauljwilliams

将标识符附加到Oracle会话

  •  1
  • pauljwilliams  · 技术社区  · 17 年前

    我的Java应用程序通过Hibernate使用db会话。

    我想做的是,当我在应用程序中创建会话时,将该会话标识为“应用程序”会话。原因是我希望(通过before触发器)限制用户可以对表进行的更新,同时允许应用程序全权执行它喜欢的操作。

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

    有人知道最好的方法吗?

    2 回复  |  直到 17 年前
        1
  •  3
  •   David Aldridge    17 年前

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

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

        2
  •  1
  •   Petros    17 年前

    在触发器中写入以下内容:

    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$会话是可以在查询中使用的别名。