Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
Спрошу, может кто сталкивался.
Как заставить в триггере работать dynamic-sql или если есть возможность использовать PRIVATE TEMPORARY TABLE без динамики? На инструкции EXECUTE IMMEDIATE получаю ошибку - ORA-01031: привилегий недостаточно. Какие права нужны и как их назначить?
Что в итоге пытаюсь получить, возможно есть другой способ. В триггере необходимо получить записи затронутые командой DML.
те в табличку лога записать при update по одной записи из таблички test (distinct, те что бы там было две записи f1 = 1, 2), как это можно сделать в триггере? ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 24.01.22 09:28 |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
Спрошу:
TRIGGER на какую таблицу test ? А то таблицы MyTable не отражено... |
Re: Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
Да на табличку test/ В принципе пока выкрутился через Global Temporary Table, НО это надо создавать таблицу в БД, не по фенщую это. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
В принципе мы в одном проекте и использовали Global Temporary Table с ON COMMIT DELETE ROWS...
|
Re: Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
Если не сумею запустить Private Table, то придётся использовать Global. Кстати, как в триггере из одной схемы обратиться к ф-ии другой схемы, какие нужны права?? Код в ТРИГГЕРЕ примерно такой: Цитата: ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 2 раз(а). Последнее : PaulWist, 24.01.22 12:13 |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
>>какие нужны права ?
Права на EXECUTE FUNCTION |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
Хм...
Не знаю, но я бы без Global Temporary Table пользовался:
Но лучше в этом случае индексы на F1 повесить... |
Re: Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
права на Execute есть, всё равно пишет нет привелегий.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
Скрипт схемы можно увидеть ?
|
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
В схеме OtherSch должно быть прописано что-то в этом роде:
Исправлено 1 раз(а). Последнее : ВладимирС, 24.01.22 12:50 |
Re: Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
Те если я выполняю
выборка происходит без проблем. Но если OtherSch.Func() использовать в триггере, то прав не хватает. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
Хм... может ИК подскажет...
|
Re: Oracle Trigger | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
По триггеру - аудиты/логи предпочтительнее делать через row-level триггера. При этом я не вижу надобности ни в каких временных таблицах вообще. Динамический SQL тоже не стоит без особой надобности использовать.
По правам - без кода ничего сказать нельзя. Не видно ни в каком режиме создана эта функция (invoker rights vs definer rights), ни какой там внутри код (к чему она обращается и как), ни как даны права на исполнение этой функции - напрямую или через роль, ни какую именно ошибку выдаёт сервер... В общем слишком мало информации. ------------------ WBR, Igor |
Re: Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
Всё, разобрался.
Что бы выполнить в триггере одной схемы ф-ию из другой схемы, надо дать прямые права EXECUTE владельцу схемы с триггером, если дать права EXECUTE роли в которую входит владелец схемы с триггеров, то не взлетает. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Oracle Trigger | |
---|---|
ВладимирС Сообщений: 1694 Дата регистрации: 03.11.2005 |
А конкретно скрипт можно показать ? |
Re: Oracle Trigger | |
---|---|
PaulWist Автор Сообщений: 14737 Дата регистрации: 01.04.2004 |
Тут и простой select не взлетает если нет "прямых" прав или я что-то неправильно приготовил.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 3 раз(а). Последнее : PaulWist, 26.01.22 16:42 |
Re: Oracle Trigger | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Именно так - в контексте PL/SQL кода работающего в режиме definer rights роли явно отключены, и актуальны лишь права данные непосредственно пользователю (схеме). В варианте хранимого кода работающего в режиме invoker rights (а это так же включает "анонимные блоки pl/sql кода") - код "наследует" права доступа того кто его вызывает (т.е. текущего пользователя) - естественно это имеет свои отрицательные моменты. Скажем дав права на ХП schemeA.Log() другой схеме, можно не беспокоиться о том что именно делает внутри себя эта ХП - она будет иметь доступ ко всем объектам схемы schemeA - т.к. авторизуется как schemeA. Если же определить её с опцией AUTHID CURRENT_USER, то она уже будет работать как будто создана и запускается в схеме того кто её вызывает. И права на объекты "якобы своей" схемы она не получит, и собственно не полностью квалифицированные имена объектов (имя таблицы без префикса схемы, к примеру) будут разрешаться относительно схемы того кто ХП вызвал - включая, к слову, динамический SQL. ------------------ WBR, Igor |
© 2000-2025 Fox Club  |