Oracle 11g手动用户身份验证
我需要帮助在Oracle DB 11g中创建手动用户身份验证 有一个单独的表,其中包含授权用户名。如果用户不在表中,他将被断开连接,并显示一条类似“您未经授权”之类的消息 这是我创建的函数,用于根据ref表中的用户名获取返回代码: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
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;
/