Zum Inhalt springen

orac

Mitglieder
  • Gesamte Inhalte

    22
  • Benutzer seit

  • Letzter Besuch

  1. Vielleich Hilfreich fuer andere: Ich habe das Script http://orafaq.com/scripts/sql/cre8like.txt angepast. Angepast habe ich "Tablespace Quotas..." (war ein Fehler drin) und "Grant Table Privs..." (sodass "with grant options" auch als dieses wird erteilt). Ausserdem fehlte ein "Quote". Weiter benutze ich die Spool-Funktion, sodass die Ausgabe in ein Script wird geschrieben. Kommentar vor der Passworteingabe geloescht(accept psw), da sonst die Abfrage geschiet, wenn die Variable das erste mal auftritt. Dies ist nicht erwuenscht, wenn man die Ausgabe spult. Ansonsten funktionierte das Script unter Oracle 9i bei mir gut. Als User SYS runnen! Unter Oracle 8i functionieren die "Object privs" nicht da der User SYS kein Object priv vergeben kann auf Objecten die von einem anderen User sind. In Oracle 9i hat der User SYS dieses Recht. Also keine Garantie fuer dieses Script, erst Testen... Das Script generiert ein SQL-Script mit den benoetigten sql-statements um ein user "newuser" an zu legen mit dem Vorbild von "olduser". Z.B. $ export ORACLE_SID=datenbankname $ sqlplus /nolog SQL> connect / as sysdba SQL> @cr8like.sql SQL> @cr8likeUser.sql Angepaste Script: rem ---------------------------------------------------------------------- rem Filename: cr8like.sql rem Purpose: Script to create a new user (with privs) like an existing rem database user. User data will not be copied. rem Date: 02-Nov-1998 rem Author: Frank Naude, Oracle FAQ rem Updated: Konstantin Krivosheyev - 7 Dec 2002 rem Updated: Frank Naude - 18 Dec 2003, 2 Dec 2004 rem Source: http://orafaq.com/scripts/sql/cre8like.txt rem ---------------------------------------------------------------------- set pages 0 feed off veri off lines 500 accept oldname prompt "Enter user to model new user to: " accept newname prompt "Enter new user name: " accept psw prompt "Enter new user's password: " spool cr8likeUser.sql -- Create user... select 'create user &&newname identified by values '''||password||''''|| -- select 'create user &&newname identified by &psw'|| ' 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'); -- Tablespace Quotas... select 'alter user &&newname 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 quit;
  2. Da der neue User auch die Rollen zugeteilt bekommt erhaelt er diese Rechte ueber die Rolle selbst. Das Gleiche gilt fuer die Systemrechte. Diese kann man aber auch aus den Data Dictionary Views DBA_ROLE_PRIVS und DBA_SYS_PRIVS erfragen.
  3. Eben meine Frage selbest beantworten... Ich musste einen neuen User anlegen, user2, der dieselben Objektberechtigungen erhalten sollte als der User1. Per "privilege" habe ich eine Abfrage gemacht. Erst mit "grand options" dann ohne. Privileges: select, update, insert, delete, references, execute Beispiel fuer das Objektrecht: Select + with grant option * Query “select†Objektberechtigungen von User1 with grant options: select 'GRANT SELECT TO user2 ON ' ||OWNER||'.'||TABLE_NAME||' WITH GRANT OPTION'||';' from DBA_TAB_PRIVS where PRIVILEGE='SELECT' and grantee = 'user1' and GRANTABLE='YES'; Als Resultat dieser Anweisung bekomme ich eine Liste von SQL-Statements die ich wiederum in ein SQL-Script kopiere. Beispiel: GRANT SELECT TO user2 ON userx.tabellennameA WITH GRANT OPTION; GRANT SELECT TO user2 ON userx.tabellennameB WITH GRANT OPTION; GRANT SELECT TO user2 ON usery.tabellennameC WITH GRANT OPTION; GRANT SELECT TO user2 ON usery.tabellennameD WITH GRANT OPTION; GRANT SELECT TO user2 ON userz.tabellennameE WITH GRANT OPTION; [...] Ein Beispiel ohne "Grant Options": select 'GRANT EXECUTE TO user2 ON ' ||OWNER||'.'||TABLE_NAME||';' from DBA_TAB_PRIVS where PRIVILEGE='EXECUTE' and grantee = 'user1' and GRANTABLE='NO';
  4. Hallo, ich benoetige eine SQL-Abfrage um alle Objektberechtigungen die ein User hat herauszufinden. Also die Art der Berechtigung, fuer welches Object und wem das Object gehoert. Ich benutze Oracle 9i. Ich konnte keinen View finden wo ich Informationen ueber Objektberechtigungen finden kann. Kann mir hierbei jemand helfen? Schon mal vielen Dank. Gruesse..
  5. ok, vielen Dank. Dann werd ich mal schlau machen... Gruesse,
  6. Hallo, vielen Dank fuer die Erklaerung. Ich verstehe nun was ich als Resultaat erhalte. Gerne wuerde ich noch wissen wie genau diese Liste erstellt wird, dies verstehe ich noch nicht. Wie ist das aufgebaut. Normalerweise habe ich select spaltenname [, spaltenname][,spaltenname]... from .... Wie muss ich das verstehen was jetzt anstelle der Spaltennamen steht? was bedeuten die || ? Kann ich auf Internet etwas finden, wie ich solche Anweisungen schreiben kann? Danke und schoene Gruesse,
  7. Ja das funktioniert gut. Danke, wieder was gelernt :-)
  8. ok, vielen Dank. Ich werde es morgen an der Arbeit gleich mal testen...
  9. Hallo, wiedermal eine Frage rund um die Migratie oracle 8i nach 9i Users sollen migriert werden in eine andere Datenbank. Hierfuer lege ich die User in der neuen Datenbank neu an. Hierbei sollen allerdings die Passwoerter die in der alter Datenbank gebraucht werden, mitgenomen werden. Users lege ich volgendermassen an # Create other users with TBS xx for usname in user1 user2 user3 do echo "create user $usname" echo "CREATE USER $usname PROFILE DEFAULT IDENTIFIED BY xx DEFAULT TABLESPACE ${DEF_TBS} TEMPORARY TABLESPACE ${TEMP_TBS} ACCOUNT UNLOCK; exit"| sqlplus -s ${USERNAME}/${PASSWORD} >> $LOG_FILE done; Jetzt hat jeder User das Passwort xx. Nun soll dies angepasst werden, sodass der user sein altes Passwort behalten kann. Ich habe hier ein beispiel kann damit aber nicht viel anfangen. Kann mir jemand erklaeren was bei diesem Beispiel passiert? Und wie kann ich es letzendlich gebrauchen? select 'alter user ' ||username || ' identified by values ' || '''' || password ||''';' from dba_users where username in ('user1','user2','user3'); Schon mal vielen Dank.
  10. Vielleicht hast jemand noch ein Tip um diese Abfrage auszubreiten. In meinem Ergebnis sind Users die ein ACCOUNT_STATUS = EXPIRED & LOCKED , ich moechte jedoch nur die User die ACCOUNT_STATUS =ONLINE haben. Und dies alles kombiniert mit der vorigen Query. Das heisst, ich muesste die Abfrage ueber 2 Tabellen/views machen. Kann mir jemand sagen wie das geht? SQL> desc DBA_ROLE_PRIVS Naam ------------------------ GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE SQL> desc dba_users Naam ------------------------------- USERNAME USER_ID PASSWORD ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE DEFAULT_TABLESPACE TEMPORARY_TABLESPACE CREATED PROFILE INITIAL_RSRC_CONSUMER_GROUP EXTERNAL_NAME Query die ausgebreitet werden soll aus der vorigen Antwort: SELECT grantee, count(*) FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'CONNECT' GROUP BY GRANTEE HAVING count(*) <2; Schon mal Danke fuer die Hilfe!
  11. Ja cool, scheint zu functionieren. Danke! Es war nur ein kleiner Tipfehler drin... ...WHERE GRANTED_ROLE = 'CONNECT' Nochmals vielen Dank fuer die schnelle Antwort!
  12. Hallo, ich will eine Select-Anweisung schreiben die alle user einer Oracle 9i datenbank zurueckgibt die NUR eine Rolle(ROLE) haben und zwar die "CONNECT" Rolle. Informationen ueber Rollen und Benutzern gekomme ich aus: SQL> desc DBA_ROLE_PRIVS Naam ------------------------ GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE Ich hab mal probiert, aber hiermit bekomme ich nur die User die ueberhaupt nur eine Rolle haben und nicht speziell NUR die Rolle CONNECT... SQL> select grantee, count(*) from DBA_ROLE_PRIVS group by GRANTEE having count(*) <2; Kann mir hier jemand helfen diese Abfrage auszubreiten oder eine andere Abfrage mailen womit ich das gewuenschte Ergebnis erhalte? Schon mal vielen Dank. Gruesse
  13. orac

    SQL Scripte

    Ein SQL-Script besteht aus aufgelisteten SQL-Anweisungen. zb. Dateiname: products.sql --------------------------- connect system/manager INSERT INTO system.products VALUES(4000,'UNIX Monitor',3620); INSERT INTO system.products VALUES(4000,'NT Monitor', 2400); COMMIT; Dieses Script kannst du dann, anstatt alle Commands einzelnd einzugeben, in z.B. sqlplus aufrufen. sqlplus starten (auf einer Linuxmachine mit dem command: sqlplus /nolog) dann in sqlplus das Script aufrufen mit einem fuehrenden @ @products.sql Ein Sql-Script kann auch mehrere Sql-Scripts beinhalten, die dann hintereinander ausgefuehrt werden: Dateiname: moreScripts.sh ---------------------------- @script1.sql @script2.sql @script3.sql Hier noch ein Beispiel eines Scriptes das von Oracle 0i automatisch angelegt wird und nach dem Erstellen einer Datenbank ausgefuehrt wird. Es beinhaltet einfache SQL-statements aber auch einen Aufruf eines anderen SQL-Scriptes: Dateiname: postDBCreation.sql connect SYS/change_on_install as SYSDBA set echo on spool /opt/oracle/admin/databasename/create/postDBCreation.log @/opt/oracle/product/9.2/rdbms/admin/utlrp.sql; shutdown ; startup mount pfile="/opt/oracle/admin/databasename/scripts/init.ora"; alter database archivelog; alter database open; alter system archive log start; shutdown ; connect SYS/change_on_install as SYSDBA set echo on spool /opt/oracle/product/9.2/assistants/dbca/logs/postDBCreation.log create spfile='/var/oracle/oradata/ databasename /spfile databasename.ora' FROM pfile='/opt/oracle/admin/databasename/scripts/init.ora'; startup ; exit;
  14. Danke fuer die Antwort. Ich weiss leider nicht wie ich die PL/SQL packages in einem Script gebrauchen kann. SQL statements rufe ich volgendermassen in einem Unixscript auf: for usname in USERNAME USERNAME do echo "Was das Statement tut.." >>$LOGFILE echo "SQL-Statement; exit"| sqlplus -s ${USERNAME}/${PASSWORD} >> $LOGFILE done; Wie kann ich ein PL/SQL packages in einem (unix)Script aufrufen?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...