我有一个关于静态策略类型的行级安全性的问题
例子 :
- 表 => 温度
- RLS 函数 => Fun_temp
RLS 函数是查询同一张表 Temp 以根据当前上下文用户查找谓词,sysdate 上没有其他逻辑。
现在我的问题是:
- 如果策略类型是 STATIC,并且我在循环中使用此表并在循环执行时更改了数据,谓词是否会更改?
- 该函数是否每次都在循环中执行?
我觉得很难理解
我有一个关于静态策略类型的行级安全性的问题
例子 :
RLS 函数是查询同一张表 Temp 以根据当前上下文用户查找谓词,sysdate 上没有其他逻辑。
现在我的问题是:
我觉得很难理解
如果策略类型是 STATIC,则谓词不会改变。它将被缓存在 SGA 中。但是,如果上下文参数值(在您的情况下为 user)发生更改,则谓词将评估为上下文中参数 user 的新值。因此输出将取决于上下文中参数 user 的新值。
该函数不会每次都执行。谓词将缓存在 SGA 中。
Oracle 文档供您参考。
更新:上述 Oracle 文档清楚地说明了以下内容。
生成动态 WHERE 子句的函数不得从关联策略函数内的表中进行选择。尽管您可以针对表定义策略,但您不能从针对该表定义的策略中选择该表。