sql - 如何查看 Oracle 数据库中 VPD 添加的谓词?

标签 sql performance oracle row-level-security

行级安全策略添加的谓词不会显示在 10046 跟踪文件中。一个建议是使用 10053(优化器)跟踪来查看 VPD 谓词,但很难从另一个 session 在给定 session 上设置 10053 跟踪。

是否有其他方法可以查看 RLS 策略添加了哪些谓词?

场景:RLS 策略应用于 session #1 中的查询。我们需要分析 session #1 和 session #2 中发生的情况。

数据库10g是Oracle 10g。

最佳答案

您需要一个有权访问 V$VPD_POLICY 的用户。默认情况下,只有 SYSDBA 用户,因此您可能需要 DBA 来授予您对 View 的访问权限。该 View 将谓词与 SQL 语句联系起来。您需要从 V$SQLAREA 获取 SQL_ID,因为这会为您提供 ADDRESS,这是将 SQL 语句链接到 V$SESSION 中正确行的唯一机制。

实际上访问的顺序是:V$SESSION 为您提供 session 1 执行的最后一条语句的地址。您可以使用它在 V$SQLAREA 中查找其 SQL_ID,这又允许您链接到 V$VPD_POLICY。

因此您需要访问多个 V$ View 。但如果您正在调整,您无论如何都应该可以访问它们,但 V$VPD_POLICY 除外。

关于sql - 如何查看 Oracle 数据库中 VPD 添加的谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17168781/

相关文章:

sql - Oracle 11g - 合并单列重复项以创建垂直摘要

mysql - QSql 连接并从数据库示例中读取? - 未加载驱动程序

sql - ActiveRecord 查找 - 跳过记录或获取每 N 个记录

sql - 如何规范化/更新 "order"列

c++ - boost::static_visitor 中 operator() 的附加参数

python - 列表中最长单词的长度

sql - 带有 IN (DB LINK) 和本地约束的 WHERE 子句 : slow query

mysql - 用于练习的示例数据集 - Oracle pl/sql

sql - 如何限制 oracle 数据库中每个 id 的行数?

sql - 如何在oracle的单个语句中添加带有外键约束的新列