ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 登陆触发器AFTER LOGON ON DATABASE对具有DBA权限的不起作用

登陆触发器AFTER LOGON ON DATABASE对具有DBA权限的不起作用

原创 Linux操作系统 作者:star_guan2008 时间:2008-04-07 18:09:01 0 删除 编辑
现在假设已经创建了一个SCOTT模式,下面来看看如何保护该模式。在Oracle 10g这个版本之前,在创建SCOTT模式后,一般都可以通过“tiger”这个众所周知的密码进行访问,而且账号也不会被锁定。
假 设需要做的是在维护SCOTT模式中数据的同时,仍然需要阻止用户登录这个账号。在Oracle 9i及其之后的版本中,可以通过锁定账号实现这一目的;这里,则是利用一些其他的措施对这个方法进行一定的扩展。首先,建立数据库登录触发器以阻止某些用 户登录SCOTT模式:
sec_mgr@KNOX10g
> CREATE OR REPLACE TRIGGER logon_check
2 AFTER LOGON ON DATABASE
3 BEGIN
4 IF (SYS_CONTEXT ('USERENV', 'SESSION_USER') = 'SCOTT')
5 THEN
6 raise_application_error (-20001,
7 'Unauthorized Login');
8 END IF;
9 END;
10 /
Trigger created.
当试图连接SCOTT模式时,会产生如下结果:
sec_mgr@KNOX10g
> conn scott/tiger
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Unauthorized Login
ORA-06512: at line 4
Warning: You are no longer connected to ORACLE.
在 利用登录触发器这个方法时,需要补充说明两点:首先,虽然登录触发器有助于增加一定的安全性,但登录触发器会拒绝每一位试图登录的用户,从而会增加登录数 据库的连接时间。在上述的例子中,可能不会感觉到连接时间的增加,但是,如果触发器代码需要查询表或者进行内部调用,那么时间的增加将会非常明显,从而使 这个措施成为不可承受的解决办法。
当数据库登录触发器最初在Oracle 8i发布时,触发器会抛出异常从而阻止用户的登录,一般情况下,抛出的异常既非用户可以干预的,又不能合适地对其进行处理,所产生的结果就是所有的用户都 不能登录数据库。而惟一能使用户重新登录数据库的方法是利用SYSDBA(外部的)建立连接,然后撤销或禁用登录触发器。
为了防止出现这种非故意 的不能登录的情况,在Oracle 9i数据库中作了改变:即使登录触发器抛出了异常,也不能阻止拥有ADMINISTER DATABASE TRIGGER系统权限的用户登录。这个权限被授予了DBA角色,所以任何拥有DBA角色的用户都可以绕过登录触发器。可以利用以下查询代码来决定谁可以 避免登录触发器抛出异常,而查询的结果将会列出被授予上述权限的用户和角色:
SELECT grantee
FROM dba_sys_privs
WHERE PRIVILEGE = 'ADMINISTER DATABASE TRIGGER';
GRANTEE
------------------------------
DBA
SYS
XDB
MDSYS
WKSYS
CTXSYS
IMP_FULL_DATABASE

create or replace trigger restrict_user_machine_tpoatest
after logon on database
when (user='TEST')
declare
  v_machine varchar2(600);
begin
   select distinct machine into v_machine from v$session where  username=user;
    if v_machine not like '%TEST%' then
    RAISE_APPLICATION_ERROR(-20001,'此用户只能使用DEVELOP机器登陆');
    return;
  end if;
end;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10742223/viewspace-231077/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Hash join算法原理
请登录后发表评论 登录
全部评论

注册时间:2008-02-19

  • 博文量
    82
  • 访问量
    107309