Benutzer mit den meisten Antworten
Access 2007, User-Rechte via SQL Server 2005?

Frage
-
Ich habe eine Access-Applikation die alle Tabellen via Linked-Tables von einem SQL Server 2005 bezieht. Nun möchte ich aber nicht, dass jeder Anwender meiner Access-Software die selben Rechte hat (bspw. sollten einige Benutzer nur lesend zugreifen dürfen).
Welche Möglichkeiten habe ich? Access 2007 unterstützt ja selbst keine user-based-Rechte mehr.
Da ich annehme, dass die einzige Möglichkeit ist, dass ic hdie Rechte via SQL Server 2005 festsetze, welche Aktionen muss ich in Access tätigen, damit der Benutzer beim Start der Applikation nur eine Login-Form (kann ich ja via einer ganz normalen Form erledigen) sieht und diese Daten dann erst benutzt werden um die Verbindung der LinkedTables herzustellen?
Ich hoffe Sie können mir helfen, ich bin gerade etwas verzweifelt : /
Mit freunldichen Grüßen,
Dominik R- Verschoben Kay GizaMicrosoft employee Freitag, 27. August 2010 05:56 (aus:Microsoft Office System)
Antworten
-
Sub ReLinkTables(strConnect As String) On Error GoTo MyError Dim db As DAO.Database Dim i As Integer Set db = CurrentDB() For i = 0 To db.TableDefs.Count - 1 If db.TableDefs(i).Connect <> "" Then db.TableDefs(i).Connect = strConnect db.TableDefs(i).RefreshLink End If Next i MyExit: Exit Sub MyError: MsgBox "Bei der Installation ist eine Ausnahme aufgetreten. ", 16, "Ausnahme" Resume MyExit End Sub Dim strConnect As String strConnect = "ODBC;Driver={SQL Server};" & _ "Server=DeinSQL2005Server;" & _ "Database=DeineDB;" & _ "UID=" & Me!fldUserID.Value & _ "PWD=" & Me!fldPassword.Value & ";" Call ReLinkTables(strConnect)
- Bearbeitet Peter DoeringMVP, Moderator Mittwoch, 22. September 2010 01:08 Sorry fuer das Mehrfachposting, es gibt wohl Probleme mit Webinterface sowie NNTP Bridge.
- Als Antwort markiert Peter DoeringMVP, Moderator Dienstag, 5. Oktober 2010 20:58
-
Hallo Domink,
zunächst einmal ist der Gedanke, für jeden User ein eigenes Account anzulegen, der (halb) richtige Weg. Ev. wäre es sinnvoller, mit ACL-Gruppen (Windows-Gruppen) die Verwaltung zu vereinfachen
Der nächste Schritt wäre dann, zu überprüfen, auf welche Objekte der Benutzer überhaupt einen Zugriff hat. Wenn Du z. B. alle Tables (U) und / oder Views (V) aus der SQL Datenbank verlinken möchtest, kannst Du über eine Abfrage auf sys.sysobjects eine Liste aller Objekte erhalten:
SELECT id, name FROM sys.sysobjects WHERE type IN ('U', 'V')
Diese Liste kannst Du dann verwenden, um - wie von Mark bereits weiter oben als Script ausgeführt - die Tabellen zu linken. Wenn Du "Windows Sicherheit" verwendest, kannst Du dir auch den mühsamen Anmeldedialog und das ganze Geraffel sparen (ist eh' die sicherere Variante!)
Wenn Windows-Sicherheit verwendet wird, dann erstelle in DeinerApplikation eine Pass Through Abfrage mit dem obigen Code. Diese Abfrage führst Du einfach beim Start aus und dann linkst Du die Tabellen...
HTH ;-)
Uwe Ricken
Microsoft Certified Database Administrator SQL Server 2005
db Berater GmbH
http://www-db-berater.de- Als Antwort markiert Peter DoeringMVP, Moderator Dienstag, 5. Oktober 2010 20:58
Alle Antworten
-
Ich habe nun erstmal folgendes kreiert:
1x Login pro Benutzer
1x DB-User pro Benutzer
Alle Rollen als DB-Rollen angelegt
Im Schema dbo habe ich den DB-Rollen die jeweiligen Rechte zugewiesen, evtl. später auch noch Per-Table-Rechte
Ich hoffe, das habe ich soweit richtig gemacht.
Meine Frage bleibt also, wie ich aus Access heraus den User für das Verlinken der Tabellen erst beim Öffnen der DB festlegen kann.
Beste Grüße,
Dominik R -
Hallo,
Beispiel in Anlehnung an www.donkarl.com?FAQ3.1
Sub ReLinkTables(strConnect As String)
On Error GoTo MyError
Dim db As DAO.Database
Dim i As Integer
Set db = CurrentDB()
For i = 0 To db.TableDefs.Count - 1
If db.TableDefs(i).Connect <> "" Then
db.TableDefs(i).Connect = strConnect
db.TableDefs(i).RefreshLink
End If
Next i
MyExit:
Exit Sub
MyError:
MsgBox "Bei der Installation ist eine Ausnahme aufgetreten. ", 16, "Ausnahme"
Resume MyExit
End Sub
Aufzurufen nach Eingabe der Logindaten, wobei die Steuerelementnamen an dein Login-Formular angepasst werden muessen:
Dim strConnect As String
strConnect = "ODBC;Driver={SQL Server};" & _
"Server=DeinSQL2005Server;" & _
"Database=DeineDB;" & _
"UID=" & Me!fldUserID.Value & _
"PWD=" & Me!fldPassword.Value & ";"
Call ReLinkTables(strConnect)
(Luftcode)
Gruss - Peter
- Bearbeitet Peter DoeringMVP, Moderator Mittwoch, 22. September 2010 00:30 Formatierung korrigiert.
-
Sub ReLinkTables(strConnect As String) On Error GoTo MyError Dim db As DAO.Database Dim i As Integer Set db = CurrentDB() For i = 0 To db.TableDefs.Count - 1 If db.TableDefs(i).Connect <> "" Then db.TableDefs(i).Connect = strConnect db.TableDefs(i).RefreshLink End If Next i MyExit: Exit Sub MyError: MsgBox "Bei der Installation ist eine Ausnahme aufgetreten. ", 16, "Ausnahme" Resume MyExit End Sub Dim strConnect As String strConnect = "ODBC;Driver={SQL Server};" & _ "Server=DeinSQL2005Server;" & _ "Database=DeineDB;" & _ "UID=" & Me!fldUserID.Value & _ "PWD=" & Me!fldPassword.Value & ";" Call ReLinkTables(strConnect)
- Bearbeitet Peter DoeringMVP, Moderator Mittwoch, 22. September 2010 01:08 Sorry fuer das Mehrfachposting, es gibt wohl Probleme mit Webinterface sowie NNTP Bridge.
- Als Antwort markiert Peter DoeringMVP, Moderator Dienstag, 5. Oktober 2010 20:58
-
Hallo Domink,
zunächst einmal ist der Gedanke, für jeden User ein eigenes Account anzulegen, der (halb) richtige Weg. Ev. wäre es sinnvoller, mit ACL-Gruppen (Windows-Gruppen) die Verwaltung zu vereinfachen
Der nächste Schritt wäre dann, zu überprüfen, auf welche Objekte der Benutzer überhaupt einen Zugriff hat. Wenn Du z. B. alle Tables (U) und / oder Views (V) aus der SQL Datenbank verlinken möchtest, kannst Du über eine Abfrage auf sys.sysobjects eine Liste aller Objekte erhalten:
SELECT id, name FROM sys.sysobjects WHERE type IN ('U', 'V')
Diese Liste kannst Du dann verwenden, um - wie von Mark bereits weiter oben als Script ausgeführt - die Tabellen zu linken. Wenn Du "Windows Sicherheit" verwendest, kannst Du dir auch den mühsamen Anmeldedialog und das ganze Geraffel sparen (ist eh' die sicherere Variante!)
Wenn Windows-Sicherheit verwendet wird, dann erstelle in DeinerApplikation eine Pass Through Abfrage mit dem obigen Code. Diese Abfrage führst Du einfach beim Start aus und dann linkst Du die Tabellen...
HTH ;-)
Uwe Ricken
Microsoft Certified Database Administrator SQL Server 2005
db Berater GmbH
http://www-db-berater.de- Als Antwort markiert Peter DoeringMVP, Moderator Dienstag, 5. Oktober 2010 20:58