5

...以及如何授予这些权限。我在一个拥有 70 多个应用程序的大型 IT 部门工作,其中一些在 SQL Server 中,大多数在 oracle 中。每个系统都有一个 prod、QA 和 Dev 实例。我们(我是一名开发人员)拥有对 prod/qa 的只读访问权限,对此我很好。在 SQL Server 开发实例中,为开发人员提供了 db_owner,它工作得很好。争论的焦点是我应该在 DEV oracle 数据库中拥有哪些权限。

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

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

4

7 回答 7

4

我们过去只允许开发人员访问应用程序帐户。这适用于小商店,但随着开发人员数量的增加,它很快就会失控。

这是我们现在要做的:

  1. 应用程序有它自己的帐户(又名模式)。
  2. 开发者有自己的账户
  3. 数据驻留在应用程序架构中
  4. 我们有一个 ant 构建脚本,可以将代码构建到您想要的任何模式中。
    • 代码包括视图、包、对象等。
    • 构建脚本包括一个运行存储过程的步骤,以向开发人员授予对应用程序数据的显式权限
  5. 开发人员在自己的架构中进行更改
  6. 当他们高兴时,他们将其检查为颠覆
  7. 应用程序的开发模式是从新的颠覆构建构建的。
  8. 开发人员可以检查并重建他们自己的环境。
  9. 对表结构的 DDL 更改是通过 DBA 完成的
    • 这些也可以编写脚本

这样做的好处是确保任何前端应用程序都不会被数据库开发人员不断地重建一切所破坏。

于 2009-09-18T16:42:33.860 回答
1

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

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

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

于 2009-09-17T22:28:47.007 回答
1

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

关于系统权限(例如 CREATE),我希望 CREATE TABLE、TYPE、VIEW、PROCEDURE TRIGGER、SYNONYM。其他可能是合适的(例如 CONTEXT),具体取决于您的工作。DBA 可能会排除 CREATE DIRECTORY,因为如果使用不当可能会造成破坏。同样适用于其中包含 ANY 的权限(例如,SELECT ANY TABLE、DELETE ANY TABLE)

对于性能调整/系统监控,在开发数据库上 SELECT_CATALOG_ROLE 很好。如果 DBA 是规避风险的,您可能必须就个人观点协商授予。浏览您的版本的参考指南,并询问您可能使用的任何内容。

于 2009-09-17T23:17:59.110 回答
0

DBA 的工作之一是管理用户权限。出于几个原因,我认为系统不是一个好主意,尤其是能够删除我确定您不想要的整个模式的能力。话虽如此,我认为将所有权限授予您的用户并让 DBA 管理这些权限是非常好的,无论可能有多少个帐户。无论如何,大多数 DBA 都会拥有可用于管理这些权限的脚本。

听听您的 DBA,他们通常知道自己在说什么。

于 2009-09-17T22:16:26.233 回答
0

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

于 2009-09-17T22:17:08.657 回答
0

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

于 2009-09-17T23:09:32.230 回答
0

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

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

于 2009-09-17T23:17:54.120 回答