Неправильная ошибка привилегии?
Два связанных приложения используют функцию в пакете в нескольких запросах, чтобы вернуть некоторые данные в виде CSV. Выбранный и объединенный столбец является полем CLOB и может содержать HTML, специальные символы и т. Д. В приложениях мало пользователей, и поэтому они не используются интенсивно. Одним из них является приложение Flex, которое использует службы Oracle HTTP, а другим - приложение ASP.NET, которое использует ODP.NET. Приложения - это одно интегрированное приложение с гиперссылками друг на друга.
Вчера я получил несколько уведомлений о странной ошибке:
ORA-01031: недостаточные привилегии ORA-06512
Номер строки в пакете в деталях ошибки указывает, что ошибка была вызвана функцией, используемой в предложении выбора. Это происходит при вызове любым приложением в 75% случаев.
Правильно ли я это ORA-06512
произошло в функции, которая затем вызвала ORA-01031 insufficient privilege error
? К несчастью, ORA-06512
это очень общая ошибка и ничего мне не говорит. И почему это вызвало бы недопустимую ошибку привилегии? Учетные записи пользователей Oracle, используемые обоими приложениями, имеют право на выполнение в пакете, который содержит функцию.
Что касается функции... она была использована в течение 2 лет без каких-либо проблем. Кроме того, когда я вчера импортировал данные в QA и протестировал их, ошибки не возникало, независимо от того, сколько раз я забивал запросы серверами. Но при производстве ошибка будет происходить примерно в 75% случаев с точно такими же параметрами.
Администратор БД попытался помочь мне с трассировкой, но мы не смогли найти сообщение об ошибке в файлах трассировки.
Сегодня все возвращается к нормальной работе. Даже если я вбить сервер с запросами ошибка будет упорно не произойдет.
Чем вызвано это очень странное поведение вчера? У кого-нибудь из гуру есть какие-нибудь идеи?
РЕДАКТИРОВАТЬ: я только что понял одну важную деталь. Столбец в таблице, который функция выбирает и объединяет в CSV, представляет собой CLOB.
1 ответ
Если клиентские приложения выполняли "SELECT clob_to_csv(clob_col) FROM ..." и вернули недопустимую привилегию SOMETIMES, то это, скорее всего, функция, которую пытается выполнить функция, а не оператор select, не имеющий достаточных привилегий для выполнения функции,
Не совсем понятно, для чего это может потребоваться, может потребоваться привилегия. Использует ли он файл (UTL_FILE) или сетевое подключение / веб-сервис?
Могут быть какие-то странные данные (возможно, очень большой сгусток).