create User-Script

bieber

Benutzer
Beiträge
16
Hallo, ich wollte mal fragen ob jm. von euch ein Script hat, dass alle Berechtigungen eines Nutzers in ein create-Befehl steckt. Sprich ein Script was mir den gleichen Nutzer nochmal anlegen kann mit den gleichen Berechtigungen. Hintergrund ist, dass man für ein update einer Testdatenbank ja am besten den Nutzer löscht, ihn neu anlegt, und dann die entsprechenden Schematas importiert.
 
Werbung:

db.wizard

Aktiver Benutzer
Beiträge
43
AW: create User-Script

Hallo, ich wollte mal fragen ob jm. von euch ein Script hat, dass alle Berechtigungen eines Nutzers in ein create-Befehl steckt. Sprich ein Script was mir den gleichen Nutzer nochmal anlegen kann mit den gleichen Berechtigungen. Hintergrund ist, dass man für ein update einer Testdatenbank ja am besten den Nutzer löscht, ihn neu anlegt, und dann die entsprechenden Schematas importiert.


Hallo,

ich habe mal ein Script geschrieben, welches die DDL für alle User einer Datenbank erstellt. Du solltest es einfach für deine Bedürfnisse Anpassen können.

Code:
PROMPT ==============================================================
PROMPT  DBMS name:   ORACLE Version 9i R2 9.2.0.8.0
PROMPT  Created:  22.06.2009
PROMPT  User: SYS
PROMPT  Roles: Connect / Resource
PROMPT  Usage: Creates DDL for all User of an Database 
PROMPT  XXXXX
PROMPT  Release 3.0.6 Build 007
PROMPT  Target Platform xxxxxx
PROMPT ==============================================================
PROMPT SET the Spoolfile
column spool_name new_value S
set termout off
SELECT LOWER(G.global_name)||'_'||
       LOWER(U.username)||'_'||
       TO_CHAR(SYSDATE,'DD.MM.YYYY')  ||'.lst'
                                 spool_name
  FROM user_users  U,
       global_name G
 WHERE ROWNUM < 2;
set termout on
spool &S
SELECT U.username||' - '||
       G.global_name||' - '||
       TO_CHAR(SYSDATE,'DD.MM.YYYY HH24:MI:SS')  
                                 START_run_info
  FROM user_users  U,
       global_name G
 WHERE ROWNUM < 2;
 set head off
set pages 0
set long 9999999
SELECT DBMS_METADATA.get_ddl ('USER', username) || ';' ddl FROM dba_users;
SELECT DBMS_METADATA.get_ddl ('ROLE', role) || ';' ddl FROM dba_roles;
SELECT DBMS_METADATA.get_granted_ddl ('ROLE_GRANT', role) || ';' ddl
  FROM role_role_privs;
SELECT DBMS_METADATA.get_granted_ddl ('SYSTEM_GRANT', role) || ';' ddl
  FROM role_sys_privs;
SELECT DBMS_METADATA.get_granted_ddl ('OBJECT_GRANT', role) || ';' ddl
  FROM role_tab_privs;
 
 
SELECT U.username||' - '||
       G.global_name||' - '||
       TO_CHAR(SYSDATE,'DD.MM.YYYY HH24:MI:SS')  
                                 STOP_run_info
  FROM user_users  U,
       global_name G
 WHERE ROWNUM < 2;
PROMPT LOGFILE writen : &S
spool off



Gruss
 

bieber

Benutzer
Beiträge
16
AW: create User-Script

Vielen Dank.

Script funst sehr gut... jetzt muss ich es nur noch umschreiben :eek: (der smilie fetzt)
 

bieber

Benutzer
Beiträge
16
AW: create User-Script

Auf die Anregung mit den DBMS_METADATA habe ich folgendes Script gefunden (welches ideal für mich funktioniert)
Code:
set head off
set pages 0
set long 9999999
spool user_script.sql
SELECT DBMS_METADATA.GET_DDL('USER', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS;
spool off;
und nebenbei hab ich auch wieder was dazugelernt :)

bei deinem Script habe ich irgendwie nicht die Rollen meines Nutzers bekommen, da du auf role_role_privs usw gehst, nicht auf dba_users
 

db.wizard

Aktiver Benutzer
Beiträge
43
AW: create User-Script

Auf die Anregung mit den DBMS_METADATA habe ich folgendes Script gefunden (welches ideal für mich funktioniert)
Code:
set head off
set pages 0
set long 9999999
spool user_script.sql
SELECT DBMS_METADATA.GET_DDL('USER', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS
UNION ALL
SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USERNAME) || '/' DDL
FROM DBA_USERS;
spool off;
und nebenbei hab ich auch wieder was dazugelernt :)

bei deinem Script habe ich irgendwie nicht die Rollen meines Nutzers bekommen, da du auf role_role_privs usw gehst, nicht auf dba_users

- ja klar, deswegen habe ich geschrieben, dass du es anpassen musst :)


Gruss
 
Werbung:
Oben