DeadNovum Geschrieben 15. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 16. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DeadNovum Geschrieben 17. Oktober 2008 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DeadNovum Geschrieben 17. Oktober 2008 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 17. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DeadNovum Geschrieben 21. Oktober 2008 Autor Teilen 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 21. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 21. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 21. Oktober 2008 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 21. Oktober 2008 Teilen 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 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.