复制Oracle数据库用户


17

我们将聘请外部审核员对Oracle数据库进行审查。他们将运行一个工具来执行检查,为此,他们需要一个可以连接到数据库并从中获取信息的用户ID。

为此,我们在数据库中已有一个用户。但是,它是生产ID,因此我们无法将其锁定。我们想克隆/复制此ID,包括其角色和权利。

在Oracle中有没有办法做到这一点?

Answers:


21

用户创建:

select dbms_metadata.get_ddl( 'USER', 'PHIL' ) from dual;

默认角色:

select dbms_metadata.get_granted_ddl( 'DEFAULT_ROLE', 'PHIL' ) from dual;

系统补助:

select dbms_metadata.get_granted_ddl( 'SYSTEM_GRANT', 'PHIL' ) from  dual;

对象授予:

select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'PHIL' ) from dual;

角色授予:

select dbms_metadata.get_granted_ddl( 'ROLE_GRANT', 'PHIL' ) from dual;

配额:

select dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', 'PHIL' ) from dual;

如果以上任何一项都没有输出,您将得到一个看起来像这样的异常:

SQL> select dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', 'PHIL' ) from dual;
ERROR:
ORA-31608: specified object of type TABLESPACE_QUOTA not found
ORA-06512: at "SYS.DBMS_METADATA", line 4018
ORA-06512: at "SYS.DBMS_METADATA", line 5991
ORA-06512: at line 1

no rows selected

SQL>

然后进行搜索并替换输出以更改用户名。


请注意,DDL生成将现有用户用双引号引起来;这使得替换现有用户名非常简单。
安德鲁·沃尔夫

1
为了成功,创建新用户时,ROLE_GRANT必须在DEFAULT_ROLE语句之前。
Theofilos

@Theofilos谢谢,编辑
Betlista '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.