Tasten unterdrücken, umleiten oder sperren

  • Erstmal was zum Sinn und Zweck der ganzen Sache:


    Ich möchte unterbinden, dass Personen, die die Datenbank benutzen Dokumente unnötig einfach kopieren können. Z.B. per "Druck"-Taste. Dass es keinen 100% Schutz vor dem Kopieren gibt ist mir völlig klar, ich möchte aber die einfachste Variante (eben die Drucktaste) unterbinden.


    In den ACLs der Datenbank ist bereits festgelegt, dass Dokumente weder kopiert noch gedruckt werden dürfen.


    Eine Möglichkeit dies zu lösen wäre beim Laden der Defaultansicht mit Hilfe der Initialize-Methode ein externes Programm zu starten, was eben die Tasten unterdrückt, bzw. umleitet. Beim beenden dann über Terminate wird ein Taskkill durchgeführt. Allerdings hängt dann bei unsauberem Beenden das Programm noch im Windows rum.


    Diese Art und Weise dies zu lösen gefällt mir nicht wirklich, deshalb möchte ich wissen, ob es einen anderen Weg gibt.


    Ich denke da an die WinApi oder ähnliches.


    Hat jemand Vorschläge oder Anmerkungen?


    Danke

  • Ich glaube das du da wirklich nur auf OS ebene was machen kannst, wie z.B. software überwachung. Es gibt software die dieses erlaubt. Das einfache abfangen von tasten ist zwar möglich, und ist in dieses forum auch von diali schon mal angesprochen worden, aber würde hier doch deutlich im nachteil des user interface gehen. Es würde schlagartig langsamer werden. Und jemand der es wirklich möchte würde dann selber eine software installieren die screen captures machen kann, und damit die druck taste einfach umgehen können.. Oder ein digital kamera nehmen, und es damit ablichten. Ich denke das dieses wirklich wenig sinn machen würde.


    Ronka

  • gebe ronka da völlig recht. ihr solltet wirklich nochmal über den sinn und zweck nachdenken. ihr wollt den anwender informationen geben aber eigentlich nicht so richtig.


    als nächstes nehmt ihr den usern bleistift und papier weg damit sie auch keine der informationen abschreiben können ...


    ich denke wenn die angedrohte strafe hoch genug ist, wird sich der ein oder andere schon überlegen ob er das macht ...

    bunt ist das dasein und granatenstark. volle kanne hoshi's!


    IBM Certified Advanced System Administrator (R5, D6, D7)
    IBM Certified Advanced Application Developer (R5, D6, D7, D8)

  • Hier soll Software wieder mangelnde menschliche Leistungen ersetzen. Das ist meist zum Scheitern verurteilt.
    Ronka hat eigentlich schon alles gesagt: Es gäbe partielle Lösungen, deren Aufwand aber dem Nutzen und vor allem den Risiken und Nebenwirkungen in keinster Weise Rechnung tragen.


    Beispiel:
    Du öffnest eine DB und startest dabei ein Programm (WinAPI), welches die Druck-Taste wegbiegt. Allein der Begriff "Öffnen" bietet schon Sprengstoff genug: Du kannst ein Notes-Dokument auch öffnen, ohne bestimmte globale Events der Notes-DB ausführen zu müssen (notfalls schickt man sich eben selbst einen Link auf das Dokument und öffnet dieses dann eben über den Link).
    Okay, nehmen ir aber an, das würde funktionieren. Da WinAPI, sind jetzt auch sämtliche anderen Fenster vom Drucken ausgenommen - sei es die DB im anderen (Notes-)Fenster oder Word oder ...


    Nochmals: Aufwand und Nutzen stehen in keinem Verhältnis.
    Letztens hat mir ein entsprechend Begeisterter vorgeführt, dass es mit MS SharePoint wirklich möglich ist, jemand von eben diesen Handlungen abzuhalten. Keine drei Minuten später hatte ich meinen Screenshot in der Hand ... Obwohl SharePoint doch so perfekt in Windows eingebettet ist ...


    Vergiss es, "Sub".


    Bernhard

  • Mangelnde menschliche Leistung?


    Zum 3. mal: mir geht es nicht um eine wasserdichte Lösung für das "Problem". Ich weiß, dass es sie nicht gibt, das brauch ich nich noch in solchen trolllastigen Beiträgen wie von koehlerbhv gesagt bekommen. Ich kann selber einschätzen, ob es angebracht ist sowas zu implementieren.


    Wenn es recht ist, postet bitte nurnoch Lösungen die sinnvoll sind und Vorschläge zur Realisierung beinhalten. Danke.

  • Hallo "Sub",


    mich als Troll zu bezeichnen, ist etwas verwegen, denke ich. Trotzdem tut es mir aber sehr leid, dass das bei Dir so angekommen ist. Ich werde daran arbeiten. Versprochen.


    Bedenke aber bitte folgendes:
    Mit entsprechenden Kenntnissen ist es ohne weiteres machbar, per WinAPI das keybrd-Event abzufangen.
    Dieses gilt dann aber erstmal Windows-weit.
    Ergo musst Du auch noch das Window-Handle, für welches dieses gelten soll, abprüfen. Ansonsten gibt es Ärger an die Backe, wenn jemand das Fenster / die Applikation wechselt und auch dort nicht mehr drucken kann, wo es doch erlaubt ist ... Damit wird es schon erheblich schwieriger. Zudem Du das ja vom Notes-Client aus steuern musst.
    Weiterhin: Wenn der "böse Bube" feststellt, dass er durch direkten Zugang in die DB keine Schirmschüsse mehr machen kann, dann greift er eben anders auf die DB zu. Wie man an Events des DatabaseScripts vorbei kommt, brauche ich Dir ja offensichtlich nicht zu beschreiben.


    Abgesehen von allem Zorn Deinerseits: Vielleicht kannst Du ja auch einfach mal genauer beschreiben, was Du warum verhindern willst. Es gilt ja: Mehr Input, mehr Output.


    Bernhard


    PS: Zu "mangelnde menschliche Leistung" stehe ich. Du hast es nur vermutlich nicht richtig verstanden: Auch an den unmöglichsten Stellen soll partout die Software teilweise einfache menschlich-organisatorische Leistung ersetzen oder korrigieren. Das hat aber noch nie funktioniert. Wenn Du es genau betrachtest, kann nur die Unterstützung funktionieren. Der Ersatz nicht - oder Mensch findet einen Ersatz für den Ersatz ...

  • Ich hab dich nirgends als Troll bezeichnet, sondern lediglich gesagt, dass dein Beitrag trolllastig ist, weil er einfach provozierend auf mich wirkt.


    Zu den mangelnden Menschlichen Leistungen:


    Dann erklär mir mal bitte, wie man mit "einfachen menschlich-organisatorischen Leistung" verhindern kann, dass Datensätze, die nicht dafür bestimmt sind, vervielfältigt werden. Vertrauen ist sicherlich gut, aber Kontrolle eben besser. :)


    Es geht einfach um sensible Daten, die nicht unnötig einfach (z.B. per Bildschirmausdruck ) kopiert werden sollen.



    Mit der Tatsache, dass die Druckfunktion in anderne Programmen nicht mehr funktioniert (solange die DB geöffnet ist) kann ich leben. Sonst wär es zu einfach den Focus auf ein anderes Programm zu legen, die DB im Hintergrund zu lassen und "beiläufig" mit zu kopieren. Da kommt eben in "Über diese Datenbank" der Hinweis rein, dass es nicht möglich ist bei geöffneter Datenbank die Drucktaste zu benutzen.


    Wie schon 3 mal gesagt: Es geht um keine perfekte Lösung, gibt es in dem Fall auch garnicht. Von daher sind auch Szenarien wie "Mitarbeiter die sich mit dem Dominodesigner auskennen", zu vernachlässigen.


    Mein Fazit bis hierher: 100 prozentigen Schutz gibt es nicht. Allein mit Notes Mitteln ist es nicht zu realisieren, sondern man muss auf die WinAPI zurückgreifen.


    Hat jemand schonmal sowas in der Richtung gemacht?

  • Vielleicht kann ich auch mal etwas dazu sagen, vor kurzem ging es bei mir um genau das gleiche Thema...und zwar wollte ich verhindern, das die Mitarbeiter die datenbank kopieren, bzw die dokumente einfach "mal so auf die schnelle" kopieren bzw die datenbank replizieren.


    Ich hab gedacht, das ich das mit dem einfachen Häkchen in der ACL
    "Dokumente replizieren oder kopieren" lösen kann.


    Musste aber zehn Minuten später feststellen, das keiner der Mitarbeiter das Dokument ausdrucken konnte...
    Das war wiederum nicht im Sinne des Erfinders..das man mit bestimmten hürden sicherlich alles umgehen kann ist klar...
    (War überrascht das "drucken, replizieren und kopieren" dermaßen zusammenhängen")



    Aber auch bei mir geht es einfach darum das die "normalen Mitarbeiter" nicht einfach gesammelt die datenbank kopieren..und dann irgendwie aus der Firma "wegschleppen"...nicht jeder unserer
    Mitarbeiter kennt sich so weit mit lotus notes aus..aber wenn ein Punkt angeboten wird "Datenbank kopieren" dann ist das schon verlockend.

  • Du möchtest möglichkeiten hören.. Tja, es gibt welche aber NICHT in notes.
    Du mußtest dafür den C api oder C++ Api verwenden, und dort dieses programmieren. Fertige code könntest du unter umständen finden in den foren die mit API programmierung zu tun haben.
    Vorgehensweise ist ja gemeldet, sprich fenster titel abfragen und machen.


    2. Sachen. erstens solltest du wissen das dieses programm durch den user gestartet werden mußte, und das zweitens es einfach möglich ist ein dokument zu öffnen welches OHNE jegliche datenbank event geöffnet werden kann.


    Damit bleibt dir nur eine möglichkeit. Das programm auf ALLE rechner IMMER installieren, und ÜBER all und IMMER das kontrollieren. Sonnst fällt dir die lösung sehr schnell flach.


    Ich kann dir keine fertige lösung geben hier, weil es ausserhalb von notes gemacht werden muß. Mann könnte es mit notes startet (addinmenu eintrag in der notes.ini) damit kannst du unter umständen sogar dafür sorgen das wenn notes nicht läuft es auch wieder entladen wird, aber den programmierung an sicht hat nichts mit notes zu tun, und wird dir daher mit sicherheit hier auch nicht gegeben. Nicht aus unwill sondern aus rein technische gründen. Dafür gibt es andere foren.


    Ich versuche dich hier nicht zu verjagen, oder zu verängstlichen, aber sei gewarnt das ohne fach kenntnisse ein solches api programm unter umständen mehr ärger machen kann als nützen. Ich habe schon unerfahrene programmierer gesehen die programmchen gemacht haben, und getestet, und für gut empfungen, und dann nach tagen festgestellt haben das dieses ein kompletes versagen von anderen standard funktionen verursacht, weil nebenwirkungen nicht getestet worden sind.


    Ich weiß das du gerne fertige code bekommen würdest, aber ich kann dir da nicht bedienen.


    Ronka

  • Die Schlacht, wie der schlaue Fuchs, der die letzte Notes-Finesse kennt, auszutricksen ist, kann nicht gewonnen weren. Beschränken wir uns also auf das Machbare.


    Dokumente vor Ausdruck, Kopieren, Zwischenablage schützen.
    In schützenswerten Dokumenten das Feld $KeepPrivate mit dem Wert "1" füllen. Bildschirmausdruck verhindern: nicht möglich.


    Lokale Repliken wertlos machen:
    In einem Setup-Dokument hinterlegen, wer Repliken (oder lokale Kopien) nutzen darf (bitte nicht in der ACL mit einer Rolle - beim Datenbank-Kopieren gibt sich der Nutzer sonst die Rolle).


    Im Datenbankscript im POSTOPEN-Event abfragen, ob die DB lokal bzw. auf einem zugelassenen Server liegt und dann im Setup-Dokument nachschauen, ob der Benutzer zu den Auserwählten gehört, falls nicht: DB kommentarlos schließen.


    Das Feld im Setup-Dokument sollte vom Typ AUTOR sein, damit der ADMINP-Prozeß Umbenennungen mitbekommt.


    Da muß jemand mit dem Debugger umgehen können, um das zu überspringen.

  • Vielen Dank für die Beiträge und Hinweise.


    Ronka: Ich dachte, da es sich um ein Problem handelt, welches mit Notes in Verbindung steht, gibt es den ein oder anderen der sich mit sowas schonmal auseinandergesetzt hat und mir Tips geben kann. Ich will mit Sicherheit keinen fertigen Code. ;)


    Ich lasse den Thread mal als offen stehen, vielleicht ergibt sich noch etwas. Mal sehen.

  • Um Windows das kopieren der Dokumente mittels der Drucktaste abzugewöhnen geht folgendes:



    Declare Function OpenClipboard Lib "User32.dll" Alias "OpenClipboard" (Byval hwnd As Long) As Long


    Declare Function EmptyClipboard Lib "User32.dll" Alias "EmptyClipboard" () As Long


    Declare Function CloseClipboard Lib "User32.dll" Alias "CloseClipboard" () As Long



    In den entsprechenden Events beim Öffnen des Dokumentes:

    ret = OpenClipboard(0)
    ret = EmptyClipboard()


    ... und beim Schliessen
    ret = EmptyClipboard()
    ret = CloseClipboard()


    Das funktioniert aber nur soweit keine zusätzlichen Tools für Screenshots installiert sind, aber das weißt Du ja schon.



    Gruss
    MeinerEiner

  • Zitat

    Im Datenbankscript im POSTOPEN-Event abfragen, ob die DB lokal bzw. auf einem zugelassenen Server liegt und dann im Setup-Dokument nachschauen, ob der Benutzer zu den Auserwählten gehört, falls nicht: DB kommentarlos schließen.


    Da würde ich noch ein schritt weiter gehen.. den DB dann einfach den inhalt nehmen. Sprich alle dokumente einfach mit einen schnelle schleife löschen. Damit hat der lokal nix mehr zum ansehen. Bis der das gefunden hat muß er also einen neue repliek ziehen.


    Und ein solches script kannst du in einen Scriptlib verstecken, und das mittels %INCLUDE in der DB einbinden. Dann ist auch ein debugger hilflos. Dazu das ding dann natürlich in 3 oder 4 verschiedene formen an verschiedene stellen aufrufen, Postopen der DB, Postopen der ansichten (jeweils mit einen anderen namen), und queryopen der einzelne dokumente


    Sprich Im %Include ein script einbinden mit:


    Sub CheckRemove
    ' dadrin dann natürlich dein destructives teilchen mit kontrolle
    End Sub


    Sub OpenDokument
    checkremove
    end sub


    Sub OpenAnsicht
    checkremove
    end sub


    Sub OpenDatenbank
    checkremove
    end sub


    Slaue entwickler brauchen dann 3 oder 4 replieken zuvor die es mitbekommen... :)


    Und ja es funktioniert.. Weil spätestens nach den 3 neue repliek fällt es im Log auf (wenn mann dort kontrolliert)
    Und jemand der es eigentlich dürfen sollte, und es nicht kann, meldet sich nach den ersten mal.


    Achtung! Löschvorgänge dürfen dann nicht mehr zurück repliziert werden, also im Script das replizieren der DB ebenso ausschalten.


    Ronka

  • Hm. Und wenn man eine lokale DB wenigstens halbwegs sicher gestalten will, dann hat man konsistente ACL darauf und verbietet natürlich den ohne fraglichen Mitarbeitern das Löschen ... Ich finde das also keine hilfreiche Idee.


    Ab gesehen davon: Wenn man WIRKLICH Daten klauen will, setzt man dafür auch einen Fachmann ein, für den dass dan alles Kinderkram ist. Von organisationsinternen Massnahmen (die den Datenklau uninteressant werden lassen und sowieso viel wichtiger sind), mag ich jetzt gar nicht reden.


    Bernhard

  • Den Sub CheckRemove sollte natürlich auch kontrollieren ob löschrechte existieren. Wenn nicht, dann kann es eh nix tun.


    Aber ein solches script habe ich schon erfolgreich unter notes 4 ! eingesetzt wobei es um ähnliches ging. Auch da mit konsistente acl, und dabei OHNE löschrechte. Erst nachden die ausgeschiedene mitarbeiter die db `anpassen´ wollten um das ding nach beendigung der mitarbeiterschaft weiter zu verwenden, schlug den script zu, und hat einfach den kompletten db inhaltlich gelöscht. Getestet ist das von eine EXPERTEN (der natürlich nicht wußte das es dieses script gab), mit den `aufgabe´ den inhalt zu knacken. Es hatte ein KOPIE der db gemacht, zuvor der angefangen hatte, und 11 versuche stattfinden lassen, bis er die einzige lösung gefunden hatte damit zu arbeiten.. Managerrechte ohne löschberechtigung. Sonnst war der DB LEER nach weniges arbeiten. und er hatte keine ahnung warum, weil debugger nichts auffälliges gezeigt hatte..


    Also 100% sicher ist es nicht, aber aufwendig zu finden schon.


    Ronka


    PS. Kosten für Sicherkeit haben KEINE grenze nach oben, aber eine grenze hinsichtlich machbarkeit. Denk aber dran das ALLE maßnahmen die mit sicherheit der daten zu tun haben sich NEGATIV auf den benutzung auswirken. es muß immer einen gratwanderung sein zwischen benutzer unfreundlichkeit und tatsächliche sicherkeit.