Cron und Access - die letzte Lösung?
Netzwerke und Datenbanken stellen einen immer vor neue Probleme, vor alle dem wenn es sich um so “tolle” Datenbankapplikationen wie Microsoft Access handelt! Dazu kommt noch schwerlich die “wunderbare” Implementierung des SMB-Protokolls in Windows XP (auch besser bekannt als die tolle “Netzwerkumgebung”) und die nur ausreichende Benutzer-/Gruppenverwaltung in dem System aus Redmond.
Man stelle sich folgenes Szenario vor: eine Microsoft Access-Datenbank (kurz MDB) liegt auf einem GNU/Linux Samba-Server (in meinem Fall ein Mandriva Linux mit Kernel 2.6.8 und Samba 3.0.6).
Auf diese Datenbank wird mit verschiedenen Windows-Clients gleichzeitig zugegriffen. Sobald der erste Client in der Datenbank arbeitet wird neben der MDB-Datei auf dem Server (also in der Freigabe) eine neue Datei mit der Endung .LDB erzeugt. Diese Datei enthält temporäre Benutzer-Daten, mit denen Access arbeiten muss.
Das Problem ist, dass diese LDB-Datei mit chmod 700 Rechten erstellt wird (also nur der Benutzer darf lesen, schreiben und ausführen, alle Anderen, auch nicht die Mitglieder der Gruppe, dürchen NICHTS). Sobald als diese .LDB-Datei erstellt worden ist kann kein anderer Windows-Client mehr auf die Datenbank zugreifen. Grund: die Datenbank möchte in die .LDB-Datei weitere Benutzer-Daten schreiben und diese dazu für den Lese-/Schreibzugriff öffnen. Diese Aktion schlägt fehl, da die Zugriffsrechte der Datei dieses nicht zulassen (Access scheisst nämlich auf die Zugriffberechtigungen eines Unix-Filesystems *arrg*).
Die Problemlösung wäre also Folgene: man muss quasi dem Server beibringen, die .LDB-Datei nach dem Erstellen auf chmod 770 zu setzen (das Bedeutung, der Besitzer und die Gruppenmitglieder dürfen lesen, schreiben und ausführen). Bloss wie?
Ich habe da eine (zugegeben etwas “unsaubere” Lösung) gefunden: man erstelle einen kleinen Script (.SH-Datei) für die Bash-Konsole mit dem Befehl chmod 770 /absoulter/pfad/zur/datenbank.ldb. Diesen Script macht man mit chmod 777 ausführbar. Dieser Script setzt nach dem Starten die Rechte unserer .LDB-Datei richtig um.
Jetzt wird es interessant: ein wesentliches und eigendlich auch unentbehrliches Tool im Linux-System ist der Daemon CRON. CRON ist eine Jobsteurung für Unix-Systeme, die bestimmte Befehle zu einer bestimmten Zeit vollautomatisch ausführen kann. Die Konfiguration läuft am einfachsten über die CRONTAB. Diese Datei, oft zu finden in /etc/, enthält die systemweite “TO-DO-Liste” für die Jobsteuerung.
In diese Datei füge man nun folgene Zeile hinzu (als root):
*/1 9-21 * * * root /absoulter/pfad/zur/script/datei.sh
Diese Zeile in der CRONTAB bewirkt, das unser zuvor erstellter Script zwischen 9.00 und 21.00 Uhr jede Minute als Benutzer root ausgeführt wird. Nach dem Abspeichern wird der neue Job sofort übernommen und, sofern der Daemon läuft, auch gleich ausgeführt und aktiviert. Es ist kein Neustart notwendig.
Startet nun ein Client die Datenbank werden die Rechte kontinuierlich so gesetzt, dass auch alle anderen Clients auf diese Datenbank zugreifen können :)
Das ist wie gesagt bestimmt nicht die sauberste Lösung aber sie funktioniert ersteinmal. Wenn noch einer eine Idee hat, wie man dieses Problem noch anderweitig lösen kann, der möge mir (und der Welt) das doch mit der Kommentarfunktion mitteilen. Danke!
3 Responses to “Cron und Access - die letzte Lösung?”
By stephan on Jun 2, 2005
ja nee alless kla - was besseres währ mir auch nich eingefallen.
By Der Kurze on Jun 3, 2005
Schuppi,
Du kannst die umask, mit der die Dateien erstellt werden, in der smb.conf einstellen :)
Umask 007 z. B.
HTH
Der Kurze
By Der Kurze on Jun 9, 2005
Und schon ausprobiert mit der smb.conf?
Oder was anderes gefunden?