Oracle数据库的开发体系结构

时间:2015-03-30 13:43:49

标签: oracle architecture schema development-environment oracle11gr2

我们在Oracle DB 11gR2中有几个专用于模块(财务,库存,crm等)的模式。我们希望为开发人员建立一个架构:

  
  1. 开发人员不会拥有架构所有者用户的密码。
  2.   
  3. 根据开发人员对数据库对象的访问时间有限   以两种方式达到他们的水平:
    • 顶级高级开发人员   当它们具有特定的特定模式时,它将拥有无限的特权   授权在有限的时间内。
    • 初级开发人员将拥有   授权时,特定模式的有限特权   有限的时间。

简而言之,我们希望在Oracle DB中组织我们的开发方式。我们如何建立这种结构? 如果我不够清楚,我可以提供您的问题的详细信息。

谢谢,

编辑:我有直觉认为案件不太清楚。让我举一个简单的场景:

假设我有一个名为'DUMMY'的模式(带有对象的用户),它有一个名为'DummyTbl'的表和一个名为'DummyFunc'的函数。显然,用户'DUMMY'可以无限制地管理所有这些对象,因为她是所有者。但是,我不希望开发人员使用通用用户'DUMMY',我希望他们使用自己的用户名登录数据库。

因为当我向用户提供用户'DUMMY的密码时,我无法区分开发者的特权级别。所有开发人员都可以无限制地行事。相反,我希望名为“DummySenior”的高级开发人员能够创建,更改,执行对象,并且还可以对“DummyTbl”执行CRUD操作。

但是,我希望名为'DummyJunior'的初级开发人员仅引用对象而不对表执行CRUD操作。实现这一目标最明显的方法是陪伴角色。但是,我们在配置所需角色时遇到了几个问题(即,'DummySenior'能够在'DUMMY'模式下创建表格,他必须'创建任何表'权限。

然而,当'DummySenior'具有该特权时,他也可以在'DUMMY2'模式下创建表格。这是一个明显的安全漏洞。)

1 个答案:

答案 0 :(得分:1)

对于高级开发人员,您可以创建一个定义者权限过程,只需运行任何传入的命令。假设DUMMY具有相关的CREATE TABLE/VIEW/...权限,这有效地为高级开发人员提供了所有SELECT ANY特权,但仅适用于那个架构。

create or replace procedure dummy.execute_any(p_code in clob) authid definer is
begin
    execute immediate p_code;
end;
/

--For a procedure this powerful, grant it directly to a user.
--That keeps the privilege "obvious", it won't get buried in layers of roles.
grant execute on dummy to senior_developer;

对于初级开发人员,请创建一个角色并动态授予其相关的SELECT权限。您可能希望安排此过程或临时运行它。

--Create and populate role with some lesser object privileges on a schema.
create role junior_developer_role;

begin
    --Repeat this structure for other objects, like sequences.
    for tables in
    (
        select owner, table_name
        from dba_tables
        where owner = 'DUMMY'
    ) loop
        execute immediate 'grant select on '||tables.owner||'.'||tables.table_name||
            ' to junior_developer_role';
    end loop;
end;
/