Статическая безопасность на уровне строк Oracle

У меня есть вопрос относительно безопасности на уровне строк со статическим типом политики.

Пример :

  • Таблица => Температура
  • Функция RLS => Fun_temp

Функция RLS запрашивает ту же таблицу Temp, чтобы найти предикат на основе текущего пользователя контекста, в sysdate нет другой логики.

Теперь мой вопрос:

  • Если тип политики STATIC, и я использую эту таблицу в цикле и изменяю данные во время выполнения цикла, изменяется ли предикат??
  • Выполняется ли функция каждый раз в цикле?

мне трудно понять


person Stay Curious    schedule 07.03.2018    source источник


Ответы (1)


Если тип политики STATIC, предикат не изменится. Он будет кэшироваться в SGA. Однако, если значение параметра контекста, в вашем случае user, изменится, предикат будет оцениваться как новое значение для параметра user в контексте. Таким образом, вывод будет зависеть от нового значения параметра user в контексте.

Функция не будет выполняться каждый раз. Предикат будет кэшироваться в SGA.

OracleDocumentation для справки.

Обновлено: в приведенной выше документации Oracle четко указано ниже.

Функция для создания динамического предложения WHERE не должна выбирать из таблицы в связанной функции политики. Хотя вы можете определить политику для таблицы, вы не можете выбрать эту таблицу из политики, которая была определена для таблицы.

person ArtBajji    schedule 07.03.2018
comment
что произойдет, если таблица внутри таблицы будет изменена? - person Stay Curious; 10.03.2018
comment
Что вы подразумеваете под таблицей внутри таблицы изменена? Не могли бы вы привести подробный пример? - person ArtBajji; 10.03.2018
comment
Добавлено больше информации из документации в ответ. - person ArtBajji; 10.03.2018