Datenbank vor Fremdzugriff/Änderungen schützen

Moderator: ModerationP

Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 10. Sep 2019, 09:09

Hallo Ihr Lieben!

Ich habe schon oft von euch so wertvolle Hilfe/Tipps erhalten, dass ich hoffe hier eine Lösung für mein Problem zu finden.
Ich habe eine Projektdatenbank erstellt, Ebenfalls vorhanden eine Benutzerberechtigung:
Diese liest den Mitarbeiter lt. PC aus und vergleicht diesen mit den Rechten und ob er überhaupt eingetragen ist in der Benutzertabelle

Jetzt möchte ich gerne meine Datenbank vor Fremdzugriff schützen, jedoch habe ich davon leider noch wenig Ahnung.
Daher wird momentan die Datenbank (.accde Format) gespeichert, in ein Frontend/Backend aufgeteilt (Backend liegt am Server), und das Frontend in eine .accdr Version umgeschrieben und verteilt.

Möchte nun aber auch verhindern, dass jemand am Backend in den Tabellen Änderungen vornehmen kann bzw. Daten auslesen/exportieren kann.
Und das das Frontend nur in der Runtime Version gestartet werden kann (da das umändern der Endung ja wieder die verknüpften Tabellen anzeigen würde)

Habe nun zwar gelesen, dass ich ein Passwort hinterlegen kann und die Tabellen neu verknüpfen muss, aber ist das wirklich dann sicher??
Habe ebenfalls auf meiner Suche in Google folgendes gefunden: https://www.xing.com/communities/posts/access-tabellen-schuetzen-1009367920

Ich habe eine dynamische Verbindung zwischen Backend und Frontend erstellt. Die Tabellen aus dem BE werden beim Start des Frontends mittels VBA verknüpft und beim schließen wieder getrennt. Ohne aktive Makros gibt es also keine Daten und mit aktiven Makros kann ich im Autostart sicherstellen, dass das Frontend als Runtime genutzt wird und die Tabellen somit nicht zugänglich sind.


Würde das ja gerne umsetzten, weiß aber noch nicht genau wie? Was habt ihr den für Vorschläge für mich?

Sorry für den langen Text!!
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 10. Sep 2019, 09:37

Hey,

vorweg: Wenn du es wirklich wirklich sicher haben willst ist Access als Backend nichts, dann musst du schon ein richtiges System verwenden.

Aber ansonsten:

Password für das Backend, das bleibt accdb.

Für Frontend: Jeder Benutzer bekommt sein eigenes als accde. In accdr umbenennen halte ich dann für überflüssig. Damit kommen die Leute schonmal nicht mehr so leicht an den VBA Code. Dann kannst du noch die Tabellen ausblenden, die Shift-Taste sperren, Ribbons ausblenden usw. Dafür nutze ich folgenden Code, der alles abschaltet, wenn es eine accde ist. Dies habe ich auf dem Startformular, wird also immer ausgeführt, wenn die Anwendung gestartet wird:
Code: Alles auswählen
If IsACCDE Then

    DoCmd.ShowToolbar "Ribbon", acToolbarNo
    CurrentDbC.Properties("ShowDocumentTabs") = False
    CurrentDbC.Properties("AllowSpecialKeys") = False
    CurrentDbC.Properties("AllowDatasheetSchema") = False
    CurrentDbC.Properties("StartUpShowDBWindow") = False
    CurrentDbC.Properties("DesignWithData") = False
    CurrentDbC.Properties("AllowFullMenus") = False
    CurrentDbC.Properties("AllowBypassKey") = False
   
Else

    DoCmd.ShowToolbar "Ribbon", acToolbarYes
    CurrentDbC.Properties("ShowDocumentTabs") = True
    CurrentDbC.Properties("AllowSpecialKeys") = True
    CurrentDbC.Properties("AllowDatasheetSchema") = True
    CurrentDbC.Properties("StartUpShowDBWindow") = True
    CurrentDbC.Properties("DesignWithData") = True
    CurrentDbC.Properties("AllowFullMenus") = True
    CurrentDbC.Properties("AllowBypassKey") = True

End If


Dazu die Funktion, um zu prüfen ob accde:

Code: Alles auswählen
Public Function IsACCDE() As Boolean
On Error GoTo Err_IsACCDE
Dim StrProp As String

On Error Resume Next
    StrProp = CurrentDb.Properties("MDE")
    IsACCDE = (Err.Number = 0) And (StrProp = "T") 'true  bei ACCDE
Exit_IsACCDE:
    Resume Next
    Exit Function
Err_IsACCDE:
    MsgBox Err.description
    Resume Exit_IsACCDE
End Function


Das habe ich von folgender Seite:
https://access-programmers.co.uk/forums/showpost.php?p=1173371&postcount=12

Vielleicht reicht das ja.

