Wie erhalte ich MS-Access, um als anderer Benutzer eine Verbindung zu MS-SQL herzustellen?

StackOverflow https://stackoverflow.com/questions/50786

  •  09-06-2019
  •  | 
  •  

Frage

Wie erhalte ich MS-Access, um als anderer Benutzer als seine Active Directory-ID eine Verbindung (über ODBC) mit einer MS-SQL-Datenbank herzustellen?

Ich möchte kein Konto in der ODBC-Verbindung angeben, sondern dies auf der MS-Access-Seite tun, um es vor meinen Benutzern zu verbergen.Wenn ich es über die ODBC-Verbindung mache, komme ich wieder in die ursprüngliche Situation zurück, die ich zu vermeiden versuche.

Ja, das bezieht sich auf eine frühere Frage: http://www.stackoverflow.com/questions/50164/

War es hilfreich?

Lösung

Ich denke, Sie können dies so hinbekommen, wie Sie es möchten, wenn Sie eine verwenden „ODBC DSN-LESS-Verbindung“

Behalten Sie bei Bedarf Ihre ODBC-DSNs mithilfe der Windows-Authentifizierung auf den Computern Ihrer Benutzer.Gewähren Sie Ihren Benutzern schreibgeschützten Zugriff auf Ihre Datenbank.(Wenn sie eine neue MDB-Datei erstellen und die Tabellen verknüpfen, können sie die Daten nur lesen.)

Erstellen Sie ein SQL-Login, das über Lese-/Schreibberechtigung für Ihre Datenbank verfügt.

Schreiben Sie eine VBA-Routine, die Ihre verknüpften Tabellen durchläuft und die Verbindung zurücksetzt, um Ihre SQL-Anmeldung zu verwenden. Achten Sie jedoch darauf, die Syntax „DSN-Less“ zu verwenden.

"ODBC;Driver={SQL Native Client};" &
       "Server=MyServerName;" & _
       "Database=myDatabaseName;" & _
       "Uid=myUsername;" & _
       "Pwd=myPassword"

Rufen Sie diese Routine als Teil Ihres Startcodes auf.

Ein paar Anmerkungen zu diesem Ansatz:

  • Access scheint ein Problem mit den Verbindungsinformationen zu haben, wenn Sie von „Lesen/Schreiben“ auf „Nur Lesen“ wechseln und versuchen, wieder auf „Lesen/Schreiben“ umzuschalten, ohne die Datenbankdatei (mde/mdb) zu schließen und erneut zu öffnen.Wenn Sie dies einmal beim Start in „Lesen/Schreiben“ ändern können und es während der Sitzung nicht ändern können, sollte diese Lösung funktionieren.

  • Durch die Verwendung einer DSN-Less-Verbindung können Sie die Anmeldeinformationen vor dem Benutzer im Code verbergen (vorausgesetzt, Sie geben ihm eine MDE-Datei, sollte das in Ordnung sein).Normalerweise ist es keine gute Idee, Verbindungszeichenfolgen hart zu codieren, aber da Sie es mit einer internen App zu tun haben, sollte dieser Ansatz für Sie in Ordnung sein.

Andere Tipps

Ich denke, Sie müssten den MS Access-Prozess unter dem Konto starten, mit dem Sie eine Verbindung herstellen möchten.Es gibt verschiedene Tools, mit denen Sie dies tun können, z CPAU.Mit diesem Tool können Sie auch das Passwort verschlüsseln.

Wir geben hier zu, dass Sie eine ODBC-Verbindung zu Ihrer Datenbank mit aktivierter integrierter Sicherheit verwenden, sodass Sie keinen Benutzernamen/Passwort-Wert in die Verbindungszeichenfolge schreiben müssen/wollen (was meiner Meinung nach die richtige Wahl ist).

In diesem Fall gibt es glücklicherweise keine Möglichkeit, einen anderen Benutzer bei der Verbindung mit den Daten zu „simulieren“.Geben Sie mir zu, dass die Möglichkeit, so etwas zu schaffen, einen gewaltigen Bruch in der integrierten Sicherheit bedeuten würde!

