Права, необходимые для удаления и повторного создания ограничения внешнего ключа в oracle 11g - PullRequest
0 голосов
/ 04 марта 2020

Какими привилегиями должно обладать мое имя пользователя (схема1), чтобы можно было удалить ограничение внешнего ключа для Таблицы_1 (схема2), ссылающейся на Таблицу 2 (схема2)?

Как проверить, есть ли у меня эти привилегии ?

Если я этого не сделаю, какой оператор GRANT должен выполнить из роли SYSDBA, чтобы мое имя пользователя могло удалить и заново создать ограничение для таблицы.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

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

SQL> show user
USER is "SCOTT"
SQL>
SQL> create table test_d as select * From dept;

Table created.

SQL> alter table test_d add constraint pk_td primary key (deptno);

Table altered.

SQL> create table test (deptno number constraint fk_d references test_d (deptno));

Table created.

Подключение как другого пользователя (mike) и попробуйте удалить ограничение внешнего ключа, принадлежащее scott:

SQL> connect mike/lion
Connected.
SQL> -- without any grants - of course it doesn't work
SQL> alter table scott.test drop constraint fk_d;
alter table scott.test drop constraint fk_d
*
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> -- Barbaros suggested to GRANT REFERENCES ON test TO mike, but that won't work either.
SQL> -- REFERENCES is used to let someone else ... well, "reference" your table:
SQL> alter table scott.test drop constraint fk_d;
alter table scott.test drop constraint fk_d
*
ERROR at line 1:
ORA-01031: insufficient privileges

ОК, мы увидели, что не работает. Давайте теперь посмотрим, что работает :

SQL> -- SCOTT granted ALTER: grant alter on test to mike;
SQL> -- Let's check it:
SQL> select table_name, privilege from user_tab_privs where grantor = 'SCOTT';

TABLE_NAME                     PRIVILEGE
------------------------------ ----------------------------------------
TEST                           ALTER

SQL> -- OK, now - drop the constraint
SQL> alter table scott.test drop constraint fk_d;

Table altered.

SQL>

Наконец, чтобы ответить на вопрос: владелец таблицы должен предоставить alter для этой таблицы. SYS (DBA) вообще не должен участвовать.

0 голосов
/ 04 марта 2020

Чтобы добавить или удалить ограничения для таблиц другого пользователя, вам понадобится «ALTER ANY TABLE».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...