角色role1在oracle数据库中是建好的,用户user1通过程序登陆到数据库中时候,由程序把role1分配给user1
当用户user1退出程序,角色取消或者user1再用程序登陆后,用sqlplus登陆到数据库中时这个session没有授权。
当用户user1退出程序,角色取消或者user1再用程序登陆后,用sqlplus登陆到数据库中时这个session没有授权。
如果用sqlplus登陆进来,可以把整个表都删掉,很危险?
--已经测试create or replace trigger tr_after_logon
after logon on database
declare
v_program varchar2(50);
begin
IF SYS_CONTEXT('USERENV', 'SESSION_USER') = 'SCOTT' THEN
--获取program
SELECT program
INTO v_program
FROM v$session
WHERE AUDSID = USERENV('SESSIONID')
AND rownum = 1;
--if user is not use sqlplus, raise an application error.
--note: user can continue logon if he has DBA role privilege
IF UPPER(v_program) NOT LIKE '%SQLPLUS%' THEN
RAISE_APPLICATION_ERROR(-20001, 'you can''t logon except you use sqlplus');
END IF;
END IF;
end;
觉得楼主的问题根本是管理的问题,不要让别人知道密码,还有管理好用户的权限,实在不放心开审计。把sqlplus的名称改为sqlplus123后登录:
SQL> /PROGRAM
----------------------------------------------------------------
sqlplus123.exe
sqlplus.exe
这个触发器通过程序名字限制了登陆,我觉得还没有从根本上解决问题
正如楼上说得那样,通过模拟程序名一样可以登陆进来如果通过特定的业务程序登陆进来,则授角色给他,角色作用范围仅仅限于这个session,可以完成正常工作。
如果这是他通过sqlplus登陆进来,在这个session里仍然没有授权,无法做一些操作;