Stefan Luger: Zugriff auf Access Datenbank mit Passwort

Hallo,
ich versuche einen Zugriff auf eine Passwortgeschuetzte Access DAtei hinzubekommen. Leider kreige ich das nciht hin, da auch mein Verbindungsaufbau anders aussieht als bei vielen anderen Foren und Beitraegen. Vielleicht kann mir da jemand helfen?
Hier die 2 Dateien, die ich verwende, um die DB zu oeffnen:

[connectdb.inc]
<%
' Connect to database
Set dbConn = Server.CreateObject("ADODB.Connection")
dbConn.Provider="Microsoft.Jet.OLEDB.4.0"
db=server.mappath("accommation.mdb")
%>

[opendb.inc]
<%
Set rs = Server.CreateObject("adodb.Recordset")
dbConn.open db
%>

Wie und wo kann ich da ein Passwort bzw. User eintragen? Als Beispiel verwende ich noch utest (User Test) und ptest (Passwort Test). Wie kann ich da das PAssowrt integrieren? Wenn moeglich ohne die VAriablen, etc. zu veraendern, da ich bereits meherer Programme geschrieben haben, die immer auf diese DAteien zugreifen.
Wie kann ich das in Zukunft besser machen?
Fuer Hilfe und Anregungen bin ich sehr dankbar,
Stefan

  1. Hiho

    wozu zwei Dateien, erst bei der zweiten Datei "connectest" du wirklich! Du kannst beide Inhalte in ein Include packen, diese getrennt zu verwenden, wenn sie sowieso immer zusammen verwendet werden macht nicht viel Sinn.

    Set rs = Server.CreateObject("adodb.Recordset")

    wozu erzeugst du beim Öffnen ein Recordset (rs)... brauchst du das später? Wenn nicht, dann lass es weg

    Wie und wo kann ich da ein Passwort bzw. User eintragen?

    du solltest dir evt. auch mal die Dokumentation zu ADO durchlesen
    z.b. ist www.devguru.com dazu recht geeignet
    dann würdest du wissen, daß man

    a) solche Infos im ConnectionString mitgeben kann
    b) solche Infos bei der .open Methode als Argumente mitgeben kann

    Allgemein zeugt dein Code davon, dass du nicht richtig weißt, was ADO ist. Ich würde dir deshalb nahelegen, dich mit diesem Thema mal intensiver zu beschäftigen. Dann wird es dir wie Schuppen aus den Haaren fallen. ;-)

    Tschau,
    Frank

    1. Hi,
      zwei Dateien nehme ich, weil ich damit die Verbindung nicht ganz schliessen muss und somit Daten in Dokumenten, wo ich mehrere DB Zugriffe habe leichter uebergeben kann. HAbe ebenso 2 DAteien zum schliessen und beenden einer Verbindung. Soll schneller sein hat mir mal einer erzaehlt.

      Leider habe ich echt nicht die Ahnung, was ADO ist und was das soll, auch was genau ein recordset ist, keine Ahnung. Verwende es einfach, probeire es mal ohne.
      Leider hat mich das aber immer noch nicht wietergebracht, da ich vorher schon etliche Varaianten durchprobiert habe und das Passwort / USer als String mitgegeben habe. Leider scheint das bei meinen jetztigen Programen nicht einfach so zu laufen.
      Stefan

      1. So,
        habe jetzt alles auf wenige Programmzeilen und jeweils eine Datei umgestellt. Hier der Code der oeffnenden DAtei:

        dbconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
        dbconn = dbconn & Server.MapPath("accommation.mdb")
        Set rs = Server.CreateObject("adodb.Recordset")

        rs brauche ich, damit fahre ich mehrere Schleifen.
        Kann mir jetzt jemand sagen, wie das mit dem Password geht?
        Stefan

        1. Hi,

          nur mal so als Tipp ... dass womit du da hantierst, ist ADO. Deshalb auch mein Hinweis, wo du dich einlesen kannst.

          siehe hier:  http://www.devguru.com/Technologies/ado/quickref/connection_open.html

          habe jetzt alles auf wenige Programmzeilen und jeweils eine Datei umgestellt. Hier der Code der oeffnenden DAtei:

          dbconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
          dbconn = dbconn & Server.MapPath("accommation.mdb")
          Set rs = Server.CreateObject("adodb.Recordset")

          in deiner öffnenden Datei fehlt aber die Öffnung der DB Verbindung

          .open dbConn,UserName,Passwort,Optionen

          und zum "Schließen" nimmt man

          .close

          Das Passwort und die User ID kann man auch im Connection-String mit spezifizieren.

          aus diesen Gründen versteh ich nicht, was du in dem anderen Posting meinst, dass du dann die "Verbindung nicht ganz schließen" mußt.

          Wenn du dich entschließt, DB Verbindungen auf Seitenbasis aufzubauen, dann sieht das so aus:

          [Seitenanfang von .asp]
          -> include-Datei [DB-Verbindung öffen]

          [Seitenhauptteil]
          -> Benutzung der DB Verbindung

          [Seitenende]
          -> include-Datei [DB-Verbindung schließen]

          rs brauche ich, damit fahre ich mehrere Schleifen.

          ja schon, aber nicht unbedingt gleich im Prolog!
          außerdem kannst du auch mehrere Recordsets parallel verwenden
          Objekte sollten eigentlich unmittelbar da instanziert und wieder verworfen werden, wo sie gebraucht werden

          Du hast einfach ein paar Fehler in deiner Denkweise, wie man mit ADO umgeht, deswegen solltest du dich damit mal beschäftigen, da gibt es reichlich Ressourcen in der Literatur und auch im Internet. Oder willst du dich nicht damit beschäftigen und kommst dann mit jeder weiteren Frage (die du durch Studieren der Materie beantworten könntest) auch wieder hier her? Dann könntest du von einigen Alt-Eingesessenen dieses Forums etwas Zunder bekommen.

          Tschau, Frank

          1. Servus,
            leider habe ich im Moment nicht die Zeit, da ich hier in einer Firma bin, die eben auch andere Projekte habe. Und leider, sobald ich zulange vor dem PC sitze und lese, bekomme ich wieder arbeit. Und damit habe ich wieder weniger Zeit fuer das verstehen des ADO.

            DAs mit dem Recordset wusste ich nicht (auch mehrerer) werde es beruecksichtigen.

            Weiteres Problem: die bisherigen select Befehele gehen weiterhin, update und insert weigern sich mit dem neuen Code.

            HAbe jetzt den alten wiedergenommen, habe User und PWD reingeschrieben und bekomme jetzt folgende Fehlermeldung:

            Microsoft JET Database Engine (0x80040E4D)
            Cannot start your application. The workgroup information file is
            missing or opened exclusively by another user.

            Was soll das? DB ist da, PAsswort richtig und es greift auch kein anderer darauf zu.

            Stefan

            1. Hi,

              Servus,
              leider habe ich im Moment nicht die Zeit, da ich hier in einer Firma bin, die eben auch andere Projekte habe. Und leider, sobald ich zulange vor dem PC sitze und lese, bekomme ich wieder arbeit.

              verstehe ich das richtig, die ASP-DB Geschichte ist keine Arbeit, die du "auf Arbeit" machen sollst?   ;-)

              Okay, zum Thema .... hier mal ein Beispiel:

              set dbConn = Server.CreateObject("ADODB.Connection")
              connectionString = "Provider=Microsoft.Jet.OleDB.4.0;data source=d:\datenbank.mdb;"
              dbConn.Open connectionString,"admin","passwort"

              rs_sql = "SELECT * FROM Tabelle1"
              set rs = Server.CreateObject("ADODB.Recordset")
              rs.Open rs_sql,dbconn,3,3
              DO Until rs.EOF
                ...
                rs.MoveNext
              Loop

              rs.close
              set rs = nothing

              dbConn.close
              set dbConn = nothing

              ========================================================

              Wenn du eine ganz jungfräuliche Access-Datenbank hast, ist der Benutzername "admin" und das Passwort voerst einmal "" (also leer)

              Wenn du über das Access-Menü die Funktion "Datenbankkennwort zuweisen" wählst legst du grundsätzlich erstmal ein Passwort für den Benutzer "admin" fest.

              Du kannst natürlich auch die "richtige" Benutzerverwaltung von Access benutzen, dazu wird dann ein Workgroupfile angelegt, .mdw (glaub ich) ... dieses muß natürlich beim Verbindungsversuch bekannt sein, wo es liegt.

              Es macht aber keinen (richtig nutzvollen) Sinn, diese Benutzerverwaltung zu verwenden, weil du die Arbeit an der Datenbank, was wo selected wird etc, sowieso über die ASP Seiten steuerst.

              Weiteres Problem: die bisherigen select Befehele gehen weiterhin, update und insert weigern sich mit dem neuen Code.

              Dieses neuen Code hättest du evt. mal posten können.

              Damit Inserts und Updates funktionieren, muss die Datenbank und das Verzeichnis, wo sie drin liegt, den Schreibzugriff durch den anonymen Internetbenutzer (IUSR_MachineName) haben. Ansonsten Fehlermeldung.

              -- Fehlermeldung --

              Was soll das? DB ist da, PAsswort richtig und es greift auch kein anderer darauf zu.

              Ja, aber das Workgroupfile für die Benutzersteuerung nicht.

              Du wirst es schon noch hinbekommen.

              Wenn diese DB Geschichte dein Arbeitsinhalt ist, dann sollte man dir auch die Zeit geben, bzw. du mußt dich durchsetzen. Wenn dies was Privates ist, dann solltest du dies auf Arbeit nicht machen.

              Gruß, Frank

              1. Danke, jetzt geht es.
                Allerdings habe ich mich auch unklar ausgedrueckt (und damit hatte ich dann die ganze Zeit zu kaempfen...)
                Wollte ein Passwort fuer die DB- Datei an sich haben (geht jetzt auch) und nicht fuer die einzelnen User.... und das geht jetzt auch. Aber evtl. werde ich die USer Verwaltung in Access noch aktivieren.

                Mein Problem ist jetzt, das das Passwort als reine Form in meiner include steht. Macht dann aber wenig Sinn, sobald man den Pfad und den NAmen der Include kennt, kann man diese direkt aufrufen.
                Habe mal was gelesen, dass man die ASP Dateien verschluesseln kann und somit das PAsswort nicht fuer alle zugaenglich ist. Werde mich aber erstmal auf die google Suche machen.

                Nee, ist wirklich in einer Firma hier, aber soviel Zeit habe ich nciht, da ich eben noch viel anderes zu tun habe.

                Vielen Dank fuer alles. HAst Du eine Page, die man sich mal anschauen kann?
                Stefan

                1. Hi,

                  falls du es doch noch mal liest ...

                  • Die Userverwaltung in Access macht für ein Webprojekt keinen Sinn.
                  • Verstecke das Passwort der DB z.b. in einer Applikationsvariablen deiner Website Application("dbpassword")
                  • Verhindere serverseitig, daß .inc Dateien angezeigt werden

                  Dateien, die per SSI (Server Side Includes) einschließt müssen nicht .inc heißen ... nenn sie .asp und schon wird beim direktaufruf mit dem Brauser von z.b. include1.asp versucht den Code darin auf dem Server auszuführen und nicht an den Browser zu liefern

                  oder

                  lege alle Includes in ein Unterverzeichnis deiner Website und verbiete der Öffentlichkeit das Lesen darauf ... dann kann aber die SSI Engine imho immer noch die Datei einschließen

                  Vielen Dank fuer alles. HAst Du eine Page, die man sich mal anschauen kann?

                  eine eigene nicht, ich kann dir aber Ressourcen wie z.b. www.aspheute.com empfehlen, die etwas spezifischer sind als solche Tutorials wie zb. auf www.devguru.com

                  Viel Spass noch
                  Frank