Если ваш код использует полные имена таблиц (т. Е. MASTER.real_data_table
или SIMMBOT.real_data_table
), то с точки зрения конфигурации невозможно изменить объект, на который ссылается.
Предполагая, однако, что ваш код не использует полностью определенное имя таблицы - если он просто выбирает из real_data_table
, то Oracle сначала будет искать объект в текущей схеме с этим именем, а затем искать общедоступный синоним с этим именем.
Если вы подключитесь как MASTER
, вы можете изменить текущую схему
ALTER SESSION SET current_schema = SIMMBOT
Как только вы это сделаете, все неквалифицированные ссылки на имя таблицы будут преобразованы в таблицы в схеме SIMMBOT
. Обратите внимание, что пользователю MASTER
должен быть предоставлен соответствующий доступ к объектам в схеме SIMMBOT
отдельно - установка текущей схемы влияет только на разрешение имен, а не на привилегии. Схема SIMMBOT
также должна иметь каждую таблицу, на которую хочет ссылаться код - нет способа указать иерархию для разрешения неквалифицированных имен. Вы не можете сказать Oracle сначала разрешить неквалифицированные имена в схеме SIMMBOT
, а затем в схеме MASTER
.
Альтернативой может быть создание синонимов для каждой таблицы и манипулирование синонимами для ссылки на вашу таблицу для некоторых или всех пользователей. Если ваше приложение вошло в систему как третий пользователь, который не владел какими-либо объектами - например, APP_USER
, вы можете создать либо частные синонимы в схеме APP_USER
, которые указывают на разные объекты в разных схемах -
CREATE SYNONYM app_user.real_data_table FOR simmbot.real_data_table;
CREATE SYNONYM app_user.some_other_table FOR master.some_other_table;
или вы можете создать общедоступные синонимы, которые будут применяться ко всем пользователям (кроме тех, которые владеют объектами)
CREATE PUBLIC SYNONYM real_data_table FOR simmbot.real_data_table;
CREATE PUBLIC SYNONYM some_other_table FOR master.some_other_table;