orac Geschrieben 17. Januar 2007 Teilen Geschrieben 17. Januar 2007 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.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
orac Geschrieben 22. Januar 2007 Autor Teilen Geschrieben 22. Januar 2007 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'; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 22. Januar 2007 Teilen Geschrieben 22. Januar 2007 Per "privilege" habe ich eine Abfrage gemacht. Erst mit "grand options" dann ohne. Privileges: select, update, insert, delete, references, execute und was ist mit privilegien, die über eine rolle erteilt wurden? -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
orac Geschrieben 22. Januar 2007 Autor Teilen Geschrieben 22. Januar 2007 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jasper Geschrieben 22. Januar 2007 Teilen Geschrieben 22. Januar 2007 Da der neue User auch die Rollen zugeteilt bekommt erhaelt er diese Rechte ueber die Rolle selbst. Das Gleiche gilt fuer die Systemrechte. ok, wollte nur sichergehen, dass auch daran gedacht wurde -j Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
orac Geschrieben 26. Januar 2007 Autor Teilen Geschrieben 26. Januar 2007 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.