【问题标题】:Issues with user/system oracle role access and permissions用户/系统 oracle 角色访问和权限问题
【发布时间】:2015-11-06 23:50:22
【问题描述】:

在谈到 oracle 角色和我的架构创建代码时,我遇到了一些奇怪的问题,我会尽力在下面描述我的问题:

在创建模式时,使用提供的模式名称创建一个角色。

EXECUTE IMMEDIATE 'CREATE ROLE ' || USER || 'ADMIN_R'; 

该角色随后被授予与该架构关联的特定用户。

DECLARE  
    V_ROLE_NAME       CONSTANT VARCHAR2(30)   := USER || 'ADMIN_R';  
    CURSOR C_ADMIN_USERS IS  
        SELECT USERNAME FROM DBUSERS WHERE ROLE = 'ADMINISTRATION';  
BEGIN   
    FOR REC IN C_ADMIN_USERS  
    LOOP  
        EXECUTE IMMEDIATE 'GRANT ' || V_ROLE_NAME || ' TO ' || REC.USERNAME || ' WITH ADMIN OPTION';  
    END LOOP;  
END; 

具有此角色的用户可以访问特殊的管理包。

EXECUTE IMMEDIATE 'GRANT EXECUTE ON P_ADMINISTRATION TO ' || USER || 'ADMIN_R';

问题是当我删除架构时,它并没有删除这个角色(属于 oracle),所以当我重新创建这个架构时,整个过程都会失败,因为这个角色已经存在。如果不登录我想避免的系统用户,我也无法授予对此角色的访问权限。简单的解决方案是直接删除它,但我在这种情况下担心的是 DBA 一直在使用该角色来授予其他用户和可能的其他包的访问权限,如果我们只是随意删除角色以重新创建,这些都将丢失它。

任何帮助将不胜感激。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    您可以使用以下内容围绕您的角色创建:

    SELECT COUNT(*) 
    INTO v_count
    FROM DBA_ROLES
    WHERE ROLE = USER || 'ADMIN_R';
    
    IF v_count = 0 THEN
    --grant your roles
    END IF;
    

    您可以根据需要多次授予相同的权限。

    【讨论】:

    • 我无法使用登录用户授予该角色,但在这种情况下,我需要使用系统用户将其授予架构。我想避免。
    【解决方案2】:

    您可以在创建之前删除角色

    declare
      i int;
    begin
      select count(*) into i 
        from dba_roles where role = USER||'ADMIN_R';
    
      if (0 != i) then
        execute immediate 'drop role '||USER||'ADMIN_R';
        dbms_output.put_line('Role ' ||USER||'ADMIN_R has been dropped');
      end if;
    
      execute immediate 'create role '||USER||'ADMIN_R';
      dbms_output.put_line('Role ' ||USER||'ADMIN_R has been created');
    
    end;
    

    第一次尝试:

    Role SCMADMIN_R has been created
    

    第二次尝试:

    Role SCMADMIN_R has been dropped
    Role SCMADMIN_R has been created
    

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2021-02-02
      • 1970-01-01
      • 2011-05-05
      • 2019-06-25
      • 2017-01-07
      • 2011-02-19
      • 2019-04-30
      相关资源
      最近更新 更多