Данная заметка навряд ли будет интересна гуру в Оракле, поскольку они скорее всего уже в курсе этой особенности, хотя она и не так хорошо документирована, как хотелось бы. Данная заметка написана на собственном опыте миграции одной системы на более старшую версию и она адресована тем, кто работает с Ораклом не так давно, использует в своем проекте роли с аутентификацией и планирует миграцию своей системы на версии 10.2.0.5, 11.1.0.7 или 11.2.0.х.
Небольшая вводная — не так давно мне было необходимо сделать тестовую миграцию одной системы с версии 10.2.0.4 на 11.2.0.1. Я не видел в данной миграции особых подводных камней, поскольку делал подобное уже не один раз. Я забекапился, прогнал все необходимые скрипты (перед миграцией, собственно миграция и после оной), проверил на инвалиды и отдал базу разработчикам на тестирование. Но буквально сразу же они обратились ко мне с проблемой, что они не могут работать с базой, потому что им не доступен ни один объект в базе.
Я проверил, действительно, при обращении к объектам, доступ к которым разрешен через роли с аутентификацией — а такой доступ преимущественный, — выдается сообщение с ошибкой, что данный объект не найден —
Проверил роли и пользователей — привилегии на объекты действительно есть у ролей и пользователям действительно грантованы эти роли.
Сначала я подумал, что возникли какие-то ошибки при миграции, что-то нарушилось в словаре и это является причиной. Но проверив логи миграции еще раз, никаких ошибок не нашел.
Начал разбираться дальше и выяснил в итоге, что данная проблема возникает из-за того, что у разработчиков в коде не используется конструкция
поскольку до этого и так все работало, да и тем, что пользователям все роли грантованы как роли по умолчанию.
Проверив штатную документацию по 11.2, почему-то не нашел в ней никакого упоминания данной особенности — возможно кто-то из более знающих подскажет, где это описано в доке?
Начав копаться по этой проблеме в интернете, я, после непродолжительного поиска, наткнулся на пост на stackoverflow.com — stackoverflow.com/questions/2282061/grants-by-role-changed-in-oracle-11g, который и прояснил ситуацию. Оттуда же я взял и решение проблемы — отключить аутентификацию у ролей, поскольку она фактически никак не использовалась в проекте.
Таким образом, данный пост служит своего рода рекомендацией для тех, кто планирует миграцию, чтобы сэкономить свое время на решении данной проблемы.
Небольшая вводная — не так давно мне было необходимо сделать тестовую миграцию одной системы с версии 10.2.0.4 на 11.2.0.1. Я не видел в данной миграции особых подводных камней, поскольку делал подобное уже не один раз. Я забекапился, прогнал все необходимые скрипты (перед миграцией, собственно миграция и после оной), проверил на инвалиды и отдал базу разработчикам на тестирование. Но буквально сразу же они обратились ко мне с проблемой, что они не могут работать с базой, потому что им не доступен ни один объект в базе.
Я проверил, действительно, при обращении к объектам, доступ к которым разрешен через роли с аутентификацией — а такой доступ преимущественный, — выдается сообщение с ошибкой, что данный объект не найден —
ORA-00942: table or view does not exist.
Проверил роли и пользователей — привилегии на объекты действительно есть у ролей и пользователям действительно грантованы эти роли.
Сначала я подумал, что возникли какие-то ошибки при миграции, что-то нарушилось в словаре и это является причиной. Но проверив логи миграции еще раз, никаких ошибок не нашел.
Начал разбираться дальше и выяснил в итоге, что данная проблема возникает из-за того, что у разработчиков в коде не используется конструкция
SET ROLE my_role IDENTIFIED BY password;
поскольку до этого и так все работало, да и тем, что пользователям все роли грантованы как роли по умолчанию.
Проверив штатную документацию по 11.2, почему-то не нашел в ней никакого упоминания данной особенности — возможно кто-то из более знающих подскажет, где это описано в доке?
Начав копаться по этой проблеме в интернете, я, после непродолжительного поиска, наткнулся на пост на stackoverflow.com — stackoverflow.com/questions/2282061/grants-by-role-changed-in-oracle-11g, который и прояснил ситуацию. Оттуда же я взял и решение проблемы — отключить аутентификацию у ролей, поскольку она фактически никак не использовалась в проекте.
Таким образом, данный пост служит своего рода рекомендацией для тех, кто планирует миграцию, чтобы сэкономить свое время на решении данной проблемы.