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