
orac
Mitglieder-
Gesamte Inhalte
22 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von orac
-
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;
-
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.
-
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';
-
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..
-
ok, vielen Dank. Dann werd ich mal schlau machen... Gruesse,
-
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,
-
Select die USER zurueckgibt die NUR die ROLE CONNECT haben
orac antwortete auf orac's Thema in Datenbanken
Ja das funktioniert gut. Danke, wieder was gelernt :-) -
Select die USER zurueckgibt die NUR die ROLE CONNECT haben
orac antwortete auf orac's Thema in Datenbanken
ok, vielen Dank. Ich werde es morgen an der Arbeit gleich mal testen... -
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.
-
Select die USER zurueckgibt die NUR die ROLE CONNECT haben
orac antwortete auf orac's Thema in Datenbanken
username und grantee -
Select die USER zurueckgibt die NUR die ROLE CONNECT haben
orac antwortete auf orac's Thema in Datenbanken
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! -
Select die USER zurueckgibt die NUR die ROLE CONNECT haben
orac antwortete auf orac's Thema in Datenbanken
Ja cool, scheint zu functionieren. Danke! Es war nur ein kleiner Tipfehler drin... ...WHERE GRANTED_ROLE = 'CONNECT' Nochmals vielen Dank fuer die schnelle Antwort! -
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
-
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;
-
Complilieren aller functions und procedures eines Users (Oracle 9i)
orac antwortete auf orac's Thema in Datenbanken
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? -
Complilieren aller functions und procedures eines Users (Oracle 9i)
orac erstellte Thema in Datenbanken
Hallo, ich wuerde gerne mit Hilfe eines Scripts alle importierten (PL/SQL) functions und procedures (die invalid sind) eines Users neu compilieren. Kann mir hierbei jemand helfen? Danke. -
Danke fuer den Tip. Das ging echt am Schnellsten. Einfach den User droppen und wieder anlegen. Echt cool die schnelle Hilfe hier. Am Ende bekomme ich die Migration doch noch hin
-
Hi johnhaltonx, danke fuer deine Hilfe. Habe jetzt versucht ein import zu machen. Habe leider mit dem user system de import gemacht fuer einen anderen user. Ich wusste nicht, dass dieser keine Rechte auf Tablespaces von anderen usern hat. Die Views sind scheinbar angelegt.. Also der user hat ein Schema bekommen. Meine frage ist, wie kann ich ein komplettes Schema eines users loeschen oder wie kann ich alle Views in einem Schema loeschen? Schon mal vielen dank. Gruesse
-
In der Oracle 8i sind mehrere Applicationen. Ich muss eine davon in die 9i Datenbank importieren. Diese besteht aus einem tablespace mit einer Datendatei. Es gehoeren mehrere user dazu. Als ich hatte vor um einen Import per User zu machen. imp dba-user/password file=filename.dmp fromuser=bob touser=bob commit=yes log=filenam.log Ich kann keine Dokumentation finden, die beschreibt wie die Datenbank aussehen muss in der ich die Daten importieren will. Also ein Full-import kann ich nicht machen. gruesse
-
Hallo, ich will ein Teil aus einer Oracle 8i Datenbank (aus einem .dump-file gemacht mit einem full-export) importieren mit imp in eine Oracle 9i Datenbase. Hierfuer habe ich eine neue Oracle 9i Datenbank angelegt. Muss ich nun vor dem Import erst die User anlegen mit den selben Einstellungen (Rechten usw.) die ich hierfuer brauche oder werden die durch den imp-Befehl aus den full-export-backup angelegt? Schon mal vielen Dank. Gruesse
-
Danke, das hat mir schon viel weiter geholfen. Gruesse
-
Hallo, in einer Oracle 9i Datenbank hat ein user (bob) alle Rechte "WITH ADMIN OPTION" bekommen. Nun moechte ich gerne Abfragen welchen usern dieser User (bob) welche Rechte erteilt hat. Ist dies moeglich, so ja wie? Schon mal vielen Dank