Oracle表引用另一个模式的表

时间:2012-02-05 12:06:12

标签: sql oracle foreign-keys schema grant

在多架构设置方面,我在理解Oracle的可能性和不可能性方面遇到了一些麻烦。假设我有两个架构AB

-- 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

如何从一个模式引用一个表来引用另一个模式的表?还有一些GRANT仍然缺失吗?这甚至可能吗?

2 个答案:

答案 0 :(得分:4)

有两种不同的权限:系统权限&对象私人。

GRANT ALL PRIVILEGES TO user;

会向用户授予所有系统权限,并且应该非常小心地使用!

GRANT ALL ON table TO user;

将对表(即对象)的SELECT,INSERT等授予用户。

所以你需要做一个......

GRANT ALL ON a.referenced_table TO b;

...在CREATE TABLE A.REFERENCED_TABLE语句之后,以上工作。

答案 1 :(得分:3)

对大多数企业环境而言,全部授予太多了。请改用Grant参考。

将schema.tablename的引用授予target_schema或user;