Ich habe Ihrem vorherigen Beitrag entnommen, dass Sie wollten, dass Benutzer die Daten aktualisieren können oder nicht, je nachdem, welche Client-Schnittstelle sie verwenden.Die Idee wäre meiner Meinung nach, für jede Tabelle eine verknüpfte „nicht aktualisierbare“ Ansicht zu erstellen.Sagen wir das für jede aufgerufene Tabelle Table_Blablabla Sie erstellen eine Ansicht (=Abfrage in Access) mit dem Namen View_Table_Blablabla ...).

Bei der Nutzung von Access können Sie dann zur Laufzeit entscheiden, ob Sie die aktualisierbare Tabelle oder die schreibgeschützte Ansicht öffnen möchten.Dies kann beispielsweise zur Laufzeit erfolgen, im form_Open -Ereignis, indem Sie die Datensatzquelle des Formulars entweder auf die Tabelle oder die Ansicht festlegen.

@Philippe
Ich gehe davon aus, dass Sie das Wort verwenden zugeben als ungefähr gleichbedeutend mit verstehen oder vielleicht zustimmen;im Gegensatz zum Gegenteil von leugnen.

Ich verstehe die Auswirkungen, wenn sich alle Benutzer mit einer ID und einem Passwort bei der Datenbank anmelden (und diese in der Anwendung speichern).Das ist für mich ein geringeres Risiko als das Problem, mit dem ich gerade konfrontiert bin.
@aus

Noch ein paar Hintergrundinformationen zum Problem:Ich habe ODBC-Verbindungen auf allen Arbeitsstationen der Benutzer mithilfe der Windwos NT-Authentifizierung eingerichtet.Meistens stellen Benutzer eine Verbindung über ein MDE-Setup her, um diese ODBC-Verbindung zu verwenden. In diesem Fall haben sie IMMER die Möglichkeit, Daten hinzuzufügen/aktualisieren/löschen.

Das Problem besteht darin, dass einige Benutzer ausreichend über MS-Access informiert sind, um eine neue MDB zu erstellen und diese mit dem MS-SQL-Server zu verknüpfen.Sie können die Daten dann direkt in den Tabellen bearbeiten, anstatt die Anwendung zu durchlaufen, die ein gewisses Maß an Validierung und Handhaltung durchführt.Und sie wie Ich tue das, aber manchmal bringen sie es durcheinander und bereiten mir Probleme.

Was ich erreichen wollte (womit ich gerade experimentiert habe), war, die Links zur Datenbank etwa so für jede Tabelle zu aktualisieren (Hinweis:Ich habe für dieses Experiment die ODCB-Verbindung auf SQL Server-Authentifizierung umgestellt und die Konten auch zum SQL Server hinzugefügt: schreibgeschützt - was nicht zu irgendwelchen Updates führen kann, und lesen Schreiben - der über volle Privilegien auf dem Tisch verfügt).

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readonly;" & _
                "PWD=readonly_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

Dies hindert sie am Bearbeiten, aber ich kann einen späteren Lese-/Schreibvorgang nicht zum Laufen bringen

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readwrite;" & _
                "PWD=readwrite_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

Es scheint, dass die Erlaubnis, mit der ich mich zuerst verbinde, dauerhaft bestehen bleibt.Wenn ich readwrite gestartet habe und dann auf readonly gehe, bleibt die Tabelle mit den readwrite-Berechtigungen bestehen

Warum nicht die integrierte/Windows-Sicherheit verwenden?Sie können einer Active Directory-Gruppe die gewünschten Benutzerrechte gewähren und dann die Benutzerkonten zu dieser Gruppe hinzufügen.Ich glaube, Sie können darüber hinaus auch die Rollenfunktion von SQL Server verwenden, um die Funktionalität basierend auf der verwendeten Clientanwendung einzuschränken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top