【发布时间】: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