1

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

4

3 回答 3

2

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

如果是这样,自然的答案是良好的安全性始于最小权限原则——也就是说,用户应该只拥有他们真正需要的权限来完成他们的工作,而不是更多。DBA 经常希望为生产数据库中的用户创建只读帐户(例如,业务分析师经常需要执行不同类型的临时报告,开发人员可能需要访问以解决某些类型的问题等)。如果用户总是能够在他们自己的模式中创建对象,那么那些只读用户将突然能够将代码部署到生产数据库,而无需进行更改控制,甚至不必进行任何测试。这通常会导致代码的扩散基本上做同样的事情(即

于 2008-09-28T07:30:11.050 回答
1

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

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

于 2008-09-27T18:50:32.890 回答
0

为什么用户需要对他自己的模式的权限来创建包和触发器他们不需要。

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

用户在自己的模式中创建包所需的只是:创建包权限

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

于 2008-09-28T10:02:56.130 回答