Zum Inhalt springen

SQL Query: Alle Objektberechtigungen eines users


orac

Empfohlene Beiträge

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..

Link zu diesem Kommentar
Auf anderen Seiten teilen

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';

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...