ITPub博客

首页 > 应用开发 > IT综合 > rename role(重命名role)

rename role(重命名role)

原创 IT综合 作者:beautychina 时间:2011-05-05 09:44:43 0 删除 编辑

rename role

oracle 没有重命名role的命令,自己写了一个.
role 主要包含系统权限(如create table等等),object权限(如grant select on table),
以及该role包含的role(grant role to role),还有包含该role的帐号.
这些内容通过以下四个系统表就可以查清除了

与role有关 dict
DBA_ROLE_PRIVS #包含role的帐号
ROLE_ROLE_PRIVS #被grant给role的role
ROLE_SYS_PRIVS #role 系统权限
ROLE_TAB_PRIVS #role object权限

以下为脚本,需要用dba权限来做
connect sys/sys as sysdba;

set feed off head off linesize 200 pagesize 50000
define old_role=HOED
define new_role=STED
spool cr_new_role_privs.sql
select 'grant '||granted_role||' to &&new_role'||decode(admin_option,'YES',' with admin option;',';')
from role_role_privs
where role = '&&old_role';

select 'grant '||privilege||' to &&new_role'||decode(admin_option,'YES',' with admin option;',';')
from role_sys_privs
where role = '&&old_role';

select 'grant '||privilege||decode(column_name,null,'','('||column_name||')')||' on '||owner||'.'||table_name||' to &&new_role'||';'
from role_tab_privs
where role = '&&old_role';

select 'grant &&new_role'||' to '||grantee||decode(admin_option,'YES',' with grant option;',';')
from dba_role_privs
where granted_role = '&&old_role';
spool off
@cr_new_role_privs.sql

删除role前,要先检查new role的权限是否正确,
检查方法可以先建一个帐号,把new role gant 给这个帐号,与旧帐号比对以下
drop role &&old_role;

权且无聊,写下备用.

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/106358/viewspace-1049467/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-11-17

  • 博文量
    10
  • 访问量
    15826