早晨还在睡梦中,接到一个朋友电话,说了一个想法。
他们要去客户那测试软件,但是客户那数据库的密码他们不知道,应该如何做才能绕过客户那的密码呢?他们的软件是以那个用户连接进去的。
本来我想我们数据库最高权限都已经有了,还管你什么用户的密码,在命令行导很好处理的,但是因为是应用程序,因此就不怎么好办了,呵呵。
我说可不可以将其密码修改掉,然后再改回来,这个过程中我不知道他的密码是多少。因为这是个业务在线系统因此我们不能修改其密码。因此这个方法给否定了。
后来我想到了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的权限。
阅读(917) | 评论(0) | 转发(0) |