Таблица Oracle, ссылающаяся на таблицу из другой схемы - PullRequest
2 голосов
/ 05 февраля 2012

У меня возникают проблемы с пониманием того, что возможно, а что нет в 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 ]

4 голосов
/ 05 февраля 2012

Существует 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 оператор для вышеупомянутого, чтобы работать.

3 голосов
/ 09 мая 2013

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

Предоставить ссылки на имя_таблицы имя-цели или пользователю;

...