PL/Java SecurityException

hiho …

also meine ersten gehversuche sind geglückt … nun hab ich eine trigger-Funktion mit der möchte ich ins Datei-System schreiben …

Nur leider krieg ich da ne SecurityException beim erzeugen einer Datei im Temp verzeichnis.

Ich habe dem system-user für den PG-server-dienst vollzugriff auf diesen Temp-Ordner gewährt.

Nur ich gehe mal davon aus, dass die JRE ein anderer Prozess ist - also der Java-Code nicht im Kontext des dienst-users laeuft ?!?!?

hat jemand ne idee ? nen tip ?

Ja. Es sein lassen. Nicht mit einem TRIGGER ins Filesystem schreiben, für sowas gibt es LISTEN/NOTIFY.

Andreas

  1. warum sein lassen ?

  2. LISTEN/NOTIFY braucht doch eine connection !? oder sehe ich das falsch …

  3. der user in der JRE ist der PG-dienst-user - habs geprueft … daran liegts schonmal nicht … zumindest nicht unmittelbar

Weil ich das sage.

  1. LISTEN/NOTIFY braucht doch eine connection !? oder sehe ich das falsch …

Nein, ja. Falls ich Dich richtig verstehe zumindest.

Andreas

@ 1. das ist kein argument
… 1.1 problem hab ich inzwishcen gelöst … ich hab in der wiki gelesen, dass PL/Java eine “trusted” language ist und daher lt. konvention keinen zugriff auf das File-System hat …
… 1.1.2 gottseidank waren da aber freunde von mir am werk und haben einen weiteren language handler installiert der auch “untrusted” arbeitet … language der heisst javaU
@ 2. ich meine LISTEN/NOTIFY arbeitet vom client aus zu einem server … das ist aber ncht was ich will … ich brauch PERFORMANCE :slight_smile: … die daten die ich erzeugen muss muessen nicht in dieser form zu client … die werden dann von einer anderen PL/Java funktion abgefragt …

Die andere Java-Funktion kann die Daten direkt auslesen, anstatt das du sie im Trigger in eine Datei schreibst.

akretschmer hat mit dem “sein lassen” Recht: innerhalb deiner Triggerfunktion musst du auch noch Dateisystemoperationen durchführen. Das sind zu viele Fehlerfälle, die zum Abbruch des Triggers führen können.

Oh, und du hast hoffentlich auch die Sonderfälle wie “zwei Trigger feuern fast gleichzeitig und die Datei wird überschrieben” abgefangen :wink:

ich habe das zu lösende Problem doch garnicht ausfuehrlich beschrieben :slight_smile: Es geht nicht darum einfach irgendwas sinnloses in beliebige Dateien zu schreiben … ich nutze eine Fremdkomponente die Daten im FS ablegen moechte - soll sie doch … die schreiboperationen sind pro zugriff eher minimal … gelesen wird auch ueber diese komponente … ich muss nur noch pruefen ob die synchronisiert ist - falls trigger-funktions-aufrufe nicht selbst schon für parallele prozesse synchronized sind

diesmal nicht :wink:

das macht PG doch auch … da kanns auch vorkommen, dass jemand der Festplatte im laufenden Betrieb einen Schraubdreher zwischen die Speichen schmeisst g

die Dateien der Komponente werden doch nicht wahllos irgndwohin geschmiert - die sind auch nicht beliebig - man muss halt vor dem betrieb der DB sicher stellen, dass das Zielverzeichnis existiert … das hat in etwa den Stellenwert wie das Postgres Daten-Verzeichnis

Ja das ist so eine Sache die ich gerade untersuche … die Komponente hat ja locking - mechanismen - damit parallele zugriffe synchronisiert werden koennen - es laufen ja immer duztzende PG prozesse gleichzeitig … wenn ihr dazu noch paar Hinweise / Hintergrundwissen habt … gern …

gruss

p.s. also mit dem PL/Java zeuchs bin ich ziemlich zufrieden … es gibt nur ein kleines problem beim deploy geaenderter Klassen - die sind auf dem server irgendwie erst aktuelle wenn man die connection schliesst, mit der man sie via replace_jar geupdated hat