Oracle предоставляет изменение последовательности - PullRequest
2 голосов
/ 29 июня 2011

У меня есть grant alter sequence для пользователя. Но я должен указать schema name, чтобы изменить последовательность, иначе он возвращается с ошибкой sequence does not exist. Можно ли сделать грант таким образом, чтобы мне не приходилось указывать имя схемы? Я могу сделать select/insert/update без указания имени схемы.

Ответы [ 3 ]

6 голосов
/ 29 июня 2011

Разрешение имен и права доступа являются отдельными понятиями.grant дает вам разрешение на изменение схемы, но вы по-прежнему ограничены пространством имен, в котором находитесь. Существует четыре способа преобразования имени в одной схеме в другую:

  1. Ссылка на схему с именем объекта:
    select schema_name.sequence_name.nextval from dual;
  2. Измените текущий сеанс для разрешения имен, как если бы вы были в другой схеме:
    alter session set current_schema = schema_name;
  3. Создайтесиноним объекта в текущей схеме:
    create synonym sequence_name for schema_name.sequence_name;
  4. Создать общедоступный синоним для объекта:
    create public synonym sequence_name for schema_name.sequence_name;
2 голосов
/ 29 июня 2011

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

Если вы подключены к своей базе данных как пользователь-владелец, вам не нужен квалификатор схемы:

SQL> create sequence foo;

Sequence created.

SQL> grant alter on foo to hr;

Grant succeeded.
0 голосов
/ 29 июня 2011

вы можете:

ALTER SESSION SET CURRENT_SCHEMA myschema ..

, тогда вы можете ссылаться на все элементы без квалификатора.

...