Zope - MySql connectstring programmatisch ändern

Django, Flask, Bottle, WSGI, CGI…
Antworten
Gerom50
User
Beiträge: 5
Registriert: Montag 9. Mai 2011, 23:55

Hallo,
ich arbeite seit einem halben Jahr begeistert mit Zope. Jetzt habe ich aber ein Problem, das ich nicht gelöst bekomme. Mein Zope Programm greift auf eine externe MySql Datenbank zu, deren Zugangsdaten sich pro Kunde ändern.
Weiß Jemand, wie ich programmatisch auf den connectstring des Zope MySql objektes zugreife?

Eine andere Lösung wäre, eine Rolle einzuführen, die genau das MySql Property Sheet mit dem Connectstring freischaltet. Das Property Sheet wird aber nur mit der Admin Rolle dargestellt. Bei allen anderen Rollen kann ich alle Berechtigungen anklicken, das Property Sheet wird nicht angezeigt.

Vielen Dank
Gero
deets

Zuerstmal finde ich das Design fragwuerdig. Ich habe noch nie verstanden, warum man bei einer Webanwendung auf verschiedene DB-Accounts setzt. Das ist immer nur komplizierter, und nicht wirklich sicherer. Denn wenn ich den Server "knacken" kann, um beliebiges SQL auszufuehren, dann hole ich mir halt auch einfach die anderen Zugangsdaten.

Insofern wuerde ich - wenn du kannst - darauf verzichten.

Als naechste Option waere es vielleicht besser, die Verbindungen stattdessen dediziert zu konfigurieren, und dann eben zu benutzen - abhaenging vom Account. Also, lauter MySQL-Connector-Objekte, die so heissen wie der Kunde.
Gerom50
User
Beiträge: 5
Registriert: Montag 9. Mai 2011, 23:55

Also es ist eine Intranetanwendung, die nich öffentlich ist, d.h.: ich verwalte meine Daten in meiner Datenbank. Die auszuwertenden Daten liegen in einer Kundendatenbank. Da ich die Installation des Programmes nicht mache, müsste ich den Admin Account herausgeben oder ich lasse überall den gleichen User mit Password einrichten. Aber dann sind die Zugangsdaten bei allen Kunden gleich.
Oder ich brauche also eine Rolle, die bei der Installation nur den Connectstring freigibt

Am einfachsten lege ich die Zugriffsdaten in eine Konfigurationsdatei. Dazu muss ich aber auf den Connectstring zugreifen können.

Eigentlich sollte es einfach sein, auf die Properties eines Objektes zuzugreifen. Nichts anderes ist ja eigentlich auch das Propertiesheet des Z MySql Database Connection Objektes, bzw die Berechtigung dafür einzustellen.

Es kann doch nicht sein, dass ich den Sourcecode freilegen muss, damit man die Zugangsdaten öndern kann.
deets

Also, ich verstehe dein Problem noch nicht wirklich. Aber dein Ansatz klappt nicht. Spaetestens wenn du 2 oder mehr konkurrierende Zugriffe hast, kommst du in die Bedroullie: der erste Zugriff setzt den connect-string fuer User A. Bevor die DB geoeffnet ist, kommt der 2te Zugriff, und setzt ihn fuer User B. Dann geht der Code des ersten weiter, und oeffnet die DB - aber mit den falschen Daten!

Es gibt sicher auch noch andere Moeglichkeiten als die von mir genannte, aber dann muesstest du schon an den MySQDda oder welchen auch immer du verwendest ran, und das so umprogrammieren, das der connection-string halt vom eingeloggten User kommt. Gehen tut das bestimmt, aber nicht "einfach so". Sondern mit ner Menge Aufwand. Wenn du also drumrumkommst, tust du gut daran.
Gerom50
User
Beiträge: 5
Registriert: Montag 9. Mai 2011, 23:55

1. Also das Programm läuft einwandfrei. Ich möchte die Zugangsparameter zur MySql DB gerne in eine Konfigdatei legen oder nur das Property sheet mit dem Connectstring freigeben. Beides schaffe ich nicht. <--- Da brauche ich Hilfe

2. Design: Es handelt sich um eine kleine Webapplikation, die eine Auswertung durchführt. Die Anbindung an die Kundendatenbank (Es gibt nur eine pro Installation) wird über das MySql Connect Objekt durchgeführt. Der Eintrag ist natürlich fix und wechselt nicht mehr. Aber er ist für jede Installation anders, es sei denn, ich gebe alles vor. Möchte ich ungerne.
deets

Ah, *jetzt*, ja. Nun verstehe ich endlich, was du vorhast.

Wenn das Ding eh von einem Admin installiert wird, dann solltest du dich IMHO nicht so sehr drum muehen, den admin-account geheim zu halten. Denn wenn es nicht deine Instanz ist, dann kommt man da eh dran - ich kann mich doch einfach mit einem super-user account anmelden, und zB einen eingebetteten Userfolder in deiner App loeschen. Schon faellt das System zurueck auf den top-level user-folder, und der Admin kann Accounts einrichten wie er mag.

Aber wuerde es nicht reichen dem Admin zu sagen, er soll deine Anwendung in einen Unterordner installlieren (ich nehme mal an, da liegt sie eh, oder?), und dann muss er eben auf der Ebene darueber eine connection anlegen mit einem definierten Namen. Die Acquisition von ZOPE sollte dann doch aus deinem Code darauf automatisch zugreifen, oder nicht?
Gerom50
User
Beiträge: 5
Registriert: Montag 9. Mai 2011, 23:55

also ich verkauf ein kleines Zope-Progrämmchen, das ich mit Zope geschrieben habe, an letztlich belibieg viel Kunden und supporte es mehr oder weniger. Das System ist für den Kunden nicht zugänglich. Es holt sich lediglich Daten und mischt sie mit eigenen und gibt mehrere Reports als pdf-Datei an den Browser aus. Die Reports kann der Kunde dann speichern und ausdrucken.
Ich würde ungern den Zugang zum Zope System freigeben. Mein kleines System ist Bestandteil eines größeren System. Dieses wird von einem mir fremden Admin installiert und er sollte auch mein System installieren. Daher würde ich gerne den Zugang zur externen MySql DB nach außen legen.
Das war bei all meinen Projekten so und das waren nicht wenige. Übergangsweise kann ich einen festen Login mit festem Passwort vorgeben. Die IP ist dann über die etc/Host variable.

Trotz allem, ich bin begeistert von Zope. Jeder Kunde war erstaunt über die Performance. Mittlerweile ist mir klar woran das liegt und weiß daher, das die anderen, Java/Tomcat oder c#/IIS oder php (hat halt keinen Applikationsserver) da eigentlich nicht heran kommen können.

Gruß Gero
deets

Also, ich verstehe das immer noch nicht ganz (ich habe zwar ZOPE-Erfahrung, aber immer nur mit "meinem" System). Wie genau distributierst du denn deine Anwendung, wo steht die ZOPE-Instanz welche die dann laufen laesst, und wie und wo wird deine Anwendung da installiert?
Gerom50
User
Beiträge: 5
Registriert: Montag 9. Mai 2011, 23:55

Ich war etwas unterwegs.
Eine Instanz mit der Zope Software. Ich möchte lediglich den Connectstring der MySql Anbindung, die im MySql Object im Property Sheet steht programmatisch setzen oder einlesen. Dazu muss ich wissen, wie ich auf den Connect String zugreife. Normalerweise irgendwie mit manage_change Objekt...

Danke Gero
Antworten