Таблица Oracle, ссылающаяся на таблицу из другой схемы

У меня возникают проблемы с пониманием того, что возможно, а что нет в Oracle, когда речь идет о настройке нескольких схем. Допустим, у меня есть две схемы A а также B:

-- 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 ответа

Решение

Существует 2 вида привилегий: системные привилегии и объектные привилегии.

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, чтобы вышеуказанное сработало.

Предоставить все это слишком много для большинства корпоративных сред. Вместо этого используйте ссылки Grant.

Предоставить ссылки на schema.tablename для target_schema или пользователя;

Другие вопросы по тегам