用户权限

时间:2008-09-27 18:12:58

标签: oracle privileges

为什么用户需要通过自己的架构创建包和触发器的权限?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我不能给你“官方”的答案,但我可以尝试一下它的工作原理。在我所从事的项目中,Oracle开发人员将触发器和包部署到数据库模式中。但我们有其他Java开发人员和测试人员团队等。一旦将模式迁移到测试然后再迁移到生产环境,我们不希望测试人员或最终用户应用程序能够任意修改与之相关的触发器和包。该模式,因为它可能使他们正在进行的任何测试的完整性无效(或导致生产系统上更严重的问题)。

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

答案 2 :(得分:0)

  

为什么用户需要特权   他自己的架构来创建包和   触发器   他们没有。

他们自己的架构意味着username.object定义的所有权(或命名空间) 用户需要在自己的架构中创建触发器: 他们自己的架构中的表 创建触发器权限

所有用户都需要在自己的架构中创建一个包: 创建包权限

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