如何在 Oracle 中将一个用户复制或克隆到另一个用户

Posted

技术标签:

【中文标题】如何在 Oracle 中将一个用户复制或克隆到另一个用户【英文标题】:how to copy or clone one user to other in Oracle 【发布时间】:2020-06-09 09:44:44 【问题描述】:

我想将所有权利、角色和授权从一个用户复制到另一个用户。如何在 plsql 过程或函数中执行此操作。 我正在使用 oracle 12c 数据库。

【问题讨论】:

这能回答你的问题吗? How to clone user in Oracle 【参考方案1】:

我使用这个脚本来生成用户创建:

set long 1000000 pagesize 0 feedback off trimspool on verify off

begin
   dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true);
   dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true);
end;
/

variable v_username VARCHAR2(30);

exec:v_username := upper('&1');

select dbms_metadata.get_ddl('USER', u.username)
from   dba_users u
where  u.username = :v_username
union all
select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', tq.username)
from   dba_ts_quotas tq
where  tq.username = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee)
from   dba_role_privs rp
where  rp.grantee = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee)
from   dba_sys_privs sp
where  sp.grantee = :v_username
union all
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee)
from   dba_tab_privs tp
where  tp.grantee = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', rp.grantee)
from   dba_role_privs rp
where  rp.grantee = :v_username
and    rp.default_role = 'YES'
and    rownum = 1
union all
select dbms_metadata.get_ddl('PROFILE', u.profile)
from   dba_users u
where  u.username = :v_username
and    u.profile <> 'DEFAULT'
/

【讨论】:

嗨,使用上面的脚本,我只能获取授予用户的授权:v_username。但我也想将这些赠款提供给另一个用户。基本上复制这些权利并授予另一个用户。 但是脚本一旦生成,简单的编辑替换用户名?

以上是关于如何在 Oracle 中将一个用户复制或克隆到另一个用户的主要内容,如果未能解决你的问题,请参考以下文章

在同一个表中将值从一列复制到另一列

如何使用复制命令在 postgres 中将数据从一个表复制到另一个表

在oracle中怎么把一张表的数据插入到另一张表中

如何复制MySQL数据库或表到另外一台服务器

如何复制MySQL数据库或表到另外一台服务器

如何复制MySQL数据库或表到另外一台服务器?