在后台扩展每个选择查询

Posted

技术标签:

【中文标题】在后台扩展每个选择查询【英文标题】:Extend every select query in the background 【发布时间】:2021-12-07 09:37:17 【问题描述】:

是否可以扩展由 db 用户执行的每个选择查询?

例如用户将执行 select * from mytable 并在后台执行以下操作: select * from mytable union all select * from different_schema.mytable

可以通过使用 VPD 函数的动态 where 子句来限制查询。

return '1=1'

我可以使用 VPD 扩展查询以同时从不同架构中选择数据吗?

return '1=1 union all select * from different_schema.' || tab;

上述示例出现以下错误:

ORA-28113: 策略谓词有错误

一种解决方法是创建一堆包含联合的动态生成的视图,但如果可能的话,我想使用 VPD 或类似的方法。

【问题讨论】:

【参考方案1】:

不,您不能使用 VPD 执行此操作。 VPD 将为每个查询添加一个predicate,这是对查询的where 子句的扩展。不能用于union与另一个表。

我建议您使用其他方法:使用包含联合的视图并授予对这些视图而不是基表的适当权限。

【讨论】:

以上是关于在后台扩展每个选择查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sass 从媒体查询中扩展选择器

SQL高级子选择查询

如何在 SQL 查询中选择每个组的第一行?

在单个查询中为每个 DISTINCT 选择几条记录

Oracle查询在每个下划线后选择前3个字符[关闭]

是否有比此查询更具可扩展性的子选择替代方案?