none
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

    Montag, 7. September 2009 12:43

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) 

    Mittwoch, 22. September 2010 01:00
    Moderator
  • 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
    Mittwoch, 22. September 2010 07:10

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

    Montag, 7. September 2009 13:18
  • 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



    Mittwoch, 22. September 2010 00:29
    Moderator
  • 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) 

    Mittwoch, 22. September 2010 01:00
    Moderator
  • 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
    Mittwoch, 22. September 2010 07:10