2012-10-04 2 views
1

Oracle XE 인스턴스에 SYSTEM 사용자로 로그온했습니다. 사용자, 테이블 및 제약 조건을 생성하는 스크립트를 실행하려고하면 ORA-01031 오류가 발생합니다. 스크립트는 다음과 같습니다 :다른 소유자간에 FOREIGN KEY 제약 추가

CREATE USER AA IDENTIFIED BY AA DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; 
CREATE USER BB IDENTIFIED BY BB DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; 
GRANT ALL PRIVILEGES TO AA WITH ADMIN OPTION; 
GRANT ALL PRIVILEGES TO BB WITH ADMIN OPTION; 
... 
CREATE TABLE ... 
CREATE INDEX ... 
... 
ALTER TABLE "BB"."B_TABLE" ADD CONSTRAINT "FK_BB_AA" FOREIGN KEY ("AA_ID") 
    REFERENCES "AA"."A_TABLE" ("ID") ENABLE; -- this line report the error 

Oracle XE에서이 제약 조건을 추가 할 수 없습니까?

답변

1

먼저 사용자에게 ALL PRIVILEGES을 부여하는 상황이 없어야하며, 특히 WITH ADMIN OPTION이 아닌 상황이 있어서는 안됩니다. 이는 보안을 관리하는 방법이 아닙니다. 실제 시스템을 근사하는 어떤 것에서도 실제로 필요한 특권을 판별하고 특권 만 부여하기를 원할 것입니다.

둘째, AA에 부모 테이블을 참조하는 스키마 BB의 외부 키 위해, BBAA에서 부모 테이블에 REFERENCE 권한이 있어야합니다. REFERENCE ANY TABLE 시스템 권한이 없으므로 BBREFERENCE 권한을 테이블을 만든 후 외래 키를 생성하기 전에 AA.A_TABLE에 부여해야합니다.

GRANT REFERENCES ON aa.a_table TO bb; 
+0

실제 데이터베이스가 아니므로 Oracle XE를 사용하여 응용 프로그램의 통합 테스트를 수행하고 있으며 실제 데이터베이스 서버에 dba 권한이 없습니다. 그리고이 두 명의 사용자 만있는 것은 아니며 11 명의 사용자와 약 70 개의 테이블이 있습니다. 모든 테이블과 사용자에게이 명령을 실행해야합니다. 아니면 더 쉬운 방법이 있습니까? – leomcabral

+0

해당 오브젝트의 하위 테이블을 작성할 수있는 모든 사용자에 대해 모든 오브젝트에 대한 명령문을 실행해야합니다. 11 명의 사용자 각각이 70 개의 다른 상위 테이블을 기반으로 하위 테이블을 생성하는 것은 매우 이상한 것처럼 보일 것입니다. 이러한 십자가 스키마 외래 키가 많지 않은 경우 어떤 스키마를 식별하는지 당신은 문제가있다. 즉,이 상태의 770 가지 조합을 생성하고 실행하는 약간의 동적 SQL을 작성할 수 있습니다. –

+0

방금 ​​했어요. 조합을 생성하는 동적 SQL을 작성했습니다. 팁 고마워. – leomcabral

관련 문제