Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251065
  • 博文数量: 59
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 698
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-19 21:17
文章分类

全部博文(59)

文章存档

2009年(14)

2008年(45)

我的朋友

分类: Oracle

2008-12-07 12:20:41

早晨还在睡梦中,接到一个朋友电话,说了一个想法。
他们要去客户那测试软件,但是客户那数据库的密码他们不知道,应该如何做才能绕过客户那的密码呢?他们的软件是以那个用户连接进去的。
 
本来我想我们数据库最高权限都已经有了,还管你什么用户的密码,在命令行导很好处理的,但是因为是应用程序,因此就不怎么好办了,呵呵。
我说可不可以将其密码修改掉,然后再改回来,这个过程中我不知道他的密码是多少。因为这是个业务在线系统因此我们不能修改其密码。因此这个方法给否定了。
后来我想到了current_schema功能,因此我就想说,能不能是用一个权限较高的用户,连接进去后,使用触发器使用alter session set current_schema的语句,指定使用用户呢?这个在命令行是可以实现的,应用程序中,应该是可以的吧。
下面是一个登陆触发器。
CREATE OR REPLACE TRIGGER LOGON_AUDIT
AFTER LOGON ON DATABASE
declare
  lv_suser  varchar2(100);
BEGIN
  select sys_context('USERENV', 'SESSION_USER')
    into lv_suser
    from dual;
  if lv_suser = 'XTA7'  Then
       execute immediate 'alter session set current_schema = xta8';
    else
      Null;
  end if;
END;
验证触发器的执行是否起到改变current_schema的效果呢?
 select sys_context('USERENV', 'HOST') host, sys_context('USERENV', 'CURRENT_USER') curruser,
        sys_context('USERENV', 'CURRENT_SCHEMA') currschema,sys_context('USERENV', 'SESSION_USER') currsess,
        sys_context('USERENV', 'IP_ADDRESS') ip
 from dual;
        HOST          CURRUSER CURRSCHEMA CURRSESS IP
-------------------------------------------------------------------------------
  MSHOME\ANTIPER          XTA7            XTA8            XTA7      192.168.1.2
这样应该是可以实现的吧,整个应用程序就是一个大的会话应用啊,呵呵。
 
当然这样处理后,需要注意权限的问题,因为虽然current_schema为我们需要的用户,但是处理权限却是session_user的权限。
阅读(892) | 评论(0) | 转发(0) |
0

上一篇:磁盘IO故障

下一篇:密码文件命名规则(转)

给主人留下些什么吧!~~