SQL Server-Zugriff ohne gespeichertes Kennwort

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wenn Sie per ODBC auf die Tabellen etwa eines SQL Servers zugreifen, kennen Sie das Dilemma: Entweder Sie nutzen die Windows-Authentifizierung, was nicht überall möglich ist, aber ohne größere Probleme funktioniert. Oder Sie verwenden die SQL Server-Authentifizierung. Dann haben Sie zwei Möglichkeiten: Entweder Sie erlauben das Speichern des Kennworts in den Systemtabellen von Access. Oder der Benutzer muss nach dem eigentlichen Anmelden nochmal seine Benutzerdaten eingeben, wenn der erste Zugriff auf eine Tabelle erfolgt. In dieser Lösung schauen wir uns diese Varianten an – und eine bessere, bei der Sie einfach die Tabellen beim Start neu verknüpfen.

Wir gehen an dieser Stelle davon aus, dass Sie einen SQL Server auf dem Rechner installiert haben und dort eine Datenbank mit einer oder mehreren gewünschten Tabellen mit Zugriffsrechten für ein bestimmtes Konto eingerichtet haben. Wichtig ist letzteres – sonst können Sie ja nicht per SQL Server-Authentifizierung auf die Tabelle zugreifen.

Verknüpfung per Assistent

Der gängige Weg, eine Verknüpfung zu einer SQL Server-Tabelle herzustellen, ist der über den Assistenten. Dabei rufen Sie diesen über den Ribbon-Eintrag Externe Daten|Importieren und Verknüpfen|Neue Datenquelle|Aus Datenbank|Aus SQL Server auf (siehe Bild 1).

Manuelles Verknüpfen mit einer SQL Server-Tabelle

Bild 1: Manuelles Verknüpfen mit einer SQL Server-Tabelle

Dies öffnet den Dialog aus Bild 2, wo Sie die zweite Option zum Erstellen einer Verknüpfung auswählen und dann auf OK klicken.

Start der Erstellung einer Verknüpfung

Bild 2: Start der Erstellung einer Verknüpfung

Der nächste Dialog heißt Datenquelle auswählen und hat zwei Registerreiter.

Wir wählen den zweiten namens Computerdatenquelle an und klicken dort auf die Schaltfläche Neu… (siehe Bild 3).

Anlegen einer neuen Computerdatenquelle

Bild 3: Anlegen einer neuen Computerdatenquelle

Einen Schritt weiter legen Sie noch genau fest, ob Sie eine Benutzerdatenquelle oder eine Systemdatenquelle anlegen wollen – wir wählen die Benutzerdatenquelle (siehe Bild 4).

Auswahl des Datenquellentyps

Bild 4: Auswahl des Datenquellentyps

Der folgende Schritt fragt ab, welchen Datenbanktreiber wir verwenden wollen. Mit dem Treiber SQL Server macht man nichts verkehrt (siehe Bild 5). Die SQL Server Native Client x.0-Treiber können Sie verwenden, wenn diese spezielle Features für den Zugriff auf die jeweilige Version des SQL Servers bereithalten.

Auswahl des Datenbanktreibers

Bild 5: Auswahl des Datenbanktreibers

Der nächste Schritt ermittelt einen Namen für die Datenquelle. Diese nennen wir einfach Datenquelle_Suedsturm_SQL. Außerdem möchte der Assistent hier wissen, auf welchen SQL Server wir zugreifen wollen, um die Verknüpfung herzustellen. Diese heißt in unserem Fall wie der Rechner, auf dem der SQL Server läuft. Wenn Sie die LocalDb-Version nutzen, würden Sie hier beispielsweise (localdb)\SQLServerLocalDB angeben (siehe Bild 6).

Angeben eines Namens für die Datenquelle und des Servers

Bild 6: Angeben eines Namens für die Datenquelle und des Servers

Ist dieser Schritt erledigt, fragt der Assistent im nächsten Schritt ab, ob wir Windows-Authentifizierung oder SQL Server-Authentifizierung verwenden wollen. Wir entscheiden uns für letzteres und tragen unsere Benutzerdaten in die beiden nun freigeschalteten Textfelder Login ID und Password ein (siehe Bild 7). Der Benutzer heißt hier Benutzer3, das Kennwort password.

