orac Geschrieben 18. September 2006 Geschrieben 18. September 2006 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
Pinhead Geschrieben 18. September 2006 Geschrieben 18. September 2006 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
orac Geschrieben 18. September 2006 Autor Geschrieben 18. September 2006 Ja cool, scheint zu functionieren. Danke! Es war nur ein kleiner Tipfehler drin... ...WHERE GRANTED_ROLE = 'CONNECT' Nochmals vielen Dank fuer die schnelle Antwort!
orac Geschrieben 18. September 2006 Autor Geschrieben 18. September 2006 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!
Pinhead Geschrieben 18. September 2006 Geschrieben 18. September 2006 Über welches Feld kann man die beiden Tabellen denn miteinander in Verbindung bringen ?
Pinhead Geschrieben 18. September 2006 Geschrieben 18. September 2006 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;
orac Geschrieben 18. September 2006 Autor Geschrieben 18. September 2006 ok, vielen Dank. Ich werde es morgen an der Arbeit gleich mal testen...
orac Geschrieben 19. September 2006 Autor Geschrieben 19. September 2006 Ja das funktioniert gut. Danke, wieder was gelernt :-)
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden