2012-08-01 3 views
1

설치 : Oracle 11g에서 실행되는 두 개의 스크립트 트리가 있습니다. 하나의 세트가 올바른 인스턴스 구성을 보장하고 모든 DBA 프록시 계정이 dbadmin 계정에 연결하고 다른 세트가 데이터베이스 환경.다른 스키마에서 방금 만든 패키지에서 프로 시저를 어떻게 실행합니까?

문제 : 데이터 사전 인구 다음 DBADMIN 계정에 프록시 사용는 스크립트의 두 번째 세트는 한 조각에 대한 제외 잘 실행됩니다. SYSDBA로 SYSDBA로 실행하면 데이터를로드 할 수있는 프로 시저가 적절한 스키마 아래에 생성되며 데이터를로드하는 스크립트는 올바르게 실행되지만 DBADMIN으로 실행하려고하면 호출 프로 시저를 생성 한 직후 매번 전화 할 때마다 PLS-00904: insufficient privilege to access object schema.package이 나옵니다. 심지어 스크립트 GRANT EXECUTE ON schema.package TO DBADMIN을 가질 수 없기 때문에 (물론) 예상 된 ORA-01749: you may not GRANT/REVOKE privileges to/from yourself 오류가 발생하기 때문입니다.

더 간단히 말해 :

(DBADMIN :

... 
CREATE OR REPLACE PACKAGE BODY other_schema.package_name IS 
... 
PROCEDURE add_data(...) 
... 

는 (성공하고 testably하고있다) 로 (나중에, 같은 부모 스크립트라는 또 다른 스크립트에서, 여전히 DBADMIN :)로

BEGIN 
    other_schema.package_name.add_data(...); 
    ... 

는 (제기 PLS-00904 위에서 주어진 - 불충분 한 권한)

DBADMIN 계정에 EXCUTE 액세스 권한을 부여하는 방법에 대한 아이디어 나 DBADMIN이 전체 스크립트 스트림을 중지하지 않고 SYSDBA SYSDBA로 로그 아웃 한 후 다시 액세스 할 수있는 방법에 대해 설명합니다. 그것을 줘? SYSDBA SYSDBA를 처음 사용할 때 SYSDBA SYSDBA를 사용하면 처음에는 "SYSDBA SYSDBA를 사용할 때"라는 수동 단계가 필요합니다.

답변

4

EXECUTE를 DBADMIN에게 부여 할 수 있습니다 ANY PROCEDURE 특권. 이렇게하면 다른 사용자가 소유 한 프로그램을 실행하는 절차를 실행할 수 있습니다.

다른 모든 절차와 마찬가지로 매우 강력하므로 가볍게 부여해서는 안됩니다. (실제로 그것은 가장 강력한 ANY 권한 중 하나입니다.)

+0

D' oh! 나는 내가 그것을 놓쳤다라고하는 어떤 생각도 가지지 않고있다! DBADMIN 만 호출하여 임의의 권한을 부여하는 SYS 프로 시저를 작성하는 것보다 훨씬 나은 해결책입니다. (: – Thought