2012-02-05 13 views
2

다중 스키마 설정과 관련하여 가능한 것이 무엇이고 오라클에서는 불가능한 것을 이해하는데 약간의 문제가 있습니다.다른 스키마의 테이블을 참조하는 Oracle 테이블

-- with user SYS connect as SYSDBA 
-- note: ALL PRIVILEGES are granted for simplicity in the scope of this question. 
--  real life databases would have more fine-grained grants... 
create user A identified by A; 
grant all privileges to A; 

create user B identified by B; 
grant all privileges to B; 

-- with user A 
create table A.REFERENCED_TABLE (
    ID number(7) not null, 
    constraint REFERENCED_TABLE_PK primary key (ID) 
); 

-- with user A or B 
create table B.REFERENCING_TABLE (
    A_ID number(7) not null, 
    constraint REFERENCING_TABLE_FK 
    foreign key (A_ID) 
    references A.REFERENCED_TABLE(ID) 
    on delete cascade 
); 

그러나 위의 문은 내가 다른 스키마에서 하나의 스키마 참조 테이블에서 테이블을 만들 수있는 방법

ORA-01031: insufficient privileges 

가 발생합니다의 내가 두 도식 AB 있다고 가정 해 봅시다? GRANT가 아직 누락 되었습니까? 이것은 가능한가?

답변

4

두 가지 종류의 권한이 있습니다. 시스템 권한 & 개체 privs.

GRANT ALL PRIVILEGES TO user; 

은 모든 시스템 권한을 사용자에게 부여하므로 매우주의 깊게 사용해야합니다.

GRANT ALL ON table TO user; 

은 테이블 (예 : 개체)에 SELECT, INSERT 등을 부여합니다.

그래서 당신은을 수행해야합니다 ...

GRANT ALL ON a.referenced_table TO b; 

을 ... 위의 작동하려면 테이블 A.REFERENCED_TABLE 문을 만든 후.

+0

감사합니다. 참조 된 테이블에 필요한 보조금을 생각하지 않았습니다. 시스템 권한에 대한 좋은 힌트. 필자의 경우, 이것은 단지 테스트 데이터베이스 일 뿐이므로'GRANT ALL PRIVILEGES'는 괜찮습니다. –

+2

@LukasEder : 모든 특권을 부여하고 싶지 않다면,'SELECT'와'REFERENCES'를 부여하는 것으로 충분할 것입니다. –

+0

@Ben : 나는 질문을 간결하게 유지했습니다. 두 개의 스키마에 두 개의 테이블이있는 통합 테스트 케이스 상황이 필요했기 때문에 사전 뷰를 쿼리 할 수있었습니다. Java 용 SQL 추상화 라이브러리 인 http://www.jooq.org에서이 작업을 수행하고 있습니다. 따라서 잠재적 인 "라이브"환경은이 상황에서별로 관련이 없습니다. 추가 질문으로 질문을 업데이트했습니다. –

3

대부분의 엔터프라이즈 환경에서는 모두 허용되지 않습니다. 그랜트 참조를 대신 사용하십시오.

schema.tablename에 대한 참조를 target_schema 또는 user에 부여합니다.

관련 문제