ORACLE: гранты удаляются, когда объект отбрасывается? - PullRequest
3 голосов
/ 15 февраля 2010

В настоящее время у меня есть 2 схемы, A и B.

B имеет таблицу, и A выполняет выбор, вставляет и обновляет ее.

В наших сценариях sql мы предоставили права доступа A, чтобы он мог выполнять свои задачи.

grant select on B.thetable to A
etc,etc

Теперь таблица 'thetable' удаляется, а другая таблица переименовывается в B, по крайней мере, один раз в день.

rename someothertable to thetable

После этого мы получаем ошибку, когда A выполняет выборку для B.thetable.

ORA-00942: table or view does not exist

Возможно ли, что после выполнения операций удаления и переименования права также теряются?

Должны ли мы назначать разрешения еще раз?

обновление

someothertable не имеет грантов.

Update2

Ежедневный процесс, который вставляет данные в 'thetable', выполняет коммит каждые N вставок, поэтому не смог выполнить откат. Вот почему мы используем 2 таблицы.

Заранее спасибо

Ответы [ 4 ]

7 голосов
/ 15 февраля 2010

Да, когда вы отбрасываете таблицу, грант также отбрасывается.

Вы можете попытаться создать VIEW, выбрав из thetable и предоставив SELECT для этого.

Ваша стратегия регулярного опускания стола мне не совсем подходит. Зачем тебе это делать?

EDIT

Есть лучшие способы, чем бросать стол каждый день.

  1. Добавить еще один столбец к thetable, в котором указано, является ли строка действительной.

  2. Поместите индекс в этот столбец (или расширьте существующий индекс, который вы используете для выбора из этой таблицы).

  3. Добавьте еще одно условие в свои запросы, чтобы рассматривать только «допустимые» строки или создать представление для обработки этого.

  4. При импорте данных установите новые строки на «новые». После завершения импорта вы можете удалить все «действительные» строки и установить для «новых» строк значение «действительный» в одной транзакции.

Если импорт не удастся, вы можете просто откатить транзакцию.

1 голос
/ 15 февраля 2010

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

0 голосов
/ 08 декабря 2015

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

0 голосов
/ 15 февраля 2010

Нет: «База данных Oracle автоматически передает ограничения целостности, индексы и разрешения на старый объект новому объекту». http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9019.htm#SQLRF01608

У вас должна быть другая проблема

...