分类: Oracle
2008-04-12 14:03:40
来源:ccidnet 作者:sheiafhae |
Oracle许可安全(grant security)有这样的一个缺点,要维护所有的访问角色并将这些角色分配给最终用户是非常困难的。为了解决这些问题并简化Oracle的安全模式,Oracle引入了许可执行方法(grant execute method)。使用许可执行方法,所有的数据访问代码都会被封装进Oracle的存储过程里,而最终用户会被赋予执行这段代码的能力。
许可执行安全模式的设计
同特定的许可模式(在这个模式下,特定的数据库权限被赋予特定的用户)不同,许可执行模式允许用户被赋予执行的访问权,而不需要任何数据库的权限。在Oracle里,这叫做定义者的权利(definer right)。当代码被执行的时候,最终用户就取得了存储过程定义者对数据库的访问权限。同标准的许可安全模式相比,定义者权利具有多个重要的优势,主要是访问规则的简化。
在Oracle里,你可能也会使用调用者权利(invoker right),通过它,最终用户将只能使用由标准许可安全模式所分配的权限来执行存储过程。调用者权利要更复杂一些(这也是很多Oracle设计者更不愿意看到的),因为还必须实现Oracle许可安全。
很明显,许可执行模式需要仔细的前期设计。开发人员必须被迫遵照设计标准,创建Oracle存储过程和函数,它们然后会被封装进程序包里。
从操作过程上讲,这要求Oracle的设计人员为系统预先确定过程码(process code),并定义一组执行所有数据库访问和处理的程序包。
许可执行安全模式的好处
许可执行模式尤其引起了Oracle设计者的关注,因为它还有其他几个好处:
所有的过程码和SQL都被保存在数据字典里——
许可执行模式允许所有的SQL和程序都驻留在数据字典里,在这里它们能够被很容易地找到、修改和调整。
很容易就能够通过过程码来实现快速执行——
在Oracle9i里,所有的存储过程都能够被编译,还能够使用dbms_shared_pool.keep过程被放在在Oracle的库缓冲区里。这就实现了应用程序代码的超高速执行。 |