verwendetes Datenbanksystem: PostgreSQL
Hallo
ich versuche gerade auf eine PostgreSQL Datenbank via TcpClient zuzugreifen. Dafür habe ich mir auch schon die Doku zum Message Flow und Message Formates angesehen aber ich bekomme einfach nicht heraus in welchem Format die Startup Message gesendet werden muss.
Ich habe:
Datenbank: AAA
Benutzer: BBB
Passwort: CCC
In der Doku steht zwar
Int32(Messagelänge)Int32(Protokollversion)String(Parameter)\0
Aber keinerlei auskunft wie die Parameter angegeben werden (parameter=value, parameter:value usw)
Im Netz findet man auch nur die Verwendung von NpgSql auf die ich aber nicht zurückgreifen kann.
Ich habe es schon mit diversen Varianten versucht aber bei allen bekomme ich die > Fehlermeldung:
EFATAL: no PostgreSQL user name specified in startup packet\n\0
Auch wenn ich user=AAA (oder in anderen Formaten) angebe.
Kann mir jemand hier weiterhelfen?
Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!
Hallo,
Allgemein gesagt könntest Du
* im Quelltext von npgsql nachsehen
* mit wireshark mitschneiden was npgsql sendet
Nichts dass ich in Wire Shark ansehen konnte enthielt auch nur ansatzweise etwas im Format
Int32 int32 String (Parameter Value)
Hier nocheinmal der Link zur Doku (siehe unten StartUpMessage)
Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!
Was spricht gegen die Verwendung des BSD-lizenzierten NPGSQL? Du sagst nur "kann nicht".
Das alles selbst, alleine via TCP umzusetzen unterstützt Du glaube ich massiv.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Dagegen spricht nur Bürokratie die bei Kunden des öffentlichen Sektors leider immer wieder Schranken aufwirft. Ich habe Auflagen die unter anderem die Nutzung der NpgSql untersagen.
Ich bin mir nicht sicher weshalb.
Aber in dem Fall muss auch "nur" ein Startup gesendet werden alles andere wie Abfragen etc. ist nicht notwendig. Auch wenn es recht sinnfrei klingt. Deshalb dachte ich sollte es hier auch wenig Probleme geben aber es will mir einfach nicht gelingen.
Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!
Ich hab die Lösung gefunden:
Ich will mich z.B. als User AAA bei der Datenbank BBB anmelden
so sende ich:
Nachrichtlänge(31)Protokollversion(3)user\0AAA\0database\0BBB\0\0
was binär dann
\000\000\000\033\000\003\000\000user\000AAA\000database\000BBB\000\000
wobei natürlich auch die Buchstaben in Byte umgewandelt werden müssen. Das habe ich jetzt nur der Übersicht wegen in Buchstaben geschrieben.
Kommt ein Mann in die Wirtschaft und sagt zum Wirt: 16 Bit!
Sagt der Wirt: Das ist ein Wort!
Nichts dass ich in Wire Shark ansehen konnte enthielt auch nur ansatzweise etwas im Format
Doch, dann hättest Du gesehen dass die Strings nullterminiert sind.