Опция grant не существует oracle

Обновлено: 07.07.2024

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

Grant Privileges для таблиц

Вы можете предоставить пользователям различные привилегии к таблицам. Эти привилегии могут быть любой комбинацией SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX, или другие.

Синтаксис

Синтаксис для предоставления привилегий для таблицы в Oracle/PLSQL:

privileges
Привилегии для назначения. Это может быть любое из следующих значений:

Привилегии Описание
SELECT Возможность выполнения SELECT на таблице
INSERT Возможность выполнения INSERT на таблице
UPDATE Возможность выполнения UPDATE на таблице
DELETE Возможность выполнения DELETE на таблице
REFERENCES Возможность создавать CONSTRAINT, который ссылается на таблицу.
ALTER Возможность выполнять оператор ALTER TABLE, чтобы изменить описание таблицы.
INDEX Возможность создавать INDEX таблице с помощью оператора CREATE INDEX.
ALL Все привилегии для таблицы

object
наименование объекта базы данных, которому вы предоставляете привилегии. В случае предоставления привилегий таблице, это должно быть название таблицы.
user
Имя пользователя, которому будет предоставлена эта привилегия.

Пример

Рассмотрим некоторые примеры, предоставления привилегий для таблиц в Oracle.
Например, если вы хотите предоставить SELECT, INSERT, UPDATE и DELETE привилегии на таблицу с наименованием suppliers для user с именем trizor , то нужно выполнить следующие GRANT предложение:

Я нахожусь в Oracle 11g, и я понимаю проблему стороннего гранта.

Но, учитывая, что пользователь1 создает представление "view1" как Select 'foo' из dual.

Затем я предоставляю Select on view1 для user2, и я получаю эту ошибку.

Но обратите внимание, что "двойное" в представлении не квалифицируется как sys.dual, оно просто двойственное. Я бы подумал с синонимом public.dual, что фактическое "двойное" использовалось бы public.dual, а не sys.dual, поэтому никакой сторонний вопрос не должен существовать, потому что он публичный.

И если sys.dual - это тот, который Oracle предполагает в этом представлении, можно подумать, что использование двойного представления является общим в представлениях, а также предоставление привилегий другим пользователям в отношении взглядов других пользователей - не было бы тысяч пользователи должны сообщать об этой проблеме?

После консультаций с нашими базами данных проблема - это Oracle "Feature" в 11.2.0.4:

TL; DR verison: Начиная с версии 11.0.4, если ваш вид использует Двойной, то вы не можете предоставить этот вид ничего, кроме SELECT.

Почему мы хотим предоставить представление больше, чем Select? В нашем случае поставщик приложений упаковал свои обновления таким образом, что часть базы данных обновлений автоматически записывала полный CRUD-грант в главную схему приложения на каждом новом объекте, и это включало представления, потому что было просто проще script сюда. Все это работало нормально до 11.0.4, когда Oracle сказал/принудительно: "Эй, вы не можете этого сделать".

Oracle Database - Enterprise Edition - версия 11.2.0.4 - 11.2.0.4 [выпуск 11.2] Информация в этом документе относится к любой платформе. СИМПТОМЫ После обновления с 11.2.0.3 по 11.2.0.4 вы сталкиваетесь со следующей ошибкой при выполнении инструкции "create or replace view": ORA-01720: опция гранта не существует Представления были созданы до обновления и "CREATE OR REPLACE VIEW" отлично работали. ПРИЧИНА Наблюдаемое поведение является правильным. Вы получите эту ошибку ORA-1720 при ЗАМЕНЕ просмотра, которое выбирает из некоторых других пользовательских таблиц, и выполняются оба следующих условия:

  • вы уже предоставили избранные или другие привилегии для VIEW другому пользователю
  • У владельца представления нет опции GRANT для выбранных таблиц (или владелец представления может иметь некоторую привилегию с вариантом гранта, но не другие) Развитие объяснило это следующим образом:

Код был изменен в 11.2.0.4, чтобы создать поведение представления аналогично предоставлению. Если вы попытаетесь сделать GRANT на существующем представлении, а владелец представления не имеет опции гранта, то ожидаемый результат ORA-1720 (даже в 11.2.0.3). В 11.2.0.4 мы просто сделали CREATE VIEW совместимым с поведением GRANT, т.е. Если существует несовместимый грант, то новое определение представления не должно быть разрешено (даже с FORCE). Другими словами, мы не позволяем несовместимым грантам сосуществовать с определением вида, и поэтому необходимо выбросить ошибку. Поведение в версии 11.2.0.3 (и ранее) было неправильным; новое поведение в 11.2.0.4 является преднамеренным и правильным. РЕШЕНИЕ Чтобы избежать этой проблемы, вы можете выполнить одно из следующих действий:

  • Удалите все гранты в представлении перед ЗАМЕНЕНИЕМ представления. Это обеспечит отсутствие несовместимых грантов.
  • Снимите и заново создайте представление. Удаление представления автоматически удалит все гранты.

ЛИТЕРАТУРЫ BUG: 17994036 - ОБНОВЛЕНИЕ ДОКЛАДОВ ДО 11.2.0.4 СОЗДАТЬ ИЛИ ЗАМЕНИТЬ НЕИСПРАВНОСТИ С ORA-01720 BUG: 18024486 - ORA-1720 ПРИ СОЗДАНИИ ВИДА ПОСЛЕ ОБНОВЛЕНИЯ от 11.2.0.3.0 до 11.2.0.4.0

Я нахожусь на Oracle 11g, и я действительно понимаю проблему гранта третьей стороны.

Но, учитывая, что у пользователя user1 создание представления "view1" как выбрать 'foo' от двойной.

Затем я предоставляю Select on view1 пользователю user2 и получаю эту ошибку.

Но обратите внимание, что "dual" в представлении не квалифицируется как sys.dual, это просто двойственно. Я бы подумал с синонимом public.dual, что фактический "dual" будет использоваться public.dual, а не sys.dual, так что никакой сторонней проблемы не должно существовать, потому что она публична.

И если sys.dual-это то, что Oracle предполагает в этом представлении, можно было бы подумать, что, учитывая, что использование dual распространено в представлениях, и что предоставление привилегий на представления другим пользователям также распространено-разве тысячи пользователей не сообщали бы об этой проблеме?

2 ответа

В моей базе данных oracle есть пользователь (скажем, SWEET). Внутри схемы SWEET у меня есть таблица под названием AUTO_PARTS. Теперь я создал нового пользователя (SWEET_CV) и создал представление в таблице AUTO_PARTS SWEET. CREATE SCHEMA AUTHORIZATION SWEET_CV CREATE VIEW.

где-то по пути что-то идет не так, и я не могу понять почему. Если об этом уже просили извинения. У меня есть 3 схемы в моей базе данных: COLLDESK LOCAL_IT Гербен COLLDESK - это наша основная схема, LOCAL_IT-это место, где мы делаем нашу локальную разработку, а GERBEN-это конечный пользователь.

После консультации с нашими базами данных проблема заключается в Oracle "Feature" в 11.2.0.4:

TL;ДОКТОР верисон: Начиная с v 11.0.4, если в вашем представлении используется Dual, вы не можете предоставить этому представлению ничего, кроме SELECT.

Почему мы хотим предоставить представление больше, чем Выбрать? В нашем случае поставщик приложений упаковал свои обновления таким образом, что часть обновлений базы данных автоматически создавала сценарии полных CRUD для главной схемы приложения для каждого нового объекта, и это включало представления, потому что так было просто проще писать сценарии. Все это прекрасно работало до 11.0.4, когда Oracle сказал/принудил "Hey, you can't do that".

