小编在创建一个普通用户后给了这个用户create session,connect,resource的权限后,用这个普通用户准备进入数据库发现一个触发器把我拦在了登录这个地方;
我不知道各位在安装oracle-g11-R2时,对应系统本身产生的触发器出现一个问题:
名为:ON_LOGON_TIGGER
原本内容是:
trigger on_logon_tigger
after logon on database
begin dbms_application_info.set_client_info(sys_context('userenv','ip_address');
end;
然后我一直以为不是触发器本身的问题,在百度上找各种信息:
开始重启服务,新建用户,附加权限(就是没有给系统权限!);
结果都失败了,然后我开始检查这个触发器,发现它少了一个括号!!!!;
然后尝试禁用这个触发器,然后用普通用户登录,结果就成功了;很是无语。
尝试修复触发器----------------
我尝试把这个触发器的括号加上去,步骤是,删除这个触发器,重新建一个(没有找到在原来基础之上加触发器)。
最后启用这个触发器,然后在重新登录普通用户,就可以了。。。
涉及到的命令如下:(只关于触发器的。)
首先,找到这个触发器所属用户,命令如下:
SELECT owner
FROM DBA_OBJECTS T
WHERE T.OBJECT_TYPE = 'TRIGGER'
AND T.OBJECT_NAME = 'ON_LOGON_TIGGER';
然后,以这个用户的身份进入,去将这个触发器删除,命令如下:
drop trigger ON_LOGON_TIGGER;
commit;
再然后就是新建触发器,命令如下:
create or replace trigger on_logon_tigger
after logon on database
begin dbms_application_info.set_client_info(sys_context('userenv','ip_address'));
end;
注:这些命令前三个词就是一组创建触发器的命令,之后将原来的语句加个括号就可以了,要是原来的语句没了,你也就完了。
再然后,查看一下触发器语句,命令如下:
select text from all_source where type='TRIGGER' and name like 'ON_LOGON_TIGGER';
最后,加一个启用命令(加不加是否会有区别,没有测过,最好加一下),命令如下:
alter trigger ON_LOGON_TIGGER enable;
就此,关于这个触发器导致的用户无法登陆到此结束;
总结:当遇到触发器问题无法登陆的时候,先禁用相关触发器,然后尝试登陆:若成功,即去修复这个触发器;若不成功,同志继续努力吧!!!!