Veröffentlicht 18. September 200618 j 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
18. September 200618 j SELECT grantee, count(*) FROM DBA_ROLE_PRIVS WHERE grantee = 'CONNECT' GROUP BY GRANTEE HAVING count(*) <2; Müsste meiner Meinung nach funktionieren ist allerdings ungetestet
18. September 200618 j Ja cool, scheint zu functionieren. Danke! Es war nur ein kleiner Tipfehler drin... ...WHERE GRANTED_ROLE = 'CONNECT' Nochmals vielen Dank fuer die schnelle Antwort!
18. September 200618 j 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!
18. September 200618 j Über welches Feld kann man die beiden Tabellen denn miteinander in Verbindung bringen ?
18. September 200618 j username und grantee Also unter der Annahme das im Grantee auch der Username hinterlegt ist müsste folgende Abfrage funktionieren SELECT grantee, count(*) FROM DBA_ROLE_PRIVS,dba_users WHERE username = grantee AND granted_role = 'CONNECT' AND ACCOUNT_STATUS ='ONLINE' GROUP BY GRANTEE HAVING count(*) <2;
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.