Einstellen der SQL Server-Authentifizierung und Angabe der Zugangsdaten

Bild 7: Einstellen der SQL Server-Authentifizierung und Angabe der Zugangsdaten

Wie Sie einen Benutzer für die SQL Server-Authentifizierung für eine Datenbank anlegen, hier Benutzer3, erfahren Sie im Beitrag SQL Server-Authentifizierung (www.access-im-unternehmen.de/1155).

Im folgenden Schritt können Sie noch die Standarddatenbank auf Suedsturm_SQL einstellen (siehe Bild 8), die Einstellungen im darauffolgenden Dialog behalten wir bei.

Einstellen der Standarddatenbank

Bild 8: Einstellen der Standarddatenbank

Es folgt ein Abschlussdialog, der die Einstellungen nochmal zusammenfasst und eine Schaltfläche anbietet, mit der Sie die Datenquelle testen können (Test Data Source…). Diese klicken Sie an und sollten dann das Ergebnis aus Bild 9 erhalten.

Testen der Datenbankverbindung

Bild 9: Testen der Datenbankverbindung

Damit ist die Computerdatenquelle angelegt und wir finden diese im Dialog Datenquelle auswählen vor. Die neue Datenquelle sollte nun ausgewählt sein und wir schließen den Dialog mit der OK-Schaltfläche.

Nun erscheint ein Dialog namens SQL Server Login. Hier ist der Benutzername bereits voreingestellt und wir müssen noch das Kennwort eingeben (siehe Bild 10). Mit einem Klick auf die Schaltfläche Optionen >> können Sie noch weitere Optionen einblenden – etwa, um das Kennwort zu ändern.

Herstellen der Verbindung

Bild 10: Herstellen der Verbindung

Im abschließenden Dialog Tabellen verknüpfen können Sie nun die zu verknüpfenden Tabellen auswählen (siehe Bild 11). Wir wählen alle Tabellen aus, die wir selbst angelegt haben – die anderen sind Systemtabellen der SQL Server-Datenbank.

Auswahl der zu verknüpfenden Tabellen

Bild 11: Auswahl der zu verknüpfenden Tabellen

Direkt im Anschluss erscheinen die ausgewählten Tabellen im Navigationsbereich von Access – allerdings jeweils mit dem Präfix dbo_ (siehe Bild 12).

Die frisch angelegten Verknüpfungen

Bild 12: Die frisch angelegten Verknüpfungen

Ver-bin-dungs-zeichen-folgen ansehen

Nun öffnen wir die Systemtabelle MSysObjects von Access und schauen uns den Inhalt der Spalte Connect an. Diese liefert uns die Verbindungszeichenfolge, die der Verknüpfungsassistent eingerichtet hat (siehe Bild 13). Wir sehen hier eine Verbindungszeichenfolge mit einer DSN namens Test sowie die Angabe einer APP und der DATABASE:

Die Tabelle MSysObjects mit den Verbindungszeichenfolgen

Bild 13: Die Tabelle MSysObjects mit den Verbindungszeichenfolgen

DSN=Test;APP=Microsoft Office 2016;DATABASE=Suedsturm_SQL;

Die hinter der DSN steckenden Informationen finden wir in der Registry unter dem Zweig HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\Test – siehe Bild 14. Hier wird nur der zuletzt verwendete Benutzername gespeichert, aber nicht das Kennworts.

Die DSN in der Systemregistrierung

Bild 14: Die DSN in der Systemregistrierung

Das Kennwort wurde in früheren Versionen noch optional gespeichert, aber aus Sicherheitsgründen hat Microsoft diese Option entfernt.

Zugriff auf die Tabellen

Die Tabellen können Sie nun direkt öffnen – Sie brauchen nicht erneut die Zugangsdaten einzugeben. Wenn Sie die Access-Sitzung allerdings beenden und erneut starten (dies erfordert das Schließen der Access-Anwendung – das Schließen der Datenbank allein reicht nicht aus), erscheint beim ersten Zugriff auf eine der Tabellen der Dialog zum Eingeben der Zugriffsdaten (siehe Bild 15).

