web-dev-qa-db-de.com

Passwort speichern für ODBC Verbindung zu MS SQL Server von MS Access 2007

Ich bin für die Migration des alten Access 2007-Projekts zu MS SQL Server 2008 Express verantwortlich. In der ersten Phase werden alle Daten aus der MS Access-Datenbank auf den SQL Server verschoben, während die Access-Formulare und -Berichte auf dem Client gespeichert werden.

Die Daten werden nun verschoben, ein SQL Server-Benutzer (der nur auf diese bestimmte Datenbank zugreift) erstellt und die Tabellen über die Verbindung ODBC mit der Access-Datenbank verknüpft. Es gibt jedoch ein Problem, das auf irgendeine Weise behoben werden sollte: Der Access fragt beim Öffnen der Access-Datenbank regelmäßig nach dem Benutzerkennwort.

Die Benutzer auf dem Server-PC und dem Client-PC melden sich beide auf ihren lokalen Computern an, dh ihre Benutzer werden nicht auf einem unabhängigen Domänenserver überprüft.

Ich sehe, dass es mehrere Möglichkeiten gibt, dies zu lösen:

  • 1) Konfigurieren Sie das integrierte Sicherheitsmodell so, dass sich der Benutzer anmelden kann und automatisch durch sein Windows-Login autorisiert wird (dh verwenden Sie "vertrauenswürdige Verbindung"). Ich bin nicht sicher, wie dies getan werden könnte, da der Server-PC den Benutzer vom Client-PC nicht erkennt. Wenn ich dies jetzt versuche, erhalte ich die Fehlermeldung, dass der Benutzer eine Verbindung von einer nicht vertrauenswürdigen Domäne herstellt.
  • 2) Speichern Sie das SQL Server-Benutzerkennwort auf der Clientseite. Ich bin mir jedoch nicht sicher, ob dies möglich ist. Ich bin mir bewusst, dass das Speichern des Kennworts in einer Konfigurationsdatei oder die Speicherung in der Anwendungskonfiguration als Sicherheitsminderung angesehen werden sollte, dies ist jedoch für das angegebene Setup akzeptabel.
  • 3) Vielleicht eine andere Möglichkeit, wie Sie die SQL Server-Tabellen in Access verknüpfen?
6
Passiday

Die beste Lösung ist natürlich die Verwendung der Windows-Sicherheit.

Wenn das nicht passt, ist hier ein möglicher alternativer Trick, der die Tatsache ausnutzt, dass Access sich alle geöffneten Verbindungen merkt, bis das Programm geschlossen wird:

  1. kopieren Sie die Verbindungszeichenfolge einer Ihrer Tabellen
  2. erstellen Sie eine Durchgangsabfrage "ptqConnect" und geben Sie eine beliebige schnelle SQL-Anweisung ein, z. B. SELECT 1.
  3. fügen Sie die Verbindungszeichenfolge von in die PTQ Connect-Eigenschaft ein, und stellen Sie sicher, dass Sie den PWD=something; hinzufügen.
  4. stellen Sie beim Startvorgang Ihrer App sicher, dass Sie PTQ aufrufen. So etwas wie DCount("*", "ptqConnect") reicht aus.

Das ist es. Da Access geöffnete Verbindungen speichert, bis Sie die Datenbank schließen, werden Ihre anderen Tabellen jetzt problemlos geöffnet, auch wenn in der Verbindungszeichenfolge für verknüpfte Tabellen kein Kennwort gespeichert ist.
Wenn Sie die Verbindungszeichenfolge, die die PWD enthält, nicht offen legen möchten, können Sie auch eine Verbindung von VBA aus initiieren und den Code ausblenden, indem Sie eine MDE übermitteln oder den Code nur mit einem Kennwort schützen.

Eine Erklärung zu diesem Verhalten finden Sie hier .

13
Patrick Honorez

Ich hatte dieses Problem mit Access 2010, das mit SQL Azure verknüpft war, aber es war sehr einfach. Beim Verknüpfen der Tabellen gibt es für jede Tabelle ein Häkchen, mit dem das Kennwort gespeichert werden kann.

Wenn Sie Ihre Tabellen erneut verknüpfen und diese Option aktivieren, wird das Problem behoben. Es gibt Ihnen Warnungen, dass dies möglicherweise nicht sicher ist, aber nicht alle Datenbanken vertrauliche Daten enthalten.

1
Andrew Mogford

Informieren Sie die Benutzer darüber, dass die Sicherheitsrichtlinie Ihres Unternehmens das Speichern von Kennwörtern verbietet. Daher müssen sie bei jedem Öffnen der Datenbank ihr Kennwort eingeben. Erklären Sie, dass diese Richtlinie einem nicht autorisierten Benutzer die Möglichkeit verweigert, die Datenbank auf dem Computer eines autorisierten Benutzers zu öffnen. Wenn das Passwort auf irgendeine Weise gespeichert würde, könnte sich ein Angreifer einfach an einen unbeaufsichtigten Computer setzen und die Datenbank öffnen.

