Синонимы и материализованное представление
- У меня есть две таблицы. а) студент б) ограниченный студент
- два пользователя а) админ б) пользователь
- один синонимы для обоих пользователей. в админе это относится к студенту, но для пользователя это относится к limited_student.
Я хочу создать материализованное представление MV . Код материализованного представления выглядит
CREATE MATERIALIZED VIEW SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLUMNS;
такой, что если я подключен к администратору, то он должен ссылаться на студента, а для пользователя он должен ссылаться на disabled_student, передавая единственное синонимы имени stu. что-то вроде
SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLUMNS E='st';
Результат, который я хотел получить при подключении к пользователю, должен давать столбцы таблицы limited_student. тогда как всякий раз, когда я подключался к администратору, он должен давать столбцы таблицы ученика
Я создал все вышеупомянутые объекты. Но материализованное представление не дает ожидаемого результата, как я хочу.
1 ответ
Вы можете использовать обычное представление, в котором вы можете объединить эти 2 таблицы и отфильтровать их по зарегистрированному пользователю. Также проверьте Oracle RLS (безопасность на уровне строк), https://docs.oracle.com/cd/B28359_01/network.111/b28529/intro.htm
Независимо от приложения и пользователя вы можете контролировать, каким должно быть предложение where. Таким образом, вы имеете гораздо более высокий контроль над записями, которые являются запросами.
Например,
Администратор
выберите * из сту;
Обычный пользователь
выберите * из сту;
Будет иметь совершенно разные результаты, в зависимости от предиката, установленного для RLS.