Oracle Database - Enterprise Edition - Версия с 11.2.0.4 по 11.2.0.4 [Выпуск 11.2] Информация, содержащаяся в этом документе, применима к любой платформе. СИМПТОМЫ После обновления с 11.2.0.3 до 11.2.0.4 при выполнении инструкции "create or replace view" возникает следующая ошибка: ORA-01720: опция предоставления не существует Представления были созданы до обновления, и "CREATE OR REPLACE VIEW" работал нормально. ПРИЧИНА Наблюдаемое поведение является правильным. Вы получите эту ошибку ORA-1720, когда REPLACING представление, которое выбирает из таблиц некоторых других пользователей, и оба из следующих условий верны:

  • вы уже предоставили select или другие привилегии на VIEW какому-либо другому пользователю
  • владелец представления не имеет опции GRANT в таблицах, из которых выбирается (или владелец представления может иметь некоторые привилегии с опцией grant, но не другие) Развитие объяснило это следующим образом:

Код был изменен в 11.2.0.4, чтобы поведение create view было похоже на grant. Если вы попытаетесь сделать GRANT в существующем представлении, а у владельца представления нет опции предоставления, то ORA-1720-это ожидаемый результат (даже в 11.2.0.3). В 11.2.0.4 мы просто сделали CREATE VIEW совместимым с поведением GRANT, т. Е. Если существует несовместимый грант, то новое определение представления не должно быть разрешено (даже с FORCE). Другими словами, мы не позволяем несовместимым грантам сосуществовать с определением представления, и поэтому должна быть выдана ошибка. Поведение в выпуске 11.2.0.3 (и ранее) было неправильным; новое поведение в 11.2.0.4 является преднамеренным и правильным. РЕШЕНИЕ Чтобы избежать этой проблемы, вы можете выполнить одно из следующих действий:

  1. Удалите все разрешения в представлении перед REPLACING представлением. Это обеспечит отсутствие несовместимых грантов.
  2. Отбросьте и воссоздайте представление. Удаление представления автоматически удалит все гранты.

REFERENCES BUG:17994036 - ПОСЛЕ ОБНОВЛЕНИЯ ДО 11.2.0.4 СОЗДАТЬ ИЛИ ЗАМЕНИТЬ НЕ УДАЕТСЯ С ПОМОЩЬЮ ORA-01720 BUG:18024486 - ORA-1720 ПРИ СОЗДАНИИ ПРЕДСТАВЛЕНИЯ ПОСЛЕ ОБНОВЛЕНИЯ С 11.2.0.3.0 TO 11.2.0.4.0

У меня есть пользователь с несколькими таблицами, и я предоставил привилегии трем из них другому пользователю. Теперь мне нужно создать view и предоставить select другому пользователю, например: Пользователь А GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE_A TO USER_B WITH GRANT OPTION; GRANT.

Я пытаюсь создать нового пользователя Oracle, которого он может выбрать только из таблиц ( ReadOnly ) SO я должен был выполнить следующие строки на схеме SYS : (например, 7502438 ) 1-Создать пользователя CREATE USER my_user IDENTIFIED BY my_password DEFAULT TABLESPACE users TEMPORARY TABLESPACE.

С помощью sys (как sysdba ) пользователь базы данных предоставляет необходимые привилегии, а затем пытается воссоздать представление с помощью пользователя базы данных sys (как sysdba ). Это было полезно для меня.

С уважением, Ваза Тусевский

Похожие вопросы:

Используя SQLDeveloper 4.0.1.14 для создания сценария экспорта (отдельные файлы & drops проверены), он сгенерировал мне эти 4 строки среди других в DROP.sql : DROP SYNONYM PUBLIC.DUAL; DROP.

ORA-02289: последовательность не существует, ошибка в hibernbate

У меня есть проблема в моей среде Oracle 11.2.0.4.0, которая ставит меня в тупик. У меня есть представление WORKING, COMPILED, из которого я могу выбирать данные, но я не могу изменить его, не.

В моей базе данных oracle есть пользователь (скажем, SWEET). Внутри схемы SWEET у меня есть таблица под названием AUTO_PARTS. Теперь я создал нового пользователя (SWEET_CV) и создал представление в.

где-то по пути что-то идет не так, и я не могу понять почему. Если об этом уже просили извинения. У меня есть 3 схемы в моей базе данных: COLLDESK LOCAL_IT Гербен COLLDESK - это наша основная схема.

