【发布时间】:2010-09-13 17:45:40
【问题描述】:
为什么用户需要对自己的架构具有特权才能创建包和触发器?
【问题讨论】:
标签: oracle privileges
为什么用户需要对自己的架构具有特权才能创建包和触发器?
【问题讨论】:
标签: oracle privileges
我不能给你“官方”的答案,但我可以试探一下它的工作原理。在我从事的项目中,Oracle 开发人员负责将触发器和包部署到数据库模式中。但是我们还有其他的 Java 开发人员和测试人员等团队。一旦架构迁移到测试环境,然后是生产环境,我们不希望测试人员或最终用户应用程序能够任意修改与相关联的触发器和包该架构,因为这可能会使他们正在进行的任何测试的完整性无效(或在生产系统上导致更严重的问题)。
因此,在测试/生产环境中,您希望测试人员、Java 开发人员和最终用户应用程序能够在架构中读取和写入数据,但不修改包含基线代码的触发器和包.
【讨论】:
您是否在问为什么用户需要特定权限(即 CREATE TABLE、CREATE PROCEDURE 等)才能在自己的架构中创建特定类型的对象?
如果是这样,自然的答案是良好的安全性始于最小权限原则——也就是说,用户应该只拥有他们真正需要的权限来完成他们的工作,而不是更多。 DBA 经常希望为生产数据库中的用户创建只读帐户(例如,业务分析师经常需要执行不同类型的临时报告,开发人员可能需要访问以解决某些类型的问题等)。如果用户总是能够在他们自己的模式中创建对象,那么那些只读用户将突然能够将代码部署到生产数据库,而无需进行更改控制,甚至不必进行任何测试。这通常会导致代码的激增,这些代码基本上都在做同样的事情(即,十几个分析师每个人都有一个在他们自己的模式中计算销售税的程序),但每个人都有自己独特的签名、逻辑、要求、假设等。天堂禁止其中一位分析师被解雇,因为 DBA 会自然而然地删除他们的帐户,却发现某些关键报告依赖于仅存在于该分析师架构中的代码。
【讨论】:
为什么用户需要以下权限 他自己的模式来创建包和 触发器 他们没有。
他们自己的架构意味着由 username.object 定义的所有权(或命名空间) 用户在自己的模式中创建触发器所需的全部内容是: 自己模式中的表 创建触发权限
用户在自己的架构中创建包所需的全部内容是: 创建包权限
如果用户想要在另一个模式中创建对象或引用其他对象,或者需要存储在表空间中,那么他们将需要对这些外部对象的权限。
【讨论】: