DeadNovum Geschrieben 15. Oktober 2008 Geschrieben 15. Oktober 2008 Wunderschönen guten Morgen, ich hätte da grad ein Problem. Habe ca 120 Benutzer, denen ich eine Rolle entziehen muss. mit REVOKE ROLLE FROM USER kann ich einem User die Rolle entziehen. Ist es möglich diese 120 User in einem Aufwisch durchzuarbeiten? Geht sowas wie: REVOKE ROLLE FROM IN (USER1, USER2,...)?? Danke für die Antwort. Grüße
Amstelchen Geschrieben 16. Oktober 2008 Geschrieben 16. Oktober 2008 wie immer: welches DBMS? manche können mit dynamischen SQL umgehen; Oracle z.b. hält die privilegien in DBA_ROLE_PRIVS vor, sodass damit in einem aufwasch alle aufrufe von REVOKE abgesetzt werden können. s'Amstel
DeadNovum Geschrieben 17. Oktober 2008 Autor Geschrieben 17. Oktober 2008 D.h. Ginge dann folgender Befehl: UPDATE DBA_ROLE_PRIVS SET GRANTED_ROLE='ROLLE' WHERE GRANTEE IN ('User1','User2','User3'...) AND GRANTED_ROLE = 'aktuelle_rolle'; Die 2. Bedinung soll nochmal absichern. Sind den Usern dann wirklich die neun Rollen zugewiesen? Danke übrigends für die Hilfe. Wieder was dazugelernt
Amstelchen Geschrieben 17. Oktober 2008 Geschrieben 17. Oktober 2008 nein. DBA_ROLE_PRIVS ist eine systemsicht im oracle data dictionary. diese sollten unter keinen umständen direkt geändert werden! du solltest dir ein dynamisches SQL bauen, das einzelne REVOKE-befehle absetzt oder (falls so etwas existiert, was ich nicht in erinnerung habe) ein systempackage oder eine systemfunktion verwenden. ich weiss aus deinem post im übrigen noch immer nicht, ob es sich um oracle (oder was anderes) handelt. s'Amstel
DeadNovum Geschrieben 17. Oktober 2008 Autor Geschrieben 17. Oktober 2008 sorry. Ist ne Ora 8.2. mhh. Hast du irgendwo ne Anleitung wie man so ein dynamisches SQL Statement absetzen kann? Grüße
Amstelchen Geschrieben 17. Oktober 2008 Geschrieben 17. Oktober 2008 (bearbeitet) so oder ähnlich: select 'REVOKE ' || granted_role || ' FROM ' || grantee || ';' from dba_role_privs das liefert dir ein REVOKE-statement für jedes durch GRANT vergebene privileg. ist ungetestet, in dem sinne dass ich es nicht ausgeführt habe, gegen ein system mit 5000 usern geschossen, kann das fatal sein s'Amstel Bearbeitet 17. Oktober 2008 von Amstelchen
DeadNovum Geschrieben 21. Oktober 2008 Autor Geschrieben 21. Oktober 2008 Hi, also so hab ich es bisher gemacht, bei 150 Usern, macht das aber keinen Spaß mehr, jedes einzelne Statement herauszukopieren, ins Tool zu klopfen und einzeln auszuführen, da ja schließlich das Kommande mit einem ";" abgeschlossen wird. Bin recht neu in dem Umfeld und kenn die Möglichkeiten von Oracle noch nicht wirklich. Über ein PHP Script wäre es denk ich realisierbar, aber auf dem Server läuft kein Apache. Mit Perl bekomm ich Datenkbankverbindung nicht hin, da es wie schon gesagt eine 8.1 oder 8.2 Datenbank ist, das aktuelle Modul abe rnicht mehr auf diese alte DB zugreifen kann und das Modul mit der Version 1.17 bekomm ich auch nicht installiert....
Amstelchen Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 leite meine obige dynamische abfrage mittels sqlplus und dem befehl SPOOL in eine datei um und führe diese anschliessend mit @ aus. somit benötigst du dann keine datenbanklayer oder PHP oder sonst etwas, in sqlplus ergibt sich daraus ein dreizeiler - 1. spool in ein .sql-file, 2. select wie oben, 3. ausführen des gespoolten SQL. s'Amstel
dr.dimitri Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 3. ausführen des gespoolten SQL. Und danach kannst dich dann direkt mit den Recoverymöglichkeiten beschäftigen die Oracle bietet, denn wenn du dieses generierte Statement ausführst, hat keiner deiner User incl. SYS und SYSTEM mehr irgendwelche Rollen. Das dürfte nicht unbedingt zur Verbesserung des Systems beitragen. Dim
Amstelchen Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 das argument ist ein gutes, allerdings gehe ich von mindestens ein paar von mehreren voraussetzungen aus: - es existiert eine testumgebung. - es existiert eine wiederherstellbare instanz. - der user führt DDL/DML/DCL nicht blind als SYS/SYSDBA aus, sondern hat im regelfall einen selbsterstellten user / eine rolle mit dementsprechenden privilegien. REVOKE * FROM SYS ist zweifelsohne immer kritisch, da auch systemprozesse / patchscripte als SYS oder SYSTEM laufen. - der user arbeitet nicht permanent als SYS - manche meinen sogar, SYS ist nur zum installieren von DBen da. - der user übernimmt nicht blind alles was ich schreibe, sondern informiert sich. s'Amstel
dr.dimitri Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 allerdings gehe ich von mindestens ein paar von mehreren voraussetzungen aus Das ist in etwa so, als ob man davon ausgeht, dass sich im Strassenverkehr immer alle an die Regeln halten. Dim
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