2008-09-08 6 views
3

Wie erhalte ich ms-Zugriff, um (über ODBC) eine Verbindung zu einer MS-SQL-Datenbank als ein anderer Benutzer als ihre Active Directory ID herzustellen?Wie bekomme ich ms-Zugang, um sich mit ms-sql als ein anderer Benutzer zu verbinden?

Ich möchte kein Konto in der ODBC-Verbindung angeben, ich möchte es auf der ms-Zugriffsseite tun, um es vor meinen Benutzern zu verbergen. Würde ich es in der ODBC-Verbindung tun, würde ich sofort wieder in die ursprüngliche Situation zurückkehren, die ich vermeiden möchte.

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

Antwort

5

Ich denke, begann können Sie diese so, wie Sie es wollen an die Arbeit zu, wenn Sie einen verwenden "ODBC DSN-LESS connection"

Wenn Sie müssen, halten Ihre ODBC-DSNs auf den Computern Ihrer Benutzer mithilfe der Windows-Authentifizierung. Geben Sie Ihren Benutzern Lesezugriff auf Ihre Datenbank. (Wenn sie eine neue MDB-Datei erstellen und die Tabellen verknüpfen, können sie nur die Daten lesen.)

Erstellen Sie eine SQL-Anmeldung mit Lese-/Schreibberechtigung für Ihre Datenbank.

Schreiben Sie eine VBA-Routine, die Ihre verknüpften Tabellen durchläuft, und setzen Sie die Verbindung zurück, 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 Startup-Codes auf.

Ein paar Hinweise zu diesem Ansatz:

  • Zugang scheint mit dem Verbindungsinformationen ein Problem zu haben, wenn Sie von Read/Write ändern Nur zu lesen und versuchen, ohne zurück zu Read/Write Schließen und erneutes Öffnen der Datenbank (mde/mdb). Wenn Sie dies beim Start nur einmal in Lesen/Schreiben ändern und während der Sitzung nicht ändern, sollte diese Lösung funktionieren.

  • Mit einer DSN - Less-Verbindung können Sie die Anmeldeinformationen des Benutzers im Code verbergen (vorausgesetzt, Sie geben ihnen eine mde-Datei, sollten Sie in Ordnung sein). Normalerweise ist die Codierung von Verbindungssträngen keine gute Idee, aber da es sich um eine Inhouse-App handelt, sollte dieser Ansatz in Ordnung sein.

+0

Sehr vielversprechend. Das bringt meine "fast da" -Lösung noch einen Schritt weiter. Ich werde es später testen, und wenn es funktioniert, vergeben Sie die Akzeptanz. Vielen Dank. – BIBD

0

Ich glaube, Sie würden die MS Access-Prozess unter dem Konto starten müssen Sie die Verbindung verwenden möchten. Es gibt verschiedene Tools, mit denen Sie das tun können, z. B. CPAU. Mit diesem Tool können Sie auch das Passwort verschlüsseln.

0

Wir geben hier zu, dass Sie eine ODBC - Verbindung zu Ihrer Datenbank mit integrierter Sicherheit verwenden, so dass Sie keinen Benutzernamen/Kennwort in der Verbindungszeichenfolge schreiben wollen (was meiner Meinung nach der richtige Wahl).

In diesem Fall gibt es glücklicherweise keine Möglichkeit, einen anderen Benutzer bei der Verbindung mit den Daten zu "simulieren". Gib mir zu, dass es eine gewaltige Lücke in der integrierten Sicherheit wäre, wenn man so etwas machen könnte!

Ich habe aus Ihrem vorherigen Beitrag verstanden, dass Benutzer die Daten aktualisieren sollen oder nicht, je nach der verwendeten Client-Schnittstelle. Nach meiner Meinung wäre es die Idee, für jede Tabelle eine verknüpfte 'nicht aktualisierbare' Ansicht zu erstellen. Angenommen, Sie erstellen für jede Tabelle mit der Bezeichnung Table_Blablabla eine Sicht (= Abfrage in Access) mit dem Namen View_Table_Blablabla ...).

Bei der Verwendung 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 im Ereignis form_Open geschehen, indem Sie das Formular Recordsource entweder auf die Tabelle oder die View setzen.

0

@Philippe
Ich gehe davon aus, dass Sie das Wort verwenden zugeben als etwa gleichwertig zu sein verstehen oder vielleicht zustimmen; im Gegensatz zu dem Gegenteil von verweigern.

Ich verstehe die Auswirkungen der Anmeldung aller Benutzer in der Datenbank mit einer ID und einem Kennwort (und sie in der Anwendung gespeichert haben). Das ist für mich ein geringeres Risiko als das Problem, mit dem ich gerade konfrontiert bin.
@off

Einige weitere Hintergrundinformationen zum Problem: Ich habe ODBC-Verbindungen auf jedem der Benutzer-Arbeitsstationen mit Windwos NT-Authentifizierung einrichten. Die meiste Zeit verbinden sich die Benutzer mit einem MDE-Setup, um diese ODBC-Verbindung zu verwenden - in diesem Fall haben sie IMMER die Möglichkeit, Daten hinzuzufügen/zu aktualisieren/zu löschen.

Das Problem kommt, dass einige der Benutzer ausreichend über MS-Access erzogen werden, um eine neue MDB zu erstellen und sie mit dem MS-SQL-Server zu verknüpfen. Sie können dann die Daten direkt in den Tabellen bearbeiten, statt die Anwendung durchzugehen, die eine gewisse Menge an Validierung und Handhaltung durchführt. Und sie tun dies wie, aber manchmal das Durcheinander und verursachen mir Probleme.

0

Was ich zu tun hoffte (was ich gerade experimentiert hatte) war, die Links zur Datenbank für jede Tabelle so zu aktualisieren (Hinweis: Ich habe die ODCB - Verbindung für diesen Test auf SQL Server - Authentifizierung umgestellt, und fügte auch die Konten dem SQL Server hinzu: readonly - die zu irgendwelchen Updates nicht können, und readwrite - das volle Privilegien auf der Tabelle hat).

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

dies verhindert, dass sie von der Bearbeitung, aber ich kann nicht eine spätere Lese-Schreib-

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

Es scheint, dass je nachdem, was die Erlaubnis ich mit der ersten Verbindung zu arbeiten, klebt permenantly. Wenn ich Lese-Schreib-und gehen Sie dann auf Nur-Lesen, der Tisch bleibt mit den Lese-Schreib-Privilegien

0

Warum nicht integrierte/Windows-Sicherheit verwenden. Sie können einer Active Directory-Gruppe die Rechte erteilen, die Sie den Benutzern erteilen möchten, und dann die Benutzerkonten zu dieser Gruppe hinzufügen. Ich glaube, dass Sie sql Server Rollen Funktion zusätzlich dazu verwenden können, um die Funktionalität basierend auf der Client-Anwendung zu begrenzen, die verwendet wird.

+0

Ich habe jetzt integrierte Sicherheitsfunktionen, aber ich möchte verhindern, dass die Benutzer Daten außerhalb meiner App bearbeiten. Irgendeine Idee, wie Sie es begrenzen, indem die Client-App verwendet wird? – BIBD

+0

Sie können eine Anwendungsrolle auf dem SQL-Server erstellen, der Rechte zum Bearbeiten der Daten hat, und diese Rolle dann in Ihrer Anwendung aktivieren. Die Rolle wird mit der gespeicherten Prozedur sp_setapprole aktiviert. Überprüfen Sie http://support.microsoft.com/kb/308312 – Jason