Помимо того, что предложил Грант, другим способом было бы создать представления для таблиц, к которым пользователь мог бы обращаться и выполнять обычные объединения.
Для вышеперечисленного вам придется -
1. Создайте представления для каждой из записей, которые будут использоваться в запросе.
2. Добавьте представления в дерево безопасности запросов.
3. Используйте представления в запросе PS. Это будет выполнять обычные объединения в представлениях, и в соединениях не будет записей безопасности.
Чтобы обеспечить безопасность данных на уровне пользователя, вы можете иметь другое представление безопасности и присоединить его к окончательному запросу, а также иметь условие в предложении where для проверки текущего пользователя, вошедшего в систему.
Таким образом, у вас будет фиксированное количество представлений, а не представление для каждого пользовательского запроса.