Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird embedded, Datenbank auf Netzlaufwerk (https://www.delphipraxis.net/122333-firebird-embedded-datenbank-auf-netzlaufwerk.html)

SvB 14. Okt 2008 00:09

Datenbank: Firebird embedded • Version: 2.1.1 • Zugriff über: Zeos 6.3.3

Firebird embedded, Datenbank auf Netzlaufwerk
 
Ich spiele gerade mit Zeos und Firebird embedded rum, da ich das für ein Projekt benötige.
Meine Projekte liegen grundsätzlich auf einem Netzwerklaufwerk und ich möchte per Programm die Datenbank im Programmordner erstellen.
Ich bekomme aber immer folgende Fehlermeldung:
Zitat:

Im Projekt xxx.EXE ist eine Exception der EZSQLException mit der Meldung 'SQL Error: Unable to complete network request to host "<IP-Adresse>". Failed to establish a connection. Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort. . Error Code: -902. Unsuccessful execution caused by system error that precludes
successful execution of subsequent Statements The SQL: CREATE DATABASE 'DB.fdb' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1;' aufgetreten
Mein Quellcode sieht folgendermaßen aus
Delphi-Quellcode:
ZConnection1.Database := ExtractFilePath(ParamStr(0)) + 'DB.fdb';
    ZConnection1.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
    QuotedStr(ExtractFilePath(ParamStr(0)) + 'DB.fdb') +
    ' USER ' + QuotedStr ('sysdba') +
    ' PASSWORD ' + QuotedStr ('masterkey') +
    ' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
    ZConnection1.Connect;
In den Eigenschaften von ZConnection steht folgendes
Delphi-Quellcode:
HostName := '';
Protocol := 'firebirdd-2.0';
Ansonsten ist nichts gesetzt.

Warum versucht Firebird immer über die IP zuzugreifen??????

Wenn ich das ganze so ändere, das die Datenbank direkt auf C:\ erstellt wird, dann funktionierts ohne Probleme.

Delphi-Quellcode:
ZConnection1.Database := 'C:\DB.fdb';
    ZConnection1.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
    QuotedStr('C:\DB.fdb') +
    ' USER ' + QuotedStr ('sysdba') +
    ' PASSWORD ' + QuotedStr ('masterkey') +
    ' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
    ZConnection1.Connect;
Wo liegt das Problem. Ich suche jetzt schon Stunden in allen möglich Foren, habe aber nichts gefunden.
Es ist auch sonst nicht von Firebird oder Interbase auf meiner Entwicklungsmachine installiert.

Danke
Sven

Hansa 14. Okt 2008 02:07

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Zitat:

Zitat von SvB
Meine Projekte liegen grundsätzlich auf einem Netzwerklaufwerk und ich möchte per Programm die Datenbank im Programmordner erstellen...

Also : Zeos und Netzwerk ist schon mal fast tödlich. Durch embedded FB wird das Ganze dann vollkommen unsinnig und unbrauchbar. -> Grundlagen. Soweit meine Stellungnahme. :mrgreen: Was soll denn das überhaupt werden ? :shock:

Edit : warum soll die DB erst zur Laufzeit erzeugt werden ?

alzaimar 14. Okt 2008 06:37

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
[einmisch]
Zitat:

Zitat von Hansa
Also : Zeos und Netzwerk ist schon mal fast tödlich. Durch embedded FB wird das Ganze dann vollkommen unsinnig und unbrauchbar. -> Grundlagen.

Wo gibt es ein Tutorial über die Dos and Don'ts bei der Verbindung zwischen Delphi und Firebird? Das die Embedded-Version wohl nur exklusiven Zugriff auf eine lokale DB erlaubt, weiss ich... Aber der Rest?
[/einmisch]

SvB 14. Okt 2008 07:59

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Folgender Hintergrund: Ich schreibe gerade an einer Applikation, die, wenn sie fertig ist, auf einem Embedded System mit XP Embedded läuft. Parallel haben wir uns auch eine neue Hardware für die nächste Version zugelegt, die unter Linux läuft und das aktuelle Projekt soll später so umgestellt werden, dass es dann auch mit Freepascal / Lazarus unter Linux läuft. Da ich nur von diesem einen Programm Zugriff auf die Datenbank brauche, habe ich mich im Moment für Firebird Embedded entschieden. Außerdem wollte ich mich damit auch mal etwas beschäftigen um zu sehen wie das funktioniert.
Mein Delphi 2007 ist aktuell in einer XP VM installiert und mein Projekt liegt auf einem Netzwerklaufwerk. Deshalb soll auch die Datenbank im gleichen Ordner auf dem Netzwerklaufwerk liegen.

Zitat:

Zitat von Hansa
Edit : warum soll die DB erst zur Laufzeit erzeugt werden ?

Warum soll man die Datenbank nicht vom Programm aus anlegen lassen. Ich sehe überhaupt gar keinen Grund, warum ich das manuell über irgendein Admin Tool machen sollte. Wenn die Datenbank nicht da ist, wird sie angelegt und ich bin immer sicher, dass das dann auch passt. Ich mache das in der Regel immer so. In eine spezielle Tabelle kommt dann noch eine Versionsnummer der Datenbank rein und wenn es Programmupdates gibt, dann wird die Version der Datenbank abgefragt und eventuell angepasst, falls z.B. in einer Tabelle ein Feld dazu kommt.

Zitat:

Zitat von Hansa
Also : Zeos und Netzwerk ist schon mal fast tödlich. Durch embedded FB wird das Ganze dann vollkommen unsinnig und unbrauchbar. ->

Das verstehe ich nicht. Ich möchte ganz einfach mit einem Programm auf eine Datenbank zugreifen, egal ob die auf einer lokalen Platte oder auf einem Netzwerklaufwerk liegt, dass sollte doch gar nicht so schwierig sein. Ich weiß auch, dass bei Firebird Embedded die Datenbank exklusiv geöffnet wird, was auch beabsichtigt ist, aber das sollte doch auch egal sein, wo sie liegt.

Das fertige Projekt läuft später auf jeden Fall auf einem lokalen Laufwerk, nur möchte ich es halt jetzt zur Entwicklung wie gehabt auf meinem Netzwerklaufwerk auf dem Server belassen, weil Nachts automatisch eine Datensicherung auf Band läuft und ich mir manuelles hin und her kopieren auf ein lokales Laufwerk ersparen möchte. Da können sich nämlich mal dumme Benutzerfehler einschleichen, dass z.B. falsch rum kopiert wird und man sich eine alter Version über neue drüber kopiert. Außerdem möchte ich auch keine zusätzliche Software einsetzen, die so was automatisch macht.

Vielleicht hat ja doch jemand eine Idee, wie ich das, nur zur Entwicklung, so hinbekomme, ansonsten muss ich halt mit einer lokalen Datenbank zur Entwicklungszeit leben. Oder ich probiere einfach mal das ganze direkt als "Superserver" laufen zu lassen, das brauche ich ja dann auch für die Linux Variante, da es dort kein Embedded gibt.

Danke erst mal
Sven

alzaimar 14. Okt 2008 08:05

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Ich finde Deinen Ansatz vernünftig, aber soweit ich das verstanden habe, scheint Embedded-FB und Netzlaufwerk Probleme zu bereiten, weil die FBClient.DLL wohl denkt "Netlaufwerk? Oh, da muss ein Server sein". Versuche es doch einfach mit einer Laufwerksverknüpfung. Da die finale Version eh mit lokalen Daten arbeitet, ist das doch keine Einschränkung (außer von Embedded-FB).

P.S.: Deine Verwunderung über diese unsinnige Einschränkung kann ich nachvollziehen.

Ich halte mich aber lieber aus der Diskussion raus, weil es genügend FB-Cracks hier gibt, die Dir Vorträge darüber halten können.

SvB 14. Okt 2008 08:13

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
@alzaimar: Mein Laufwerk ist verknüpft, d.h. Laufwerksbuchstabe U: ist mit dem UNC Namen verküpft und ich greife nur über den Laufwerksbuchstaben zu. Firebird denkt aber trotzdem, es wäre ein Server und versucht über IP drauf zuzugreifen, das ist das Problem.

Na mal schauen, vielleicht hat ja noch jemand eine Idee.

Danke

Sharky 14. Okt 2008 08:40

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Hai Sven,

hast Du schon mal versucht den Netzwerkpfad mit SUBST zu mappen?

mschaefer 14. Okt 2008 13:45

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Das Problem liegt leider in ZEOS.
Da diese aus dem UNC-Pfad zur Datenbank den Servernamen ermitteln und nun nicht mehr den lokalen Rechner anfunken sondern direkt den Rechner auf dem die Datenbank im Netz liegt. Mit Fib geht es. Leider hilft da der Subst-Trick auch nicht.

Grüße // Martin

SvB 14. Okt 2008 15:16

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Hai, mit subst habe ich es auch schon probiert und wie mschaefer berichtet, funktioniert dieser Trick auch nicht.

Das Problem scheint aber nicht nur an ZEOS zu liegen, denn wenn ich ZConnection.Properties.Add('CreateNewDatabase=.... . einbaue, dann soll mir ja, bevor irgendeine Datenbank geöffnet wird, erst mal eine angelegt werden. Es wird dann intern isc_dsql_execute_immediate mit dem SQL CREATE DATABASE aufgerufen, ohne dass irgendetwas umgewandelt wird. Die eigenschaft HostName ist leer und wird dementsprechend nicht benutzt. Firebird intern muss das irgendwie umwandelt, bzw. meint dann es wäre eine Serververbindung.
Vielleicht macht Fib da irgendetwas, damit das dann trotzdem geht.

Ich habe auch noch mal unterhttp://www.yahoogroups.com/messages/firebird-support etliches durchgeschaut mit dem selbe Problem und dort wird immer wieder gesagt, dass es nicht geht. Ich denke mal, dann werde ich das so hinnehmen und halt während der Entwicklung mir irgendwo lokal die Datenbank anlegen. Da es später sowieso lokal läuft kann ich damit sehr wahrscheinlich gut leben.

Trotzdem schade. Ich habe auch schon etwas mit SQLite gespielt, da ist das kein Problem. Allerdings habe ich da keinen Zugriffsschutz, weswegen ich zu Firebird kam.

Trotzdem Danke, mal schauen wie ich weiterkomme.

Grüße Sven

mschaefer 14. Okt 2008 15:54

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Fairerweise muß man sagen das bei FBEmbedded auch kein Zugriffsschutz existiert. . . .

Grüße // Martin

SvB 14. Okt 2008 15:58

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
mmmh, d.h. jeder der irgendwie an die Datenbank kommt, kann sich die kopieren und mit irgendeinem Admin Tool öffnen und in den Tabellen rumschauen. Ich hatte gedacht, dass ich beim durchlesen der Dokus gesehen hätte, dass dort doch ein gewisser Schutz vorhanden ist.

alzaimar 14. Okt 2008 16:04

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Zitat:

Zitat von SvB
mmmh, d.h. jeder der irgendwie an die Datenbank kommt, kann sich die kopieren und mit irgendeinem Admin Tool öffnen und in den Tabellen rumschauen.

Sollte hier nicht die Einrichtung eines Benutzerkontos mit einem individuellen Admin-Passwort Abhilfe schaffen?

SvB 14. Okt 2008 16:54

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Du meinst auf Betriebssystemebene? Das wäre kein Problem. Das Problem wäre aber folgendes. Die Applikation läuft später auf einem kleinen PC-Board mit einer Solid State Disk als Festplatte und die kann man auch einfach rausziehen und in den eigenen Rechner stecken. Dann kommt man wieder an alles dran.

Kenn jemand vielleicht noch eine alternative Datenbank, die verschlüsselt ist oder einen Passwortschutzt bietet und die ich über Delphi und Freepascal/Lazarus ansprechen kann. Vielleicht auch Kylix, das habe ich hier auch noch rumstehen.

alzaimar 14. Okt 2008 17:04

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Nein, ich meine, das Du die Firebird-DB anlegst, und mit einem alternativen Adminkennwort versiehst. Das geht -soweit ich weiss- mit einem Kommandozeilentool. Dann legst Du unter dem Admin-Konto in der DB einen user 'DBUser' an, der auf die DB zugreift (letzteres im Vorgriff auf eventuell spätere Verwendung in einer größeren FB-Datenbank).

Aber grundsätzlich solltest Du darüber nachdenken, eine nackte, leere Datenbank (ohne Tabellen, oder der einen, wo die Versionsnummer drinsteht) einmalig zu erzeugen, das Admin-Kennwort ändern.

Bei der Installation deiner SW kopierst Du dann die leere GDB-Datei ins Zielverzeichnis und legst anschließend deine Tabellen an.

Das Admin-Kennwort ist dann eben nicht mehr 'masterkey' und so kommt wenigstens nicht jeder Pimpf an die Daten. Klar kann man deiner Anwendung per reverse engineering das Adminkennwort entlocken, aber -nun ja-

SvB 14. Okt 2008 19:26

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
OK. So weit ich das gesehen habe geht das mit gsec. Da muss ich mich dann mal noch etwas mit beschäftigen. Ich glaube, zuerst installiere ich mir mal in einer neuen VM den kompletten Firebird Server, da habe ich dann doch etwas mehr, mit dem man Spielen kann.

Zitat:

Zitat von alzaimar
Klar kann man deiner Anwendung per reverse engineering das Adminkennwort entlocken, aber -nun ja-

Ich denke dass ist zu verschmerzen. Ich will ja kein superduper Schutz, sondern wie Du gesagt hast soll nicht direkt jder Hans-Wurst an die Datenbank ran.

Aber erst mal habt Ihr heute vor mir Ruhe, ich mache jetzt Feierabend und morgen geht es weiter.

Grüße Sven

mkinzler 14. Okt 2008 19:41

Re: Firebird embedded, Datenbank auf Netzlaufwerk
 
Bei der embedded hat SYSDBA aber kein Passwort, weil hier ohne Passwortdatenbank gearbeitet wird


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz