Почему словарь оракула лжет мне? - PullRequest
0 голосов
/ 02 февраля 2019

В документации к таблице all_constraints говорится, что в столбце «владелец» содержится информация о «Владельце определения ограничения».Но, изучая живой пример, я обнаружил, что это неверно.

select user from dual; --gives EXAMPLE_USER create table example_user.example_table(id number);

Теперь я поменяю пользователя на SYS.

select user from dual --gives SYS alter table example_user.example_table add constraint ex_constrain check(id > 10);

Теперь лучшая часть:

select owner from all_constraints where constraint_name = 'EX_CONSTRAINT'; --gives EXAMPLE_USER and not SYS.

Мой вопрос прост: почему?Проверено на: Oracle Database 11g EE 11.2.0.4.0

1 Ответ

0 голосов
/ 02 февраля 2019

Ну, SYS особый , он владеет базой данных и может делать все что угодно.

Если вы захотите сделать то же самое с другим пользователем (например, SCOTT и позволить ему попытаться создать ограничение для таблицы EXAMPLE_USER), вы потерпите неудачу, если привилегированный пользователь не предоставит системную привилегию SCOTT ALTER ANY TABLE.Таким образом, этот пользователь сможет изменять любую таблицу (принадлежащую любому пользователю), включая создание ограничений.

Если вы хотите создать ограничение первичного ключа,этой привилегии будет недостаточно - вам понадобится также привилегия CREATE ANY INDEX (поскольку первичный ключ также создает индекс).

Так же, как CREATE ANY TABLE системная привилегия, которая позволяет создавать таблицу всхема любого другого пользователя, но эта таблица будет принадлежать владельцу схемы, то же самое относится и к ограничению - да, вы создали ее от имени другого пользователя, но ограничение по-прежнему принадлежит владельцу таблицыа не создатель.

Следовательно, словарь не обманывает, это вы неправильно поняли, как он работает.

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