Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datensatz mit STRG+ENTF löschen verhindern?

Begonnen von cyberchris, August 28, 2014, 15:47:01

⏪ vorheriges - nächstes ⏩

cyberchris

Hallo zusammenn,

ich habe in einer Datenbank eine Sicherheitslücke entdeckt.
Es ist mit STRG u. ENT, bzw. - möglich Datensätze zu löschen.

Nun habe ich in den Datenbankeinstellungen die Funktion "Access-Spezialtasten" verwenden rausgenommen und im entsprechenden Formular in den Eigenschaften "Löschen" auf Nein gestellt.

Leider ist es immer noch möglich mit STRG u. - den Datensatz zu löschen!
Es ist auch keine Prozedur mit Key Down o. ä. drin.

Ich verstehe das nicht...kann mir da jemand helfen?

Vielen Dank
Gruß Christoph

DF6GL

Hallo

"...im entsprechenden Formular in den Eigenschaften "Löschen (zulassen)" auf Nein gestellt."

Vermutlich hast Du das nicht gemacht...

Wenn "Löschen zulassen" auf Nein steht, können im Formular keine Datensätze mehr gelöscht werden, egal mit welcher Taste(nkombination) das versucht wird.

cyberchris

Hallo,

danke für deinen Hinweis, aber das hatte ich doch geschrieben, dass ich unter Eigenschaften "Löschen zulassen" auf Nein gestellt habe.
Nur geht das trotzdem...

Ich kann gerne einen Screenshot machen:-)

Gruß Christoph

MzKlMu

Hallo,
habe das gerade mal getestet, wenn Löschen zulassen auf nein steht, kann ich keine DS löschen, egal mit welcher Methode. Es kommt eine Statusmeldung "Datensätze können in diesem Formular nicht gelöscht werden".

Zeige mal einen Screenshot.

Könnte es sein, dass diese Eigenschaft beim Laden das Formular auf Ja gesetzt wird (per VBA) ?
Gruß Klaus

cyberchris

Hallo,

ich habe die DB nur übernommen und daher tue ich mir hier schwer.
Anbei 2 Screenshots (1x bzgl. Einstellung, 1x bzgl. Ereignisprozeduren)

Weiterhin habe ich mal die Prozedur beim Laden angehängt
Form_Current ist leider sehr lang...

gruß Christoph


MaggieMay

Hallo,
ZitatForm_Current ist leider sehr lang...
dann wird dort vermutlich wohl einiges passieren, was für den unerwünschten Zustand verantwortlich ist...
Freundliche Grüße
MaggieMay

cyberchris

Hallo,

also irgendwo hat er diese Eigenschaft dann doch wohl wieder aktiviert.
Habe die Eigenschaft in einer MSGBOX ausgegeben und festgestellt.

Gelöst habe ich das so, dass ich am Ende von Form_Current folgendes gesetzt habe:
Form_xxx.AllowDeletions = False

Gruß Christoph

MzKlMu

Hallo,
Du kannst doch einfach mal im kompletten Code nach AllowDeletions suchen und die Zeile dann löschen.

Der VBA Editor bietet eine sehr gute Möglichkeit um im kompletten Code einer DB zu suchen.
Gruß Klaus

cyberchris

Hallo,

das habe ich eigentlich gemacht und nichts gefunden.
Die DB habe ich nicht programmiert.
Es ist so, dass das Formular zur Neueingabe eines Datensatzes dient und gleichzeitig einen bestehenden Datensatz bearbeiten kann - je nachdem wo man dies aufruft.
Beim Bearbeiten eines Datensatzes hat das schon vor dem o. g. Code funktioniert. Nur bei Neueingabe konnte man weiterhin löschen. Bei Neuanlage wird bei öffnen sofort ein Datensatz erzeugt, den man dann befüllen kann.

Gruß Christoph

MaggieMay

Hallo,

da du uns den Code nicht zeigst, der im Current-Ereignis ausgeführt wird und wir auch nicht wissen, wie das Formular geöffnet wird, kann man nur Mutmaßungen anstellen.
So könnte bspw. folgendes zutreffen:
Zitat von: Access-HilfeAnmerkung 
Wenn das Argument Datenmodus der ÖffnenFormular-Aktion eingestellt wird, überschreibt Microsoft Access eine Reihe von Formulareigenschaften. Wenn das Argument Datenmodus der ÖffnenFormular-Aktion auf Bearbeiten festgelegt ist, öffnet Microsoft Access das Formular mit den folgenden Eigenschafteneinstellungen:
AllowEdits - Ja
AllowDeletions - Ja
AllowAdditions - Ja
DataEntry - Nein
Freundliche Grüße
MaggieMay

cyberchris

Ich schaue mal nach, wie das Formular geöffnet wird.
Bei Veröffentlichung von kompletten Codes bin ich vorsichtig, da dies eigentlich Betriebseigentum ist...

Interessant ist aber deine Anmerkung!

Wo es bereits funktioniert hatte (wie oben erwähnt) wird das Formular so gestartet:
...
Dim stDocName As String
Dim stLinkCriteria
stDocName = "Bearbeitung"
KritB = "[ID] = " & Me![id]
DoCmd.OpenForm stDocName, , , KritB
...

Bei diesem öffnen war noch bis zuletzt das Problem:
...
Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = "IsNull([Datensätze]![ID])"
stDocName = "Bearbeitung"
DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormAdd
...

Gruß Christoph

MaggieMay

Nun, ein simpler Test belegt schnell, dass auch mit "acFormAdd" die o.g. Eigenschaften verändert werden. Dir bleibt also nichts anderes übrig, als AllowDeletions direkt nach dem Öffnen wieder auf False zu setzen.
Freundliche Grüße
MaggieMay