Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Bruce Willis am 06.12.17 - 17:27:24

Titel: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 06.12.17 - 17:27:24
Hallo,

ich habe ein seltsames Problem...

Es gibt eine Datenbank, wo mehrere Users und Gruppen verschiedene ACL Zugriffe (Editor, Autor, Leser...) und Rollen haben.
Die Rollen werden in Autor- und Leser-Feldern gespeichert.
Jetzt muss ich den Zugriff auf einige Dokumente stark beschränken.

Ich lösche jetzt fast alle Autor- und Leser-Felder in diesen Dokumenten (außer der Felder mit den ServerNamen und NotesAdmins), aber die vorherigen Berechtigten können immer noch auf diese Dokumente zugreifen!

Code
	Call doc.RemoveItem("readService")
	Call doc.RemoveItem("readCMDB")
	Call doc.RemoveItem("readAlleDoks")
	Call doc.RemoveItem("editAlleDoks")
        ...
        Call doc.Save(False, True)

Woran kann es liegen bzw. was sollte man noch tun?

Gruß
Leo
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: WildVirus am 06.12.17 - 18:20:50
Hallo Leo,

sicher, dass es keine anderen Autor-/Leserfelder mehr gibt und dass die Werte in den vorhandenen A/L-Feldern korrekt sind ?

Arbeiten die AW auf dem Domino oder auf lokalen Repliken ?

Ist die ACL überall identisch ?

CU
Axel
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 07.12.17 - 11:24:58
Hallo Axel,

Danke für die Vorschläge, all das sieht gut aus. Ich hatte in den fraglichen Dokumenten sogar die Inhalte jedes Feldes (insgesamt etwa 100) überprüft und nichts Verdachtiges gefunden.
Das Problem betrifft aber nur diese Datenbank bzw. alle Repliken. In der Schablone und Testumgebung funktioniert alles richtig...
Die Datenbank ist etwa 20 GB groß, hat etwa 60.000 Dokumente und 24 ACL-Rollen...

Gruß
Leo
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Tode am 07.12.17 - 11:42:21
Lass Dir doch mal alle Autoren und Leser- Felder NACH Deinem Save anzeigen:
Code
			ForAll item In doc.Items
				If item.Isauthors Then
					ForAll strValue In item.values
						If strAuthors = "" then
							strAuthors = item.name & "=" & strValue
						Else
							strAuthors = strAuthors & "," & item.name & "=" & strValue
						End If
					End ForAll
				ElseIf item.Isreaders Then
					ForAll strValue In item.values
						If strReaders = "" then
							strReaders = item.name & "=" & strValue
						Else
							strReaders = strReaders & "," & item.name & "=" & strValue
						End If
					End ForAll
				End If			
			End ForAll
			Msgbox "Authors: " & strAuthors
			Msgbox "Readers: " & strReaders
Steht da wirklich nur das drin, was Du erwarten würdest? Oder ist da was drin, wo Du sagst "Ach mensch... darüber kriegen die die Berechtigung...."
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 08.12.17 - 12:19:45
Hallo Torsten,

vielen Dank für Deinen tollen Script!
Du hast mir sehr geholfen!!!   :knuddel:

Das Problem habe ich gelöst.
Ein schönes Wochenende!

Gruß
Leo
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Tode am 08.12.17 - 12:23:35
UND WIE? Sinn des Forums ist es, dass andere von den Lösungen PROFITIEREN! Bitte teile uns mit, inwieweit Dir das geholfen hat....
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 08.12.17 - 13:05:07
UND WIE?...
Hallo Torsten,

die größte Hilfe deines Scripts war, dass ich die Masken richtig aufräumen konnte. Sie hatten eine ganze Menge der Leser- und Editor-Felder, die kein Mensch (mehr) braucht.

Außerdem hat dein Script schnell bestätigt, dass die Inhalte dieser Felder keine verdächtigen Namen beinhalten. Ich musste also woanders suchen... Und Folgendes habe ich gefunden:

Es gibt die Leser- und Editor-Felder "berechnet beim Anlegen", die der User per Button (bzw. LS) löscht. Damit war alles OK.

Es gibt noch die Leser- und Editor-Felder bloß "berechnet", mit z.B. so einer Formel

@If (cmdb = "Ja";  "[CMDB]" ; "" )

die ich zuerst etwa so geändert hatte:

