Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Rollen entziehen

Empfohlene Antworten

Veröffentlicht

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

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

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

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

sorry. Ist ne Ora 8.2.

mhh. Hast du irgendwo ne Anleitung wie man so ein dynamisches SQL Statement absetzen kann?

Grüße

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 von Amstelchen

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.