У меня есть пользователь с несколькими таблицами, и я предоставил привилегии трем из них другому пользователю. Теперь мне нужно создать view и предоставить select другому пользователю, например.

Я пытаюсь создать нового пользователя Oracle, которого он может выбрать только из таблиц ( ReadOnly ) SO я должен был выполнить следующие строки на схеме SYS : (например, 7502438 ) 1-Создать.

Как я могу проверить, есть ли у пользователя опция SELECT WITH GRANT в Teradata? Я знаю, как получить список разрешений с помощью DBC.ROLEMEMBERS и DBC.ALLROLERIGHTS, просто не вижу способа.

Я пытаюсь импортировать дамп DB , созданный с помощью команды EXPDP. Ниже приводится команда, которую я использовал для импорта. impdp vnp/vnp directory=MY_DATA_PUMP_DIR.

Не знаю, чем у вас закончилась история с нашим новым пользователем DUMMY, а у меня он все же остался. Если кто-то из вас создал своего пользователя, то можете воспользоваться своим. А, вот сейчас давайте поговорим о том, как могут взаимодействовать разные схемы БД. И как это все возможно осуществить. Запускайте SQL*Plus и подключайтесь пользователем DUMMY (если вы его все-таки пристрелили, реанимируйте его согласно шагу 101). А теперь, находясь в схеме DUMMY дайте такой запрос:

Неудача "ORA-00942: таблица или представление пользователя не существует"! Говорит само за себя. Теперь попробуем:

В чем же причина? Да просто у пользователя DUMMY нет прав производить чтение из таблицы схемы MILLER! Как его предоставить? Очень просто. Подключаемся к схеме MILLER:

А теперь записываем следующее:

Меняем подключение на DUMMY:

Снова повторяем запрос вот так, чтобы было меньше столбцов:

Получаем в результате:

  • system_privilege - предоставляемое системное полномочие.
  • role - предоставляемая роль.
  • TO - определяет пользователей или роли, которым предоставляются системные полномочия.
  • PUBLIC - указывает что, системные полномочия определяемые администратором предоставляются всем пользователям.
  • WITH ADMIN OPTION - позволяет получившему системные полномочия или роль предоставлять их в дальнейшем другими пользователям или ролям. Такое решение в частности включает и возможность изменение или удаления роли.

Давайте посмотрим какие системные полномочия могут предоставляться. Основных операций в языке DDL три - это CREATE, ALTER, DROP.

  • ALTER DATABASE - Позволяет изменять саму БД.
  • ALTER USER - Позволяет изменять пользователя и его параметры (пароль, профиль, роль и т.д.)
  • ALTER PROFILE - Позволяет изменять профили.
  • ALTER TABLESPACE - Позволяет изменять табличные пространства.
  • ALTER ANY PROCEDURE - Разрешает изменение любой хранимой функции процедуры или пакета в любой схеме.
  • ALTER ANY ROLE - Разрешает изменение любой роли БД.
  • ALTER ANY SEQUENCE - Разрешает изменение любой последовательности в БД.
  • ALTER ANY TABLE - Разрешает изменение любой таблицы или вида в схеме БД.
  • ALTER ANY TRIGGER - Позволяет разрешать, запрещать компилировать любой триггер в любой схеме БД.
  • ALTER ANY INDEX - Разрешает изменение любого индекса в любой схеме.

Группа CREATE:

Позволяет создавать в любой схеме соответствующий объект:

Позволяет создавать в конкретной схеме соответствующий объект:

Удаление объектов в любой схеме, а так же очистка таблиц:

Удаление объектов в схеме:

И еще полезные системные привилегии:

Вот далеко не полный список системных привилегий, которые предоставляются оператором GRANT. Для начала я думаю хватит. А дальше все зависит от вас. Давайте теперь рассмотрим предоставление объектных привилегий. Здесь все выглядит вот так:

object_privilege - предоставляемая привилегия - одна из:

COLUMN - определяет столбец таблицы или вида, на который распространяется предоставляемая привилегия.

