ENG: | ORA-29471 in DBMS_SQL after upgrade to 11g Release 2 |
После обновления (перехода, миграции) до версии 11g release 2, при использовании PLSQL кода, который использует пакет DBMS_SQL можно получить ошибку (хотя этот же код в 10g работает без ошибок):
ORA-29471: Отказ в доступе к DBMS_SQL
ORA-29471: DBMS_SQL access denied
Причина в том что в 11g усилили меры безопасности для пакета DBMS_SQL, чтобы защитить код от cursor snarfing, snoofing, stealing и других видов атак.
©Bobrovsky Dmitry
Подробнее можно почитать MOS — «Ora-29471: Dbms_sql Access Denied» From Software Package After Upgrade [ID 556301.1]. Так же есть интересная статья в блоге David Litchfield’s Weblog — Oracle 11g DBMS_SQL Security Changes.
©Bobrovsky Dmitry
В ID 556301.1 предлагают изменить код приложения, явно указывать security_level при вызове DBMS_SQL.OPEN_CURSOR. Т.к. это может быть очень трудоёмко предлагается временный обходной маневр — изменения скрытого параметра _dbms_sql_security_level, для отключения проверки безопасности. Для этого нужно выполнить команду и перезапустить экземпляр.
alter system set "_dbms_sql_security_level" = 384 scope=spfile;
Dmitry Bobrovsky
Обходной маневр временный, потому что в в статье указанно: «Please note that setting this is not recommended and that this workaround might cease to work in future versions» (Обратите внимание, что установка этого параметра не рекомендуется, и что это решение может перестать работать в будущих версиях). Так что возможно в будущем придется всё-таки внести изменения в старые приложения.
Еще статьи MOS:
Dmitry Bobrovsky
DBMS_SQL 11g Security Error: ORA-29474 [ID 1298367.1]
Ora-29471 Error When Executing Dbms_sql.Close_cursor [ID 760560.1]
Запись ORA-29471 в DBMS_SQL после обновления до 11g Release 2 впервые появилась Dmitry Bobrovsky Blog