2014-11-04 3 views
1

어쩌면 나는 모든 잘못,하지만 가정되었습니다오브젝트 사용할 수 설명하지만, ALL_OBJECTS에서 사용할 수없는 경우

최근에 나는 새로운 프로젝트로 이동하고, 여기에 내가 이상한 시나리오가 발생했을 - 패키지가있다을하는 I 설명하고 패키지 본문과 설명을 볼 수 있지만 쿼리 ALL_OBJECTS보기, 나는 패키지를 donot 참조하십시오.

간단한

select * from all_objects where object_name like '%PACKAGE_NAME%'; 

어떤 결과를 얻을 수 없다.

주 - 패키지가 다른 스키마에 속합니다. 패키지를 설명 할 수있는 '읽기 전용'스키마에 대한 액세스 권한이 있습니다.

어떻게 가능합니까? ALL_OBJECTS보기에서 스키마에 표시되는 모든 개체를 사용할 수 있습니까?

+0

매우 이상하게 보입니다. 'select * from all_objects where object_name = 'ALL_OBJECTS';' – Bacs

+0

아니요, SYS VIEW와는 다른 것을 얻지 못합니다. PUBLIC SYNONYM – Arnab

+0

필자의 쿼리가 다음과 같아야한다는 것을 깨달았다 :'select * from SYS.all_objects where object_name = 'ALL_OBJECTS';'여전히 길다. – Bacs

답변

0

내 첫 번째 생각은 이것이보기가 어떻게 행동 해야하는지와 달랐습니다. 내가 생각할 수있는 유일한 가능성은 누군가 장난이나 실험 정신으로 스키마에 ALL_OBJECTS 테이블이나 뷰를 만들었다는 것입니다. 자신의 가정에 도전을 제기하는 것은 항상 흥미 롭습니다. 그래서 나는 이것에 대해 좀 더 살펴 보았습니다. 내 데이터베이스에 SYS로 로그인하여 ALL_OBJECTS 및 ALL_SOURCE 뷰의 소스 코드를 살펴 보았습니다. 관련 조각이 여기에 있습니다 - 내가 여기를 재현 어떤 IP 법규 위반 있다고 생각하지 않지만, 필요한 경우 삭제됩니다

ALL_OBJECTS

select obj# from sys.objauth$ 
      where grantee# in (select kzsrorol from x$kzsro) 
      and privilege# in (3 /* DELETE */, 6 /* INSERT */, 
           7 /* LOCK */,  9 /* SELECT */, 
           10 /* UPDATE */, 12 /* EXECUTE */, 
           11 /* USAGE */, 16 /* CREATE */, 
           17 /* READ */, 18 /* WRITE */) 

ALL_SOURCE

  o.type# = 11 and 
      (
      privilege# = -141 /* CREATE ANY PROCEDURE */ 
      or 
      privilege# = -241 /* DEBUG ANY PROCEDURE */ 
     ) 

및 또한 :

 (o.type# in (11 /* package body */, 14 /* type body */)) 
     and 
     exists 
     (
     select null from sys."_ACTUAL_EDITION_OBJ" specobj, sys.dependency$ dep, sys.objauth$ oa 
     where specobj.owner# = o.owner# 
      and specobj.name = o.name 
      and specobj.type# = decode(o.type#, 
            11 /* pkg body */, 9 /* pkg */, 
            14 /* type body */, 13 /* type */, 
            null) 
      and dep.d_obj# = o.obj# and dep.p_obj# = specobj.obj# 
      and oa.obj# = specobj.obj# 
      and oa.grantee# in (select kzsrorol from x$kzsro) 
      and oa.privilege# = 26 /* DEBUG */) 

저는 DBA가 아니며 약간 벗어났습니다. 내 깊이 이것을 해석하지만, 당신의 스키마가 CREATE ANY PROCEDURE을 가지고 있다고 추측하고 있지만 패키지에 특정한 특권이 없다? 이 경우 소스가 ALL_SOURCE 인 이유를 설명 할 수 있지만 패키지는 ALL_OBJECTS에 표시되지 않습니다.

관련 문제