VG
WM
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 536
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 11. Sep 2019, 14:45

Hallo!

Password für das Backend, das bleibt accdb.


Bei mir ist das bereits .MdB !?

Gut oder schlecht? Hab das vor 2 Jahren mal aufgeteilt, weiß aber leider gar nicht mehr den Hintergrund warum so...
Zuletzt geändert von Prinzessin87 am 11. Sep 2019, 14:53, insgesamt 2-mal geändert.
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 11. Sep 2019, 14:48

Hey,

MDB ist das alte Format, accdb das neue. Solange du keine neuen Datentypen benötigst kannst du auch beim Alten bleiben. Kenne sonst keinen wirklichen Unterscheid für das Backend.

VG
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 536
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 11. Sep 2019, 14:55

Kann ich sonst einfach ins Backend gehen und speichern unter .accde auswählen oder wäre das verkehrt?

Habe eine Fehlermeldung bei "CurrentDbC" --> Variable nicht definiert.
Wie definiere ich diese richtig?
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Wurstmann » 11. Sep 2019, 14:59

Hey,

ja, das kannst du machen, dann musst du alle Tabellen neu Verknüpfen.

Currentdbc ist eine Funktion, hatte ich vergessen. Folgendes noch hinzufügen:

Ganz nach unten Scrollen und die letzte Function in deine DB kopieren.

http://www.access-im-unternehmen.de/417

VG
Wurstmann
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 536
Registriert: 26. Jun 2013, 09:11

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 12. Sep 2019, 09:17

Habe die Funktion eingefügt, leider immer noch eine Fehlermeldung... was mach ich falsch?

Habe die Funktion in ein Modul kopiert, ist das so richtig?

Fehlermeldung: Variable nicht definiert bei "mCurrentDB ="

Code: Alles auswählen
Dim mDB As DAO.Database
Public Property Get CurrentDBC()
     If mDB Is Nothing Then
         Set mCurrentDB = CurrentDb
     End If
     CurrentDBC = mDB
End Property

Vielleicht könntest du mir als Kommentar dazuschreiben was in welcher Zeile abgefragt wird um es besser zu verstehen

Ganz liebe Grüße
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon mmarkus » 12. Sep 2019, 09:48

Prinzessin87 hat geschrieben:Fehlermeldung: Variable nicht definiert bei "mCurrentDB ="


Bevor man eine Variable benützt, sollte man sie auch deklarieren.
Du solltest also entweder mCurrentDB, oder mDB nutzen.

Solche Probleme bekommt man, wenn man statt das eigene Hirn zu nutzen, nur Code kopiert ohne ihn zu verstehen.
Da ist man auch nach 5 Jahren noch ein unfähiger Anfänger.
ms access what else
mmarkus
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1533
Registriert: 16. Apr 2012, 16:07
Wohnort: Oberösterreich

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 12. Sep 2019, 09:54

Code: Alles auswählen
Bevor man eine Variable benützt, sollte man sie auch deklarieren.


Soweit habe ich das schon verstanden, ich wusste nur nicht als was?
Da ja bereits mDB deklariert wurde in den vorgeschlagenen Code

Kann ich beides als DAO deklarieren, kenn mich damit leider gar nicht aus...
Daher meine Frage ob mich wer aufklären kann was genau abgefragt wird um es besser zu verstehen, ich habe nicht den Wunsch alles zu kopieren und es nicht zu verstehen!
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Beaker s.a. » 13. Sep 2019, 17:05

@Prinzessin
Keine Ahnung was du das abgeschrieben hast, aber so sieht das im Original aus:
Code: Alles auswählen
Dim m_DB As DAO.Database
Public Property Get CurrentDBC() As DAO.Database

     If m_DB Is Nothing Then
         Set m_DB = CurrentDb
     End If
     Set CurrentDBC = m_DB

End Property

Zitat aus der Originalquelle:
Why is this the "CurrentDbC" property proc best? Because it is the
' most generic and handles the most issues and problems. After all, a
' global can be erased if someone hits the code reset button in VBE.
' DBEngine(0)(0) might not be the current db. CurrentDb is expensive if
' called repeatedly. And so on.


gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 703
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 16. Sep 2019, 13:48

Vielen Dank ekkehard!

Hab selbst auch etwas getüftelt, bzw direkt in der Beispieldatenbank den Code angesehen.

Also folgendes ich hatte ihn so geändert:
Code: Alles auswählen
Dim mCurrentDB As DAO.Database
Public Property Get CurrentDBC()
    If mCurrentDB Is Nothing Then
        Set mCurrentDB = CurrentDb
    End If
    CurrentDBC = mCurrentDB
End Property

Leider Fehlermeldung (Laufzeitfehler 438) bei allen Zeilen ab --> CurrentDBC.Properties("ShowDocumentTabs") = True

