как давать ссылки в oracle sql 12.2.0.1.0? - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь предоставить пользователю user1 право создавать (и изменять) таблицы в других схемах. До сих пор я был в состоянии создавать "простые" таблицы. Но когда дело дошло до создания таблиц с внешними ключами, появилась ошибка

У меня есть база данных Oracle 12c с 2 пользователями / схемами. Пользователь1 получил разрешения на создание таблиц в схеме user2:

grant create any table to user1

(хорошо, возможно, не лучшее решение, но сейчас это не имеет значения)

теперь, когда я пытаюсь создать таблицу с внешним ключом, я получаю стандартное сообщение

Error: ORA-01031: insufficient privileges [Failed SQL: create table…

Я пытался

grant references to user1

решение из этого вопроса

есть

ORA-01924: role 'REFERENCES' not granted or does not exist

(хорошо, это правда, нет роли 'ССЫЛКИ', но мне не нужна новая роль, или я не понимаю, как это поможет в этой ситуации)

также

grant references on testTable to user1

работает, но мне нужно предоставить разрешение на любую таблицу, даже для тех, которые будут созданы в будущем

1 Ответ

2 голосов
/ 25 июня 2019

В Oracle нет системной привилегии «СПРАВОЧНИК ЛЮБОГО СТОЛА».https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/GRANT.html#GUID-20B4E2C0-A7F8-4BC8-A5E8-BE61BDC41AC3

Что вы можете сделать, это предоставить «создать любую таблицу», чтобы сначала создать таблицу, а затем «изменить любую таблицу», чтобы добавить ограничение внешнего ключа в таблицу другого пользователя.

ПримечаниеВ приведенном ниже примере пользователю user1 по-прежнему нужна привилегия явных ссылок на таблицу user2, чтобы иметь возможность иметь внешний ключ к ней.

FSITJA@db01 2019-06-25 11:43:14> create user user1 identified by 123 quota unlimited on users;

User created.

FSITJA@db01 2019-06-25 11:43:14> grant create session to user1;

Grant succeeded.

FSITJA@db01 2019-06-25 11:43:14> grant create any table, create any index, alter any table to user1;

Grant succeeded.

FSITJA@db01 2019-06-25 11:43:14> create user user2 identified by 123 quota unlimited on users;

User created.

FSITJA@db01 2019-06-25 11:43:14> conn user1/123@db01
Connected.

Session altered.

USER1@db01 2019-06-25 11:43:15> create table user2.t1(col1 number primary key);

Table created.

USER1@db01 2019-06-25 11:43:15> create table user2.t2(col1 number);

Table created.

USER1@db01 2019-06-25 11:43:15> alter table user2.t2 add constraint fk_t2_t1 foreign key (col1) references user2.t1(col1)
;

Table altered.

USER1@db01 2019-06-25 11:43:15> create table user1.t3(col1 number);

Table created.

USER1@db01 2019-06-25 11:43:15> alter table user1.t3 add constraint fk_t3_51 foreign key (col1) references user2.t1(col1)
;
alter table user1.t3 add constraint fk_t3_51 foreign key (col1) references user2.t1(col1)
                                                                                 *
ERROR at line 1:
ORA-01031: insufficient privileges


USER1@db01 2019-06-25 11:43:15> conn user2/123@db01
Connected.

Session altered.

USER2@db01 2019-06-25 11:43:16> grant references on user2.t1 to user1;

Grant succeeded.

USER2@db01 2019-06-25 11:43:16> conn user1/123@db01
Connected.

Session altered.

USER1@db01 2019-06-25 11:43:16> alter table user1.t3 add constraint fk_t3_51 foreign key (col1) references user2.t1(col1)
;

Table altered.

USER1@db01 2019-06-25 11:43:20>
...