开发人员应该在Dev数据库实例中拥有哪些权限

时间:2009-09-17 22:03:57

标签: oracle permissions database-administration

...以及如何授予这些权限。我在一个拥有70多个应用程序的大型IT部门工作,一些在SQL服务器中,一部分在Oracle中。每个系统都有一个prod,QA和Dev实例。我们(我是开发人员)只能访问prod / qa,我很高兴。在SQL服务器开发实例中,devs被赋予db_owner,它完全正常。争论的焦点是我在DEV oracle数据库中应该拥有哪些权限。

我认识到最好的情况是让每个开发人员在他们的工作站上运行他们自己的实例进行开发,但由于数据库的大小,这不被认为是一个选项。

我也对如何应用这些权限感兴趣。在PL / SQL执行期间,通过角色授予的oracle权限不活动,因此角色(甚至“dba”角色)无效。这使得使用内置帐户(系统)或在数十个数据库中创建数十个用户并直接向每个用户授予数十个权限。 在我看来,只是让开发人员登录系统是很有意义的,但我们的DBA声称这是一个坏主意。

7 个答案:

答案 0 :(得分:4)

我们过去只是让开发人员访问应用程序帐户。这适用于小型商店,但随着开发商数量的增加而迅速失控。

以下是我们现在所做的事情:

  1. 应用程序拥有自己的帐户(也称为架构)。
  2. 开发人员拥有自己的帐户
  3. 数据位于应用程序架构中
  4. 我们有一个ant构建脚本,可以将代码构建到您想要的任何架构中。
    • 代码包括视图,包,对象等。
    • 构建脚本包括运行存储过程以向开发人员授予对应用程序数据的显式权限的步骤
  5. 开发人员在自己的架构中进行更改
  6. 很高兴他们检查到颠覆
  7. Application的dev模式是从新的subversion构建构建的。
  8. 开发人员可以查看并重建自己的环境。
  9. 通过DBA完成对表结构的DDL更改
    • 这些也可以编写脚本
  10. 这有利于确保数据库开发人员不断重建所有内容,而不会破坏任何前端应用程序。

答案 1 :(得分:1)

我假设有相对较少数量的应用程序帐户拥有实际对象。因此,一个或多个逻辑应用程序由特定Oracle用户拥有的表组成。这不是SYSTEM或SYS,它不是公司提供的Oracle的任何帐户。这将是您的DBA创建的帐户。如果您熟悉Oracle示例模式,则HR用户拥有HR模式中的所有表,这些表构成HR应用程序的后端。

从“可能最简单的事情”的原则出发,我的第一个想法是看看开发人员是否可以直接登录这些应用程序帐户。这不是最安全的配置,并且您开放的可能性是开发人员意外或故意造成一些可能难以跟踪或轻易解决的损坏。但根据组织的不同,它可以很好地运作。权限管理非常简单 - 应用程序所有者帐户已经拥有了它最有可能的所有权限。

下一步将为每个开发人员提供一个单独的模式来开发,可能与数据库中的大量公共同义词相关,并且应用程序代码中缺少模式限定符,以便在开发人员中创建任何对象schema会自动覆盖该对象的共享版本。这提供了更好的隔离。权限通常通过创建包含开发人员所需的所有授权的脚本或通过创建将“已知良好”帐户的所有权限复制到新帐户的脚本来授予。写起来也不是特别困难 - 你只需要确保所有开发人员都拥有相同的权限集,这通常只是在授予新权限时运行的另一个脚本。

答案 2 :(得分:1)

如果您正在开发存储的PL / SQL对象,那么拥有这些对象的模式需要(如您所述)对所使用的对象进行显式授权。如果您有一个“数据”模式但是在您自己的模式中开发代码,那么您应该能够将数据模式对象的访问权限授予您的开发模式。通常我希望数据模式的用户名/密码。

关于系统权限(例如CREATE),我期望CREATE TABLE,TYPE,VIEW,PROCEDURE TRIGGER,SYNONYM。其他可能是合适的(例如CONTEXT)取决于你做什么。 DBA可能会排除CREATE DIRECTORY,因为如果使用不当可能会造成破坏。同意ANY中的特权(例如SELECT ANY TABLE,DELETE ANY TABLE)

对于性能调优/系统监视,在dev数据库上SELECT_CATALOG_ROLE是好的。如果DBA是规避风险的,您可能需要就个别观点进行谈判。浏览您的版本的参考指南,并询问您可能使用的任何内容。

答案 3 :(得分:0)

DBA的一项工作是管理用户权限。我认为系统不是一个好主意,原因有几个,尤其是丢弃整个架构的能力,我相信你不想要它。话虽如此,我认为将所有权限授予您的用户并让DBA管理这些权限是完全正确的,无论可能有多少个帐户。大多数DBA都会拥有可用于管理这些权限的脚本。

听取您的DBA,他们通常知道他们在谈论什么。

答案 4 :(得分:0)

如果它只是一个开发实例;我希望所有用户都将个人帐户添加到管理员角色。这样你仍然可以按用户记录活动;但是给开发者足够的喘息空间去做他们的事情。

答案 5 :(得分:0)

我的小组支持大约100个应用程序,其中大约20个具有自己的Oracle架构。我们已经走过了每个开发人员都有模板密码的道路,很方便。但是,事后我会建议每个开发人员使用他们自己的Oracle帐户进行开发。主要原因是审计。

答案 6 :(得分:0)

  

我认识到最好的情况是   让每个dev运行自己的实例   在他们的工作站上进行开发   但是因为它的大小   这个数据库还没有被考虑过   一个选项。

有没有办法解决这个问题,可能是通过减少个人副本中的数据量?这似乎是理想的解决方案,因为它可以让您进行所需的任何更改。然后,您可以在准备好时将它们提交给DBA,并让他更新共享开发服务器。