I believe the original script was devised by Frank Naude set pages 0 feedback off verify off lines 500 set echo off set feedback off accept newname prompt "Enter new user name: " accept oldname prompt "Enter user to model new user from: " col generated_password new_value generated_password nopri; select dbms_random.string('a',7)||'#'||dbms_random.string('x',8) generated_password from dual / prompt ### ________ prompt ### New Username is ==> &&newname. prompt ### Password for this user is ==> &&generated_password. prompt ### ________ spool create_user_&&newname..sql -- Create user... select 'spool create_user_&&newname..log' from dual; select 'set echo on' from dual; select 'set verify on' from dual; select 'set feedback on' from dual; select 'create user &&newname identified by &&generated_password.'|| ' default tablespace '||default_tablespace|| ' temporary tablespace '||temporary_tablespace|| ' profile '||profile||';' from sys.dba_users where username = upper('&&oldname') / -- Grant Roles... select 'grant '||granted_role||' to &&newname'||decode(admin_option, 'YES', ' with admin option')||';' from sys.dba_role_privs where grantee = upper('&&oldname') / -- Grant System Privs... select 'grant '||privilege||' to &&newname'||decode(admin_option, 'YES', ' with admin option')||';' from sys.dba_sys_privs where grantee = upper('&&oldname') / -- Grant Table Privs... select 'grant '||privilege||' on '||owner||'.'||table_name||' to &&newname;' from sys.dba_tab_privs where grantee = upper('&&oldname') / -- Grant Column Privs... select 'grant '||privilege||' on '||owner||'.'||table_name||'('||column_name||') to &&newname;' from sys.dba_col_privs where grantee = upper('&&oldname') / -- Set tablespace Quotas... select 'alter user '||username||' quota '||decode(max_bytes, -1, 'unlimited', max_bytes)||' on '||tablespace_name||';' from sys.dba_ts_quotas where username = upper('&&oldname') / -- Set Default Role... set serveroutput on declare defroles varchar2(4000); begin for c1 in ( select * from sys.dba_role_privs where grantee = upper('&&oldname') and default_role = 'YES' ) loop if length(defroles) > 0 then defroles := defroles||','||c1.granted_role; else defroles := defroles||c1.granted_role; end if; end loop; dbms_output.put_line('alter user &&newname default role '||defroles||';'); end; / spool off pause Press CTRL-C if not correct or ENTER to create the new user @create_user_&&newname..sql