大佬教程收集整理的这篇文章主要介绍了在Oracle VPD / RLS中,如何防止恶意用户谓词泄露信息?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设你有一个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策略中的恶意谓词函数是否会导致特权用户通过生成引用恶意函数的谓词来运行用户提供的代码,而这些代码在某种程度上是分开的.)
因此,在您的示例中,以下查询:
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,请注明来意。