我有一个有点古怪的问题,当谈到甲骨文的角色和我的模式创建的代码,我会尽我所能来形容我下面的问题:问题与用户/系统的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一直在使用该角色来授予对其他用户和潜在附加软件包的访问权限,如果我们只是任意删除角色以重新创建,这些软件包将全部丢失它。
任何援助将不胜感激。
用已登录的用户,虽然我不能授予该角色,在这种情况下,我需要使用系统用户将其授予模式。我想要避免。 –