2

当涉及到多模式设置时,我在理解 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遗漏?这甚至可能吗?

4

2 回答 2

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 语句之后,上面的工作。

于 2012-02-05T12:12:57.117 回答
3

对于大多数企业环境来说,授予一切太多了。请改用 Grant 引用。

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

于 2013-05-08T21:57:34.623 回答