Строка соединения Oracle для таблиц других пользователей - PullRequest
2 голосов
/ 22 января 2011

У нас есть 2 сервера с одинаковой схемой базы данных, однако из-за того, что наша инфраструктура настроена на одном сервере, мы должны поставить перед всеми именами таблиц имя пользователя

например:

select * from engmon.cmts

Однако на другом сервере запрос должен выглядеть следующим образом

select * from cmts

Это потому, что один сервер подключается к таблице в другой схеме / имени пользователя. Можно ли что-то изменить в URL-адресе jdbc, чтобы оба запроса выглядели как # 2? Таким образом, нам не нужно динамически изменять sql в зависимости от того, к какому серверу мы подключаемся (dev или prod).

Есть идеи?

1 Ответ

5 голосов
/ 22 января 2011

Я не верю, что вы можете что-либо сделать с URL JDBC.Однако вы можете выполнить оператор SQL

ALTER SESSION SET current_schema = ENGMON

сразу после подключения (вы также можете поместить его в триггер входа в систему в Oracle).Это приведет к тому, что Oracle разрешит разрешать неквалифицированные имена объектов, используя схему ENGMON, а не схему текущего пользователя.Это не влияет на разрешения - ваш сеанс все еще имеет привилегии, назначенные текущему пользователю, а не пользователю ENGMON.

Кроме того, вы можете создавать синонимы для различных таблиц, к которым вам нужен доступ.Локальные синонимы (видимые только для вас) или общедоступные синонимы (видимые для всех пользователей).Таким образом,

CREATE [PUBLIC] SYNONYM cmts
   FOR engmon.cmts

Синонимы должны быть созданы только один раз и будут применяться ко всем сеансам независимо от того, из какого приложения они поступают.Установка CURRENT_SCHEMA должна выполняться каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...