Da Sie keine vertrauenswürdige Verbindung verwenden können, ist dies die sicherste Methode. Ja, die Benutzer müssen jedes Mal, wenn sie die Datenbank öffnen, ihr Kennwort eingeben. Dies ist jedoch erforderlich, um die Sicherheit der Daten zu gewährleisten.

Edit : Da Ihre Option 2 akzeptabel ist, können Sie die UID und die PWD einfach in den Verbindungszeichenfolgen für die ODBC-verknüpften Tabellen speichern.

Hier ist ein Beispiel, das von connectionstrings.com kopiert wurde.

Driver={SQL Server Native Client 10.0};
Server=myServerAddress;
Database=myDataBase;
Uid=myUsername;Pwd=myPassword;

Ich habe die einzeilige Zeichenfolge für die Browseranzeige aufgeteilt. Sie müssen auch angeben, auf welche Tabelle die einzelnen Links verweisen. Untersuchen Sie Ihre aktuellen Verbindungszeichenfolgen, um festzustellen, wie das getan wird.

Uid und pwd sind Klartext und für jeden sichtbar, der die Verbindungseigenschaften anzeigen kann. Aber ich habe keine Anzeichen dafür gesehen, dass dies Bedenken für Sie sind.

1
HansUp

Ich bin gerade auf dieses Problem gestoßen, als ich über Access eine Remoteverbindung zu meinem SQL-Arbeitsplatzserver hergestellt habe. Ich habe Access 2013, aber ich glaube nicht, dass es Änderungen an so grundlegenden Elementen wie ODBC vorgenommen hat. Da es sich nicht um eine vertrauenswürdige Verbindung handelt, müssen Sie sich bei der anmelden Server jedes Mal, wenn Sie eine Verbindung zur Datenbank herstellen. Dies ist nur eine Grundsicherung. Ich kann mir nicht vorstellen, warum Sie jemals möchten, dass eine App eine Verbindung zu einem nicht vertrauenswürdigen Netzwerk herstellt, ohne dass dies in Frage kommt. Ich gehe davon aus, dass ich mich anmelden muss, wenn ich die Datenbank öffne.

Was mich jedoch verrückt machte, war, dass ich jedes Mal, wenn ich versuchte, einen Tisch zu öffnen, nach dem Passwort gefragt wurde, und zwar nicht nur einmal, sondern zweimal , und ich muss ein verwenden 13-stelliges Passwort, das bei der Erstellung zufällig generiert wurde! Das war natürlich völlig inakzeptabel.

Access behält die Verbindungsinformationen in der sys-Tabelle MSysOBjects bei, aber ich speichere das Kennwort nicht, zumindest nicht dort. Ich verwende eine auf einem Cloud-Server gespeicherte Zugriffsdatenbank, die mit meinen Desktops synchronisiert ist, damit ich eine lokale Kopie öffnen kann, anstatt auf meinem Arbeitsdesktop remote zugreifen zu müssen. Auf diese Weise geht es viel schneller.

Die Verwendung der Datenbank in Access als lokale Datei bedeutet jedoch, dass ich die DSN-Verbindungsnamen im Auge behalten muss. Solange sie absolut identisch auf allen Computern sind, funktioniert es hervorragend. Wenn mein DSN "ProductsDBIII" bei der Erstellung im Windows-Tool ODBC32 als "DSN" bezeichnet wurde, muss ich beim Erstellen zu Hause denselben Namen verwenden. Die tatsächliche Verbindungszeichenfolge wird unterschiedlich sein, aber Access kümmert sich nicht darum. Hier ist jedoch der Trick: Wenn ich die Datenbank zum ersten Mal von zu Hause aus verwende, beispielsweise nach einem Arbeitstag, muss ich die Verbindungen im Linked Table Manager von Access aktualisieren. Überprüfen Sie einfach die Tabellen/Ansichten, die Sie benötigen, oder klicken Sie auf "Alle überprüfen" und gehen Sie. Access stellt die Verbindung her - und fordert Sie möglicherweise zur Anmeldung auf - und aktualisiert dann schnell das Zeichenfolgenfeld "connect" in der MSysObjects-Tabelle, da diese unterschiedlich sind, zumindest wenn vom vertrauenswürdigen Zugriff gewechselt wird.

Voila, keine Einzel- oder Doppelherausforderung mehr, wenn ich einen Tisch öffne. Ich werde einmal gefragt, wann ich das erste Mal eine Verbindung herstelle, wenn ich eine Tabelle aus der entfernten Datenbank öffne, aber das war's.

Hoffe das hilft jemandem.

Jim

0
user3091705

Verwenden Sie erneut Passthrough QAuery, um die Verbindung ODBC herzustellen.

Das in den Datenbankoptionen als Startformular angegebene Formular wird VOR der automatischen Ausführung ausgelöst. Dieses Formular kann/sollte also keine verknüpften Tabellen zitieren oder das nicht belassen. und setze das Formular in autoexec.

Andernfalls werden Sie weiterhin zur Eingabe von pwd für die Verbindung ODBC aufgefordert

Ein typisches Problemszenario ist die Verwendung eines Schalttafelformulars mit der Tabelle in der verknüpften Datenbank

0
Ian Fry