Oracle   发布时间:2022-05-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Oracle VPD / RLS中,如何防止恶意用户谓词泄露信息?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读Oracle VPD(虚拟专用数据库,a.k.a.细粒度安全性,基于标签的安全性的基础)的文档,而且我正在抓紧困难. VPD如何防止用户在WHERE子句中使用恶意函数泄露信息?

假设你有一个VPD策略,它生成一个静态谓词,如cust_no = SYS_COntexT(‘order_entry’,’cust_num’); (如the Oracle VPD tutorial).

这导致查询被重写,因此:

SELECT * FROM orders;

变为:

SELECT * FROM orders 
  WHERE cust_no = SYS_COntexT('order_entry','cust_num');

到目前为止很好.但是如果用户写道:

SELECT * FROM orders WHERE my_malicIoUs_function(secret_column);

? my_malicIoUs_function将其看到的每个值插入恶意用户控件所拥有的另一个表中,这样他们就可以通过选择该表来查看秘密数据.

根据文档,VPD重写器将产生如下内容:

SELECT * FROM orders 
  WHERE cust_no = SYS_COntexT('order_entry','cust_num')
    AND my_malicIoUs_function(secret_column);

Oracle可以自由地在WHERE中重新订购子子句.是什么阻止它首先运行my_malicIoUs_function,如果它认为那将是更便宜或更具选择性的谓词? (当安全条件是SYS_COntexT查找时,不太可能,但如果条件是针对另一个表的子查询,或者是自己的UDF,则很可能).

我已经阅读了文档,我没有看到它在执行VPD谓词和用户提供的谓词时指定任何顺序保证.是否有这样的保证或任何其他机制来防止恶意谓词功能?

(我也很好奇VPD策略中的恶意谓词函数是否会导致特权用户通过生成引用恶意函数的谓词来运行用户提供的代码,而这些代码在某种程度上是分开的.)

“恶意功能”在应用VPD策略后运行,因此无法查看隐藏数据.

因此,在您的示例中,以下查询:

SELECT * FROM orders WHERE my_malicIoUs_function(secret_column);

获取重写为:

SELECT * FROM (
  SELECT * FROM orders orders
  WHERE cust_no = SYS_COntexT('order_entry','cust_num')
)
WHERE my_malicIoUs_function(secret_column);

因此,该函数仅对满足VPD谓词的行执行.

参见:http://docs.Oracle.com/cd/E11882_01/appdev.112/e40758/d_rls.htm#i1005326

大佬总结

以上是大佬教程为你收集整理的在Oracle VPD / RLS中,如何防止恶意用户谓词泄露信息?全部内容,希望文章能够帮你解决在Oracle VPD / RLS中,如何防止恶意用户谓词泄露信息?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: