2008-09-27 130 views

回答

2

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

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

1

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

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

0

为什么用户需要特权在 自己的模式来创建包和 触发 他们不知道。

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

所有用户需要在他们自己的模式创建一个包是: 创建包特权

如果用户希望在另一个架构或引用其他对象来创建对象,或需要存储在表空间中,然后他们将需要许可对这些外来物体。