Feuer_und_Flamme Geschrieben 22. September 2017 Teilen Geschrieben 22. September 2017 Hallo zusammen, Ich habe einen Trigger geschrieben, der ein Attribut in einer Klasse ändert, wenn sich ein anderes Feld der gleichen Tabelle ändert. Das klappt soweit problemlos. Das Problem ist, wenn der in der Oracle-DB angemeldete Benutzer kein Lesen-Recht auf das Attribut hat, dass der Trigger ändern soll, dann wird der Trigger nicht erfolgreich ausgeführt. Wenn ich das gleiche mit einem DB-User ausführe, der das Feld sieht und(!) Änderungsrecht hat, dass läuft der Trigger wie er soll. Das Problem ist natürlich, dass der Benutzer, das vom Trigger geänderte Feld nicht sehen soll/darf. Beispiel: Ich habe Feld A, auf das User A alle Rechte hat. Auf Feld B hat User B alle Rechte. Wenn User A, Feld A ändert, versuche ich derzeit mit einem Trigger Feld B zu ändern. Dies scheitert aber an den Rechten, weil der Trigger mit den Rechten von User A läuft, der auf Feld B keine Rechte hat. Hat hierzu jemand eine Idee? Kann man den Trigger mit anderen Rechten laufen lassen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 22. September 2017 Teilen Geschrieben 22. September 2017 Du kannst im Trigger den Usernamen erfragen und daraufhin nachschauen, ob er überhaupt Schreibgeräte auf die jeweilige Spalte hat. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Feuer_und_Flamme Geschrieben 25. September 2017 Autor Teilen Geschrieben 25. September 2017 (bearbeitet) Ich weiß ja, das der Benutzer kein Schreibrecht auf das Feld hat. Der Nutzer A soll das Feld B ja nicht sehen (und darf dann leider auch nicht schreiben). Mein Problem ist ja, dass der Trigger ebenfalls mit dem gleichen Benutzer ausgeführt wird, der die Änderung des Feldes macht. Wenn ich dies ändern/umgehen könnte, wäre mir schon geholfen ;-) Bearbeitet 25. September 2017 von Feuer_und_Flamme Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lessbess Geschrieben 25. September 2017 Teilen Geschrieben 25. September 2017 Du kannst einen (technischen) Benutzer anlegen, der die entsprechenden Rechte hat und den Trigger unter diesem laufen lassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Feuer_und_Flamme Geschrieben 26. September 2017 Autor Teilen Geschrieben 26. September 2017 Und wie? Die Änderung in Feld A macht User A. Wie schaffe ich es, dass der Trigger (oder immerhin der Teil der Feld B ändern soll) unter einem anderen Benutzer läuft?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lessbess Geschrieben 26. September 2017 Teilen Geschrieben 26. September 2017 Mein Vorschlag war, du legst einen Benutzer C an, der die Rechte für sowohl Feld A als auch Feld B hat und dieser legt dann den Trigger an. Da der Trigger mit den Rechten des Owners läuft, sollte es gehen. Alternativ könntest du auch innerhalb des Triggers eine Stored Procedure aufrufen, die das regelt. Das erscheint mir aber eher noch umständlicher. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Feuer_und_Flamme Geschrieben 26. September 2017 Autor Teilen Geschrieben 26. September 2017 (bearbeitet) vor 37 Minuten schrieb lessbess: Mein Vorschlag war, du legst einen Benutzer C an, der die Rechte für sowohl Feld A als auch Feld B hat und dieser legt dann den Trigger an. Da der Trigger mit den Rechten des Owners läuft, sollte es gehen. Das scheint ja leider nicht der Fall zu sein. Der Owner des Triggers ist genau ein solcher User. Wenn ich mit diesem User das Feld A ändere, funktioniert alles wie gewünscht. Wenn aber User A Feld A ändert, wird Feld B durch den Trigger nicht geändert. Dies kann nur bedeuten, dass der Trigger nicht mit dem Benutzer der Owner des Triggers ist, ausgeführt wird, sondern mit dem User, das das Feld ändert, auf dem der Trigger gesetzt ist. Sonst bestände für mich genau dieses Problem nicht (ich bin bislang auch davon ausgegangen, dass der Owner den Trigger ausführt, aber das scheint nicht der Fall zu sein) Bearbeitet 26. September 2017 von Feuer_und_Flamme Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lessbess Geschrieben 26. September 2017 Teilen Geschrieben 26. September 2017 Doch das ist ziemlich sicher so. Wichtig ist aber, dass der User die Berechtigungen direkt als Systemberechtigung haben muss, nicht über Rollen (liegt an PL/SQL). Vielleicht kannst du das mal überprüfen. 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.