ON - определяет объект (таблицу, вид, и т.д.)

TO - указывает кому предоставляется привилегия.

WITH ADMIN OPTION - позволяет имеющему эту привилегию предоставлять их в дальнейшем другими пользователям или ролям.

Как с работать с этим типом мы с вами уже пробовали в начале этого шага! Можете, например добавить еще что-нибудь к вышеизложенному примеру. И наконец, давайте рассмотрим как привилегии изымаются или удаляются. Для этого необходимо применять оператор REVOKE. Его синтаксис аналогичен первым двум операторам за небольшим исключением:

Например, чтобы изъять привилегию на выборку из таблицы SALESREPS для схемы DUMMY введите следующее находясь в схеме MILLER:

Получим примерно следующее:

Вот таким образом применяя операторы GRANT и REVOKE, можно строить взаимоотношение схем и строить политику доступа к объектам БД. Попробуйте создать в новом пользователе несколько объектов и разрешить обращаться к ним из схемы MILLER. Если что не получится пишите!


Я использую Oracle 11g, и я понимаю проблему стороннего гранта.

Но, учитывая, что у пользователя user1, создающего представление "view1", выберите "foo" из двойного.

Затем я предоставляю Select on view1 пользователю user2 и получаю эту ошибку.

И если sys.dual - это то, что Oracle предполагает в этом представлении, можно подумать, что, учитывая использование двойного представления, распространено в представлениях, и что предоставление привилегий для представлений другим пользователям также распространено - разве тысячи пользователей не будут сообщать Эта проблема?

После консультации с нашей базой данных проблема связана с "функцией" Oracle в 11.2.0.4:

Версия TL; DR: Начиная с версии 11.0.4, если ваше представление использует Dual, вы не можете предоставить этому представлению ничего, кроме SELECT.

  • вы уже предоставили права выбора или другие привилегии на ВИД другому пользователю.
  • у владельца представления нет опции GRANT для выбранных таблиц (или владелец представления может иметь некоторые привилегии с опцией предоставления, но не другие). Разработчики объяснили это следующим образом:

Код был изменен в 11.2.0.4, поэтому поведение создания представления аналогично предоставлению. Если вы пытаетесь сделать GRANT для существующего представления, а у владельца представления нет опции предоставления, то ожидаемым результатом будет ORA-1720 (даже в 11.2.0.3). В 11.2.0.4 мы просто сделали CREATE VIEW совместимым с поведением GRANT, т.е. если существует несовместимый грант, то определение нового представления не должно быть разрешено (даже с FORCE). Другими словами, мы не позволяем несовместимым грантам сосуществовать с определением представления, поэтому должна быть выдана ошибка. Поведение в версии 11.2.0.3 (и ранее) было некорректным; новое поведение в 11.2.0.4 является преднамеренным и правильным. РЕШЕНИЕ Чтобы избежать этой проблемы, вы можете сделать одно из следующих действий:

  1. Удалите все гранты в представлении перед ЗАМЕНОМ представления. Это гарантирует отсутствие несовместимых грантов.
  2. Отбросьте и воссоздайте вид. Удаление представления автоматически удалит все гранты.

ССЫЛКИ НА ОШИБКУ: 17994036 - ОБНОВЛЕНИЕ ПОСЛЕ ОБНОВЛЕНИЯ ДО 11.2.0.4 СОЗДАТЬ ИЛИ ЗАМЕНИТЬ СБОЙ С ОШИБКОЙ ORA-01720: 18024486 - ORA-1720 ПРИ СОЗДАНИИ ВИДА ПОСЛЕ ОБНОВЛЕНИЯ С 11.2.0.3.0 ДО 11.2.0.4.0

  • Это нас тоже задело, но по гораздо более мягкой причине, что мы пытались добавить грант DEBUG в представление.

С помощью sys (как sysdba) пользователь базы данных предоставит необходимые привилегии, а после этого попробуйте воссоздать представление с помощью пользователя базы данных sys (как sysdba). Это было полезно для меня.

Читайте также: