Таблица 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 или пользователя;