Вот сценарий (упрощенный пример):
У меня есть пользователь/схема Oracle под названием ABC. ABC владеет таблицей под названием TRN. Код на стороне клиента подключается к базе данных как ABC и выбирает из ABC.TRN.
Все идет нормально. Однако я не хочу, чтобы клиентский код указывал имя схемы Oracle. Теперь я думаю, что удалил все ссылки в клиентском коде, которые ссылаются на схему, но я хочу проверить это, чтобы убедиться.
Итак, я хочу создать нового пользователя/схему с именем DEF, который будет использоваться клиентом для подключения к базе данных. Когда клиентское приложение выбирает из ABC.TRN, оно должно выдавать ошибку. Однако если клиентское приложение выбирает из TRN (без имени схемы), оно должно вернуть данные.
Есть ли способ сделать это? Обратите внимание, что DEF должен находиться в той же базе данных, что и ABC, есть только одна таблица TRN (принадлежащая ABC), и я не могу использовать ссылки на базы данных.
Я попытался создать нового пользователя XYZ с синонимом, указывающим на ABC.TRN, и предоставить ему права выбора на ABC.TRN. Затем я создал пользователя DEF с синонимом, указывающим на XYZ.TRN, и дал DEF права выбора на XYZ.TRN. Это работает, но Oracle достаточно умен, чтобы знать, что если у DEF есть права на выбор из XYZ.TRN, то у него также есть права на выбор из ABC.TRN, тем самым сводя на нет цель этого упражнения, поскольку я хочу, чтобы этот случай выдавал ошибку.
К вам...