Bei deiner Lösung:
Code: Alles auswählen
Dim m_DB As DAO.Database
Public Property Get CurrentDBC() As DAO.Database
     If m_DB Is Nothing Then
         Set m_DB = CurrentDb
     End If
     Set CurrentDBC = m_DB
End Property

Fehlermeldung (Laufzeitfehler 3270) nur bei --> CurrentDBC.Properties("AllowBypassKey") = True

Hab jetzt etwas in Google geschaut da find ich immer was mit Eigenschaft muss erstellt werden.
Pfad zu DonKarl gefunden: http://www.donkarl.com/ (1.8.Verhindern der Shift-Taste beim Start)

Jetzt ist die Frage wie deklarier ich diese Eigenschaft richtig?
Ich selbst arbeite ja immer in der .accdb Version weiter

Habe das ganze mal ausprobiert ohne die Zeilen mit der Shifttaste, wird alles sauber weggeblendet jedoch gibt's hier noch 2 Probleme
1.) der Navigationsbereich bleibt?
2.) durch das ausblenden geht auch das Menü für das "Drucken von Berichtsvorschau" verloren? Kann ich das beim aufrufen wieder aktivieren?

weitere Frage:
Shift Taste ausblenden wär toll aber überall lese ich, man soll sie auch versteckt wieder aktivieren können
Wie aktiviere ich sie den dann richtig? reicht hier wieder die Zeile --> CurrentDBC.Properties("AllowBypassKey") = True

Steh hier total auf dem Schlauch und weiß absolut nicht mehr nach was ich suchen soll im Netz um auf einen richtige Lösung zu kommen
GLG Christina
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Beaker s.a. » 16. Sep 2019, 15:45

Hallo Christina,
Das Datenbankobjekt bietet eine Methode "CreateProperty" an.
gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 703
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Prinzessin87 » 17. Sep 2019, 09:03

Das Datenbankobjekt bietet eine Methode "CreateProperty" an.

Sorry aber das hilft mir jetzt nichts :/

Dafür muss ich ja alles anders schreiben oder? Ich kenn mich leider damit nicht aus daher meine vielen Fragen...
Möchte doch nur das die Datenbank vor Fremdzugriffen geschützt wird.
GLG Prinzessin87
------------------------------------------------------------
Wichtig ist, dass man nicht aufhört zu fragen.
(Albert Einstein, 1879-1955)
Prinzessin87
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 211
Registriert: 01. Jul 2016, 17:31

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Gast » 17. Sep 2019, 09:42

@ [quote="Wurstmann"][/quote]

Was hast du den noch zusätzlich in deinem Code für die Sperrung der Shift Taste?
Habe hier ständig die Fehlermeldung 3270

Nach langem suchen, habe ich herausgefunden das wenn die Eigenschaft nicht gefunden wird dieses angefügt werden muss, jedoch weis ich nicht wie !?
Gast
 

Re: Datenbank vor Fremdzugriff/Änderungen schützen

Beitragvon Beaker s.a. » 17. Sep 2019, 12:13

Hallo,
Hier das Beispiel aus der OH
Code: Alles auswählen
Sub CreatePropertyX()

   Dim dbsNorthwind As Database
   Dim prpLoop As Property

   Set dbsNorthwind = OpenDatabase("Northwind.mdb")

   ' Set the Archive property to True.
   SetProperty dbsNorthwind, "Archive", True
   
   With dbsNorthwind
      Debug.Print "Properties of " & .Name
     
      ' Enumerate Properties collection of the Northwind
      ' database.
      For Each prpLoop In .Properties
         If prpLoop <> "" Then Debug.Print "  " & _
            prpLoop.Name & " = " & prpLoop
      Next prpLoop

      ' Delete the new property since this is a
      ' demonstration.
      .Properties.Delete "Archive"

      .Close
   End With

End Sub

Sub SetProperty(dbsTemp As Database, strName As String, _
   booTemp As Boolean)

   Dim prpNew As Property
   Dim errLoop As Error

   ' Attempt to set the specified property.
   On Error GoTo Err_Property
   dbsTemp.Properties("strName") = booTemp
   On Error GoTo 0

   Exit Sub

Err_Property:

   ' Error 3270 means that the property was not found.
   If DBEngine.Errors(0).Number = 3270 Then
      ' Create property, set its value, and append it to the
      ' Properties collection.
      Set prpNew = dbsTemp.CreateProperty(strName, _
         dbBoolean, booTemp)
      dbsTemp.Properties.Append prpNew
      Resume Next
   Else
      ' If different error has occurred, display message.
      For Each errLoop In DBEngine.Errors
         MsgBox "Error number: " & errLoop.Number & vbCr & _
            errLoop.Description
      Next errLoop
      End
   End If

End Sub


gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 703
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste