Oracle 11g手动用户身份验证

Oracle 11g手动用户身份验证,oracle,plsql,oracle11g,oracle-sqldeveloper,Oracle,Plsql,Oracle11g,Oracle Sqldeveloper,我需要帮助在Oracle DB 11g中创建手动用户身份验证 有一个单独的表,其中包含授权用户名。如果用户不在表中,他将被断开连接,并显示一条类似“您未经授权”之类的消息 这是我创建的函数,用于根据ref表中的用户名获取返回代码: create or replace function user_check return integer is user_name varchar2(10); cursor usr is select * from user_ref; begin select

我需要帮助在Oracle DB 11g中创建手动用户身份验证

有一个单独的表,其中包含授权用户名。如果用户不在表中,他将被断开连接,并显示一条类似“您未经授权”之类的消息

这是我创建的函数,用于根据ref表中的用户名获取返回代码:

create or replace function user_check return integer is
 user_name varchar2(10);
 cursor usr is select * from user_ref;
begin
 select USERNAME into user_name 
   from v$session where audsid = sys_context('userenv','sessionid');
 for u in usr loop
   if u.user_name = user_name then
     return 1;
     goto out_of_loop;
   end if;
 end loop;
 return 0;
 <<out_of_loop>>
 null;
end;
/

但它不起作用。请帮忙。

呃。。。这种用户管理方案背后的原因是什么?默认用户访问权限允许来自不同团队的所有用户进行连接,我们不能限制用户权限。部署后,我们需要将访问权限仅限于live team,对于live team,用户名将在表user_ref中提供。很抱歉,但对我来说,这种说法听起来很愚蠢。是什么阻止您在部署后更改权限,以便只有live团队才能访问数据库?是的。。。我还告诉他们在创建会话权限中进行更改,但这是他们让我实现的。你能试试吗。
create or replace trigger user_verify_trg after logon on database
declare
  sid varchar2(10);
  serial varchar2(10);
  q varchar2(100);
begin
  if(gs.user_check = 1) then
    select SID, serial# into sid,serial 
    from v$session where audsid = sys_context('userenv','sessionid');
    q := 'alter system kill session '||sid||','||serial;
    execute immediate q;
  end if;
end;
/