2009-07-10 18 views
0

Ich habe eine Mysql/PHP-Anwendung. Ich möchte es SAS verkaufen. Ich denke an eine Hosting-Firma, die mehrere Datenbanken zur Verfügung hat. Ich möchte eine Seite, wo sie sich einloggen und ich bringe sie in ihre Datenbank. Ich werde viele Datenbanken mit identischer Struktur haben. Ich brauche eine Möglichkeit, um sie in diesen Ordner zu wechseln (ich kann einige Code für sie wie CSS ändern) und ihre Datenbank betreiben. Ich könnte eine Master-Tabelle für die Logins verwenden, aber wie man sich mit ihrer Datenbank verbindet? Ich mache mir Sorgen um die Sicherheit. Beispiel: Sagen wir, ich habe 3 Kunden. A B C Ich habe 3 Ordner auf einem Apache-Server eingerichtet, kopiere dort Code, setze eindeutige Datenbanknamen wie new_db_a, new_db_b, new_db_c. Nun, wenn ich es in einer Speichervariablen mache, wenn ein Log-in es an seinen Platz bringt. Er kann die URL sehen und könnte leicht einen anderen Buchstaben ersetzen und eine andere Firmendatenbank laufen lassen.Einrichten mehrerer MySQL-Datenbanken

Ich bin bereit, Perl, PHP oder was auch immer zu verwenden, um dies zu tun. Was ist der beste Weg, dies zu tun?

+0

Ich habe Ihre Frage von "sas" auf "saas" umgestellt, da ich glaube, Sie sprechen von Software as a Service (SaaS). Bitte hinterlassen Sie einen Kommentar, wenn ich falsch liege, und ich werde es zurück ändern. –

Antwort

0

Dies ist ein klassisches Abstraktionsproblem. Grundsätzlich müssen Sie den Datenbankauswahlprozess nicht nur von der Anwendung, sondern auch vom Auswahlbildschirm abstrahieren.

Denken Sie daran Begriffe von "Problemraum". Jede Anwendung hat ihre eigene (d. H. Ihre Datenbank), und dann haben Sie eine weitere, die das Kunden-Anmeldesystem ist. Es ist nichts falsch daran, eine andere, andere Datenbank dafür zu verwenden. Zu jeder Anmeldung gehören Datenbankverbindungsinformationen. Dies bedeutet, dass Sie die Datenbankinformationen in der PHP-Sitzung neben der Tatsache speichern können, dass der Benutzer angemeldet ist (und an dem er angemeldet ist).

Jetzt muss Ihre andere Anwendung ihre Datenbankschicht [1] lernen, wie man in der Sitzung nach den Datenbankinformationen sucht. Wenn Sie nicht nur den Namen der Datenbank, sondern auch den Namen des Servers, einen Benutzernamen und ein Passwort speichern, haben Sie die Freiheit, einige Kunden auf denselben Datenbankserver zu stellen, andere zusammen richtig (nicht schwer).

Wahrscheinlich die größte Fliege in dieser Salbe ist jedoch, dass, wenn die ausgewählte Anwendung beschließt, die Kontrolle über die PHP-Session-Informationen selbst zu übernehmen. Es gibt mehrere Möglichkeiten, dies zu lösen. Eine davon besteht darin, in seine eigene Sitzung zu kopieren, was für die Verbindung mit der richtigen Datenbank erforderlich ist. Eine zweite besteht darin, dass die Auswahlsitzung ihre Sitzungsverwaltung getrennt und möglicherweise manuell durchführt. Speichern Sie die Datenbankinformationen jedoch nicht in einem Cookie. Dies kann nicht nur von einem bestimmten Benutzer geändert werden, sondern Sie geben Sicherheit an einen unsicheren Ort ab - den Browser.

[1] Sie haben eine richtige Datenbankschicht, nicht wahr? Und damit meine ich, Sie haben alle Ihre mysql_query() Anrufe hinter einem Handler, entweder maßgeschneidert oder so ähnlich wie PDO.