用户权限

时间:2020-03-06 14:49:43  来源:igfitidea点击:

为什么用户需要对自己的架构具有特权才能创建程序包和触发器?

解决方案

我不能给我们"正式"的答案,但是我可以刺探它是如何工作的。在我从事的项目中,Oracle开发人员是将触发器和程序包部署到数据库模式中的开发人员。但是我们还有其他的Java开发人员和测试人员团队,等等。一旦将架构迁移到"测试"和"生产"环境中,我们不希望测试人员或者最终用户应用程序能够随意修改与之关联的触发器和程序包。该模式,因为这可能会使他们正在执行的任何测试的完整性失效(甚至在生产系统上引起更严重的问题)。

因此,在测试/生产环境中,我们希望测试人员,Java开发人员和最终用户应用程序能够读取数据并将数据写入模式,而不希望修改包含基线代码的触发器和程序包。

我们是否在问为什么用户需要特定的特权(即CREATE TABLE,CREATE PROCEDURE等)才能在自己的架构中创建特定类型的对象?

如果是这样,自然的答案将是,良好的安全性应从最小特权原则开始-也就是说,用户应该只拥有他们真正需要完成工作的特权,而不再拥有更多特权。 DBA经常想为生产数据库中的用户创建只读帐户(例如,业务分析师经常需要执行不同类型的临时报告,开发人员可能需要访问以解决某些类型的问题,等等)。如果用户始终能够以自己的模式创建对象,则这些只读用户将突然能够将代码部署到生产数据库中,而无需进行更改控制,甚至不必测试任何内容。这通常会导致代码的扩散,使它们基本上执行相同的操作(即,十二名分析师每个人都有一个按照自己的模式计算营业税的程序),但每个人都有自己独特的签名,逻辑,要求,假设等。天堂禁止那些分析师之一被解雇,因为DBA会自然地删除他们的帐户,而只是发现某些关键报告依赖于仅存在于该分析师模式中的代码。

Why does a user needs privileges over
  his own schema to create packages and
  triggers
  They do not.

它们自己的模式意味着由username.object定义的所有权(或者名称空间)
用户需要在自己的架构中创建触发器的所有条件是:
他们自己的模式中的表
创建触发器特权

用户以他们自己的模式创建包的所有需求是:
创建包特权

如果用户要在另一个架构中创建对象或者引用其他对象,或者需要在表空间中存储,那么他们将需要对那些外部对象的权限。