@If (cmdb = "Ja" & makePrivat = "";  "[CMDB]" ; "" )

Wo makePrivat ein Feld ist, dessen Inhalt der User per Button ändern kann.

Es stellte sich heraus, wenn so ein Feld vorher nicht leer war, dann wurde nach dem Betätigung des Buttons und dem Speichern des Doks der Zugriff so geändert, dass ALLE (!!!) dieses Dok sehen bzw. editieren konnten!!!

Daher habe ich jetzt etwa so geändert und alles funktioniert richtig:
@If (cmdb = "Ja" & makePrivat = "";  "[CMDB]" ; "NotesAdmins" )

Unsere Gruppe NotesAdmins soll sowieso alle Doks in dieser DB editieren können.

Gruß
Leo
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Tode am 08.12.17 - 13:09:16
ok. Danke!
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 08.12.17 - 13:49:49
Ich würde das Ganze (bzw. diesen Notes Bug?) so beschreiben:

Wenn eine Rolle in ein Leser- oder Autor-Feld eingetragen wurde, darf danach dieses Feld nicht leer werden, da sonnst auf dieses Dokument jeder zugreifen darf.
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: WildVirus am 08.12.17 - 14:29:46
It's not a bug, it's a feature.

Aus der Notes 6-Hilfe (http://82.135.123.244/help/help6_designer.nsf/57b669b13aec7ba780256c250050b13e/e829c36c4b7f1a0a80256c4700389ac1?OpenDocument):

Alle Benutzer mit Editorzugriff (oder höher) auf die Datenbank können ein Dokument lesen und bearbeiten, wenn eine der folgenden Bedingungen gegeben ist:


Und ein leeres Leserfeld steht für "keine Einschränkung".

Verhalten von Notes daher richtig, kommt aber häufiger vor, vorallem wenn sich Entwickler nicht genug mit dem Thema beschäftigen.

Übrigens, wenn Ihr mal den Gruppennamen Eurer Admins ändert, fliegt Euch die Rechteverwaltung wieder um die Ohren.

Ich sage immer, in Leser-/Autorenfelder nur echte Namen (also kein [CN]-Format) oder Rollen aus der ACL. Gruppennamen oder *Einträge sind für mich inakzeptabel.

Ich hatte vor vielen Jahren mal mit einer (gekauften) DB zu kämpfen,  die haben Autorenfelder im [CN]-Format gefüllt. Je nach Lust und Laune vom  Domino in Verbindung mit dem Browser hat es mal geklappt, mal nicht. War ein "schöner" Fehler. Reproduzierbar aber nicht in jedem Dokument auftretend.

Nur als kleine Ergänzung
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Tode am 08.12.17 - 14:32:29
Sorry, aber das ist kein Bug, sondern normal:

1. Author- Zugriff auf ein Dokument hat jeder, der in einem der Autoren- Felder genannt ist. Keine Autoren = Keine Autor- Zugriffe

2. Leser- Zugriff auf ein Dokument hat jeder, der in einem Leser- oder Autoren- Feld genannt ist. ACHTUNG: Keine Leser (nur die in Leserfeldern zählen) = JEDER hat Leser- Zugriff !!!!!!!

Das ist schon immer so und wird sich auch niemals ändern.
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 08.12.17 - 15:36:55
It's not a bug, it's a feature.

...
Und ein leeres Leserfeld steht für "keine Einschränkung".

Verhalten von Notes daher richtig, kommt aber häufiger vor, vorallem wenn sich Entwickler nicht genug mit dem Thema beschäftigen....

Nur als kleine Ergänzung


Danke für die Ergänzung.
Der widerspricht allerdings die Tatsache, dass so ein geschützte Dok in meiner Datenbank viele leere Leser- und Autor-Felder hat und trotzdem für fast alle User unsichtbar ist. Siehe Screenshots anbei.

Oder hab ich was falsch verstanden?

Gruß
Leo
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 08.12.17 - 15:56:40
... Ich sage immer, in Leser-/Autorenfelder nur echte Namen (also kein [CN]-Format) oder Rollen aus der ACL. Gruppennamen oder *Einträge sind für mich inakzeptabel...

Vielen Dank!
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Tode am 08.12.17 - 16:39:00
Es ist mindestens EIN Leserfeld gesetzt. In deinem Beispiel sehen also nur die ## DB Admins die Dokumente UND die Heike Schlu sowie die LocalDomainServers.
Ich gehe mal schwer davon aus, dass alle Felder mit "dsp_" eh nur "Computed for Display" sind und damit nicht relevant.
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 08.12.17 - 16:50:36
Es ist mindestens EIN Leserfeld gesetzt...
Eure Aussage doch war, dass KEINE leeren Felder sein sollten, da sonst jeder zugriefen kann.
Code
Und ein leeres Leserfeld steht für "keine Einschränkung". 
Oder hab ich falsch verstanden?
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: TRO am 08.12.17 - 17:28:44
siehe hier https://atnotes.de/index.php/topic,51224.0.html (https://atnotes.de/index.php/topic,51224.0.html) und dort insbesondere Regel #8

hth
Thomas
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 09.12.17 - 15:02:44
siehe hier https://atnotes.de/index.php/topic,51224.0.html (https://atnotes.de/index.php/topic,51224.0.html) und dort insbesondere Regel #8

hth
Thomas

Dort steht:

Zitat
Da die anderen beiden Felder aber nicht leer sind, ändert das hinzufügen des dritten Feldes ohne Eintrag nichts an den Zugriffsrechten. Das Dokument kann immer noch nur von unserem Benutzer Amadeus Tester, bzw. von allen denen die Rolle "[Administrator]" in der Datenbank zugewiesen wurde gelesen werden.

So muss es sein, und dies erwartet auch jeder.
Aber meine Datenbank (siehe oben) zeigt, dass es nicht immer so ist!
Und was dabei zu beachten ist, habe ich oben beschrieben.

Und nochmals das Problem mit anderen Worten:

1. Es gibt ein Dok mit mehreren Leser-Feldern, einige davon sind leer.
Nur die zugelassenen User haben den Zugriff.

2. Benutzer startet eine LS Aktion, als Ergebniss hat das Dok immer noch mehrere Leser-Felder, einige davon sind leer.
Und alle (auch nicht zugelassene) User haben den Zugriff!
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: jBubbleBoy am 09.12.17 - 16:31:14
2. Benutzer startet eine LS Aktion, als Ergebniss hat das Dok immer noch mehrere Leser-Felder, einige davon sind leer.
Und alle (auch nicht zugelassene) User haben den Zugriff!
Das glaube ich nicht, sobald ein Leserfeld einen Wert hat zieht auch der Doc-Zugriff.
Ich vermute das dein LS-Agent aus den Leserfelder normale oder Namensfelder macht.
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 09.12.17 - 16:48:42
Das glaube ich nicht...
Hatte ich auch nicht geglaubt.
Daher sage ich doch: Notes Bug.

Ich vermute das dein LS-Agent aus den Leserfelder normale oder Namensfelder macht.
Falsche Vermutung.
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: TRO am 09.12.17 - 17:24:57
aber du berücksichtigst auch, dass Autor-Felder auch Lesezugriff geben (Regel #9).... und in deinem Screenshot zu den Autorfeldern finde ich da Einträge wie "vs-all" und "fibu-all"
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 09.12.17 - 17:37:50
aber du berücksichtigst auch, dass Autor-Felder auch Lesezugriff geben (Regel #9).... und in deinem Screenshot zu den Autorfeldern finde ich da Einträge wie "vs-all" und "fibu-all"

Ja, klar.
Die beiden von dir erwähnten Gruppen beinhalten keineswegs die ganze Firma.
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Tode am 10.12.17 - 17:56:31
Wenn Notes in DIESEM Bereich einen Bug hätte, dann würdest Du den Aufschrei darüber noch auf dem Mond hören!

Ich mache jetzt seit 1995 Notes, und das hat schon immer genau so funktioniert.
Irgend etwas machst Du falsch, da wette ich drauf!
Titel: Re: Zugriff auf eine Datenbank beschränken
Beitrag von: Bruce Willis am 10.12.17 - 18:10:31
Wenn Notes in DIESEM Bereich einen Bug hätte, dann würdest Du den Aufschrei darüber noch auf dem Mond hören!..
Irgend etwas machst Du falsch, da wette ich drauf!
Du hast mir mit deinem Script geholfen, das Problem zu lösen, wofür ich Dir dankbar bin.
Wie genau ich das Problem löste, und wie genau dieses aussah, steht in Details oben.
Wir brauchen nicht weiter zu diskutieren. Zumindest ich nicht.
Gruß
Leo  :love: