1

Benötigen Sie eine Möglichkeit, eine Verbindung zu einer eindeutigen SQL-Datenbank über Login in ASP Classic.ASP Klassische Webapp - Verbindung zu verschiedenen SQL DB über Login

DIE EINRICHTUNG

  • Webapp: ASP classic/SQL 2005.
  • Webapp speichern Informationen für mehrere Unternehmen.
  • Alle Daten in einem Master SQL 2005 gespeichert. Alle DBs sind auf demselben Server.
  • Jeder Benutzer hat eine eindeutige Login (Firma, Benutzer-ID, Passwort)
  • Verbindung mit Master db ist Include-Datei mit DSN Verbindung
  • IE: (dbConn.Open „Treiber = {SQL Server}; Server = 11.22.333.444; database = mywebdb“, "myLogin", "mypassword")

BEDARF:

Wollen Unternehmen in die eigene Datenbank spalten. Wenn sich der Benutzer anmeldet, teilt der Firmenname der APP mit, eine eindeutige SQL-Datenbankverbindung für jede Firma zu verwenden.

Da dynamische Include-Dateien keine Option sind, was ist der beste Weg zu gehen?

Vielen Dank!

+0

[Beschwerde] "Logins" ist ein Plural Substantiv, kein Verb. Versuchen Sie Folgendes: "Wenn sich der Benutzer anmeldet, ...". [/ Mandel] – Martha

Antwort

0

Wie auch immer Sie es tun, werden Sie am Ende Ihre Verbindungszeichenfolge basierend auf Benutzereingaben variieren. Verwenden Sie keine Benutzereingaben direkt, sondern validieren Sie sie anhand einer Liste zulässiger Werte. Ich schlage vor, eine Select Case-Anweisung, dies zu tun:

' Do this when logging in: ' 
Dim companyName 
companyName = Request.Form("companyName") 

Select Case companyName 
Case "company1" 
    Session("companyDB") = "company1" 
Case "company2" 
    Session("companyDB") = "company2" 
Case Else 
    Session.Contents.Remove("companyDB") 
    ' Invalid login! ' 
End Select 

' Do this when connecting to the database: ' 
Dim connectionString 
If Session("companyDB") Then 
    connectionString = "...database=" & Session("companyDB") & "..." 
Else 
    ' Invalid login, go log in again ' 
End If 

Beachten Sie, dass dies zu Problemen führen, wenn Sie Benutzer haben, die ein Unternehmen in einem Register und ein anderes Unternehmen in einem anderen Tab öffnen wollen. Sie werden sich fragen, warum sie nur Informationen für das Unternehmen sehen können, bei dem sie sich zuletzt angemeldet haben.

Wenn dies ein Problem wird, möchten Sie wahrscheinlich ein Token in der Abfragezeichenfolge auf jeder Verknüpfung übergeben. Dies erhöht die Komplexität, aber nicht sehr viel (abgesehen von der mühsamen Aufgabe, jeden Link zu ändern). Es würde dann wie folgt aussehen:

' Do this when logging in: ' 
Dim companyName 
companyName = Request.Form("companyName") 

Select Case companyName 
Case "company1" 
    Session("company1 - db") = "company1DBName" 
Case "company2" 
    Session("company2 - db") = "company2DBName" 
Case Else 
    ' Invalid login! ' 
End Select 


' Do this when connecting to the database: ' 
Dim connectionString, companyToken 
companyToken = Request("companyToken") 
If Session(companyToken & " - db") Then 
    connectionString = "...database=" & Session(companyToken & " - db") & "..." 
Else 
    ' Invalid login, go log in again 
End If 

Dies setzt voraus, dass das Token der gleiche wie der Firmenname sein, der Einfachheit halber. So meldet sich beispielsweise jemand für "company1" an. Nach erfolgreichem Abschluss erhalten sie eine Sitzungsvariable namens "company1 - db", die den Namen der Datenbank (in diesem Fall "company1DBName") enthält.

Nun sollte jeder Link, den sie folgen, eine Abfragezeichenfolge haben, wie "? CompanyToken = company1" Wenn Sie also eine Verbindung zur Datenbank herstellen, nehmen Sie dieses Token und verwenden es, um den richtigen Datenbanknamen zu finden: Session (" company1 "+" - db ") =" firma1DBName "

Wenn sie sich noch nicht bei dieser Firma angemeldet haben (oder wenn sie nur einen Firmennamen bilden), haben sie diese Sitzungsvariable nicht, und sie Gehe zum Anmeldebildschirm.

Wenn sie sich unter zwei Firmen gleichzeitig anmelden, können Sie jetzt damit umgehen, weil Sie den Datenbanknamen für jeden Link erhalten.

Sinn machen?

Was auch immer Sie tun, verwenden Sie nicht die Benutzereingabe, um die Verbindungszeichenfolge direkt zu erstellen. Mit anderen Worten, die im Anschluss an die falsche Weg:

Dim connectionString 
connectionString = "...database=" & Request.Form("companyDB") & "..." 

Viel Glück!

+0

Wo erhalten die vorhandenen Seiten die Verbindungszeichenfolge? – AnthonyWJones

+0

WOW - schnelle Antwort! Die Verbindungszeichenfolge wird in der INCLUDE-Datei gespeichert. Das obige ausgewählte Fallbeispiel war etwas, mit dem ich spielte. Es funktioniert, aber ich muss immer eine Firma zur Zeichenfolge hinzufügen. Wie wäre es mit der Validierung der Anmeldung, um eine gültige Firma zu gewährleisten, dann speichern Sie diese als Sitzungsvariable, um die Verbindungszeichenfolge zu erstellen? –

+0

Das ist auch eine praktikable Lösung; Ich habe meine Antwort bearbeitet, um zu zeigen, wie das gemacht wird, und um zu zeigen, wie man einen möglichen Fehler vermeiden kann, die Session so zu benutzen. –

1

Die Verbindungszeichenfolge muss irgendwo gespeichert werden, oder? Ein include .asp denke ich.

Fügen Sie Code in diesem Include hinzu, um den Firmennamen (in der Sitzung gespeichert?) Zu prüfen und die Verbindungszeichenfolge entsprechend zu korrigieren.

bearbeiten:

Das Problem ist, dass Sie Code da draußen in einer Vielzahl verschiedener ASP-Seiten haben kann, die die entsprechende Verbindungszeichenfolge übernimmt ist in einer Variablen in Ihnen erklärt db.asp Datei enthalten (nennen wir es m_connStr). Sie möchten nicht alle diese Seiten ändern müssen, um diese neue Anforderung zu erfüllen.

Sie wollen also nur die Include-Datei db.asp bearbeiten und wollen nur, dass m_connStr auf die richtige DB zeigt.

Haben Sie Ihre Anmeldeseite, wenn Sie wissen, dass das Unternehmen den Datenbanknamen in einer Sitzungsvariablen festgelegt hat.

Ihre vorhandenen Code hat die Verbindungszeichenfolge wie folgt aus: -

m_connStr = "driver={SQL Server};server=11.22.333.444 database=mywebdb", "mylogin", "mypassword" 

Also werden wir eine Vorlage verwenden: -

m_connStrTemplate = "driver={SQL Server};server=11.22.333.444 database=%db%", "mylogin", "mypassword" 

If Session("database") <> "" Then 
    m_connStr = Replace(m_connStrTemplate, "%db%", Session("database")) 
End If 

Hinweis eine nicht-existente Datenbank Session-Variable bewirkt, dass die Verbindungszeichenfolge Um nicht definiert zu werden, können Sie sich nicht versehentlich mit einer Standarddatenbank verbinden.

Nun, so weit wie alle Ihre ASP-Seiten betroffen sind, ist es Geschäft wie üblich, aber die Verbindungszeichenfolge wird von Sitzung zu Firma entsprechend dem angemeldeten Benutzer variieren.

+0

Vielen Dank für das ausgezeichnete Feedback - AWJ-Code-Vorlage sollte ideal funktionieren - integriert in meine bestehende db_include-Datei - ein paar Zeilen Code-Änderung bringt meine gesamte App auf die jeweilige Firmen-DB. –

Verwandte Themen