代码之家  ›  专栏  ›  技术社区  ›  Igor Zelaya

用户权限

  •  1
  • Igor Zelaya  · 技术社区  · 16 年前

    为什么用户需要自己的模式特权来创建包和触发器?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Justin Cave    16 年前

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

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

        2
  •  1
  •   Ogre Psalm33    16 年前

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

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

        3
  •  0
  •   pappes    16 年前

    为什么用户需要权限 他自己创建包和 触发器 他们没有。

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

    用户在自己的架构中创建包所需的全部内容是: 创建包特权

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