Netzwerkfreigabe fuer postgreSQL-DB im Dienst bereitstellen

Hallo,

habe folgendes Problem in einer Windows-Installation
mit Postgres als Dienst:

Ich moechte per COPY aus der postgreSQL-DB auf
eine Netzwerkfreigabe schreiben. Die Netzwerkfreigabe
soll nur in der Umgebung der postgreSQL-DB-Instanz,
gestartet durch den Dienst, sicht- und nutzbar sein.
Einiges habe ich schon probiert incl. Aufrufen von
Zusatzscripten etc, aber das klappt nicht. Aus der
postgreSQL-DB kann ich die Netzwerkfreigabe ja auch
nicht einrichten, das muss vorher passieren.

Habt ihr einen Hinweis, wie ich das Problem loesen kann?

Gruss,
Christian

Also, um das mal zu rekapitulieren: Du möchtest in ein Netzlaufwerk schreiben, von der Datenbank aus. Dort hinein darf auch nur die Datenbank schreiben, kein anderes Programm?

Wie sieht es mit passenden Zugriffsrechten aus?

Naja, es ist ein lokaler Benutzer samt Passwort des
entfernten Rechners auf der Freigabe schreibberechtigt.

Mein erster Gedanke war: als Postgres-Benutzer
(postgreSQL-Dienst-Anmeldekonto) anmelden, die Freigabe
permanent auf ein Laufwerk mappen (Windows merkt sich
die Anmeldedaten), abmelden und den Dienst-postgreSQL
dann mit dem naechsten Systemstart hochlaufen lassen.
Und in der DB waere dann das gemappte Laufwerk sichtbar.

Aber das geht anscheinend nicht.

Mal ganz ehrlich: das Problem hat ungefähr genau gar nichts mit PostgreSQL zu tun, oder? Das ist ein reines Windows Problem.

Damit bist du bei “Installation von PostgreSQL” im falschen Forum. Ev. weiß das hier jemand aus der Windows Ecke, aber an sich solltest du in einem Windows-spezifischen Forum nachfragen.

Wenn ich Dich richtig verstehe, soll nur der PostgreSQL-Dienst dieses Laufwerk ‘sehen’, normale User am System aber nicht. Soweit richtig?

Falls ja: das ist nicht PG-spezifisch, sondern Sache des OS.

Unter *NIX könnte man das passend mounten. Wie man sowas unter Fenster hinbekommt, weiß ich nicht.

Frage (falls ich Dich richtig verstanden habe): wozu?

Wie ads schon schrieb: passende Rechte setzen, sollte doch sicher auch mit Fenster gehen.

Ansonsten gilt der alte Grundsatz: Security by Obscurity ist eine schlechte Idee, die schlicht nicht funktioniert.


Andreas

Nur als (kranke) Idee: nimm pl/perlU, rufe damit den ‘net use …’ - Befehl auf, mache Dein COPY, dann wieder mit pl/perlU das Mapping entfernen. Natürlich ist in dieser Zeit das Laufwerk dann dennoch sichtbar, security by obscurity, you know?

Andreas

Erstmal danke der Antworten und dass das
“nicht sichtbar” entsprechende Kommentare
nach sich zieht, habe ich schon geahnt. Ihr habt
auch recht, dass das eigentlich ein BS-Problem ist.
Ich dachte bloss, jemand hat schonmal dasselbe
versucht.
Was ich mit einer mini-Exe (Call: ‘net use…’), als
PostgreSQL-Dienst gestartet, herausbekommen habe,
ist, dass das im Dienst gemappte LW nicht von anderen
Instanzen ansprechbar ist. Sichtbar, aber nicht benutzbar.

Es gibt noch die Loesung, den postgreSQL-Benutzer
als Schreibberechtigten auf dem entfernten Share
aufzunehmen, aber die Rechner kennen sich nicht,
weil unterschiedliche Domaenen. OK, ich sehe schon,
irgendwie ist es etwas verzwickt.
Die Loesung mit dem pl/perlU werde ich mal ausprobieren,
aber die CALL-Befehle mit net use sind nicht so richtig
performant.

Es gibt noch eine andere Lösung:

Du rufst von remote aus auf:

psql -h <server> -p 5432 -U <your_user> <your_db> -c "copy <your_table> to stdout" > table.copy

Damit landet der Output vom COPY-Befehl auf dem Remote-Rechner in der Datei “table.copy”.

Soll es abhörsicher sein, garniert man dies noch mit einem SSH-Tunnel. Als Kompott gibt es den Verzicht auf das blöde Windows-Freigabe-Gehampel.



Andreas