SQL Server-Logindialog

Bild 15: SQL Server-Logindialog

Die Lösung ist zwar sicher, aber wenig komfortabel – für den Benutzer ist es aber nicht die perfekte Lösung. Das Problem ist, dass wir ihn nicht mit dem von Microsoft vorgegebenen, englischsprachigen Dialog abspeisen wollen.

Außerdem soll die Eingabe des Kennworts nicht erst beim erstmaligen Zugriff auf eine der Tabellen erfolgen, sondern direkt beim Start.

Kennwort in der Verbindungszeichenfolge speichern

Eine für den Benutzer ergonomische, aber bezüglich der Datensicherheit bedenkliche Lösung wäre es, das Kennwort in der Verbindungszeichenfolge zu speichern. Sollte ein anderer Benutzer Zugriff auf den Rechner erhalten könnte er die Zugangsdaten direkt aus der Tabelle MSys-Objects oder auch aus den Eigenschaften der Entwurfsansicht einer der verknüpften Tabellen auslesen. Also lassen wir diesen Ansatz gleich unter den Tisch fallen.

Verknüpfen und löschen

Der aus unserer Sicht beste Ansatz ist es, die Zugangsdaten in einem benutzerdefinierten Dialog beim Starten der Anwendung abzufragen und die Verknüpfungen dann zu erstellen. Dabei verwendet man eine bestimmte Option, die dafür sorgt, dass die Benutzerdaten nicht in der Verbindungszeichenfolge in der Systemtabelle MSysObjects gespeichert werden. Die Zugangsdaten werden dann durch eine per Code realisierte Anmeldung für diese Sitzung gespeichert. Wenn der Benutzer dann das nächste Mal auf die Datenbank zugreift, müsste er die Zugangsdaten neu eingeben, sobald er auf eine der Tabellen zugreift. Dann würde der eingebaute Dialog zum Eingeben der Anmeldedaten erscheinen. Um das zu verhindern, sorgen wir dauerhaft dafür, dass der Benutzer immer beim Neustart der Anwendung die Benutzerdaten eingeben muss. Wie das gelingt, zeigen wir in den folgenden Abschnitten.

Tabellen beim Start verknüpfen

Um die Tabellen beim Start der Anwendung zu verknüpfen, benötigen wir ein Formular, das beim Start der Anwendung geöffnet wird und die Anmeldedaten abfragt. Dann soll das Formular mit diesen Anmeldedaten eine Verbindungszeichenfolge zusammenstellen und die ODBC-Verknüpfungen zu den benötigten Tabellen herstellen.

Dadurch, dass die Zugangsdaten nicht in der Tabelle MSysObjects gespeichert werden, kann selbst eine Person, die in Abwesenheit des Benutzers auf die Datenbank zugreift, nicht die Zugangsdaten ermitteln. Allerdings wäre es für diese Person auch ohne Vorhandensein der Anmeldedaten möglich, in diesem Moment über die Anwendung auf die Datenin der SQL Server-Datenbank zuzugreifen – man sollte sich grundsätzlich von seinem Rechner abmelden, wenn man den Raum verlässt und Unbefugte in der Nähe sein könnten.

Login-Formular programmieren

Das Login-Formular soll die folgenden Steuer-elemente enthalten:

  • txtBenutzername: Nimmt den Benutzernamen auf.
  • txtKennwort: Nimmt das Kennwort auf. Als Eingabeformat verwenden wir Kennwort, damit dieses maskiert angezeigt wird.
  • cmdAnmelden: Schaltfläche zum Herstellen der Verknüfungen zu den Tabellen des SQL Servers
  • cmdAbbrechen: Schaltflächen zum Abbrechen des Logins

Das Formular stellen wir etwa wie in Bild 16 zusammen. Für das Steuer-element cmdAnmelden legen wir die Eigenschaft Standard auf den Wert Ja fest, für das Steuer-element cmdAbbrechen die Eigenschaft Abbrechen auf den Wert Ja.

Entwurf des Login-Formulars

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar