Oracle-数据库组件invalid问题处理

前言:

        近期处理了一起Oracle数据库组件出现大量invalid的问题,分析发现是由于一些系统包的public公共用户权限丢失导致,相关的组件用户无法方法这些系统包,致使数据库组件大量出现invalid的问题。

问题:

        数据库组件出现状态大量的invalid

问题分析:

        查询组件用户的失效对象数量

select owner,status,count(*) from dba_objects 
 where  status='INVALID' and owner in ('LBACSYS','OLAPSYS','CTXSYS','WMSYS','XDB','MDSYS')
 group by owner,status;

        可以发现出现组件用户出现大量的失效对象

        查看失效对象编译的错误原因

set linesize 200
set pagesize 10000
col owner for a10
col name for a20
col text for a100
select owner,name,line,text
from dba_errors
where owner in ('LBACSYS','OLAPSYS','CTXSYS','WMSYS','XDB','MDSYS')
order by owner,name,line;

        可以发现,错误大部分都是调用包出现未声明的情况,这些包DBMS_SQL,DBMS_SCHEDULER,UTL_FILE都是数据库自带的一些包,而现在出现调用未声明的情况,说明组件的相关用户没有权限是调用这些包

        而调用这些包的权限,通常都是通过授予public公共用户,从而使相关组件用户有权限进行调用的,所以,我们获取了当前环境的public对象的execute权限与组件正常环境权限进行了比对


set linesize 400
set pagesize 400
col privilege for a20
col owner for a20
select grantee,PRIVILEGE,owner,table_name
from dba_tab_privs
where grantee='PUBLIC' and PRIVILEGE='EXECUTE';

        发现了以下包权限存在丢失的情况,而这些对象跟之前包编译报错的包是一致的

EXECUTE ON DBMS_LOB TO public ;
EXECUTE ON UTL_TCP TO public ;
EXECUTE ON UTL_HTTP TO public ;
EXECUTE ON DBMS_SQL TO public ;
EXECUTE ON UTL_FILE TO public ;
EXECUTE ON DBMS_XMLGEN TO public ;
EXECUTE ON UTL_SMTP TO public ;
EXECUTE ON DBMS_JOB TO public ;
EXECUTE ON DBMS_SCHEDULER TO public ;
SELECT ON ALL_USERS TO public;

问题原因:

        数据库组件出现大量invalid的问题,是由于一些系统包的public公共用户权限丢失导致,相关的组件用户无法方法这些系统包,致使数据库组件大量出现invalid的问题。

问题修复:

        对丢失的权限重新进行授权,并重新进行数据库组件编译

---权限授权
GRANT EXECUTE ON DBMS_LOB TO public ;
GRANT EXECUTE ON UTL_TCP TO public ;
GRANT EXECUTE ON UTL_HTTP TO public ;
GRANT EXECUTE ON DBMS_SQL TO public ;
GRANT EXECUTE ON UTL_FILE TO public ;
GRANT EXECUTE ON DBMS_XMLGEN TO public ;
GRANT EXECUTE ON UTL_SMTP TO public ;
GRANT EXECUTE ON DBMS_JOB TO public ;
GRANT EXECUTE ON DBMS_SCHEDULER TO public ;
GRANT SELECT ON ALL_USERS TO public;
---重新编译
@?/rdbms/admin/utlrp

        组件状态重新变为valid

set linesize 200
Col Comp_name Format a40
col schema for a20
com comp_id for a20 
Col Status Format a12
Select comp_id,Comp_name, status, Version,schema
From Dba_Registry
Order by Comp_name;

其他问题:

        对于public公共用户权限为何会出现丢失?

        可能是以下原因导致

        1 在数据库升级迁移的过程中public权限没有跟随迁移,导致丢失

        2 用户在进行数据库安全改造的过程中,回收了public权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值