Base-Anwendung schützen
Moderator: Moderatoren
Base-Anwendung schützen
Hallo Forum,
ich möchte eine Base-Anwendung vor Manipulationen (Änderung von Formularen, Tabellen, Abfragen, ...) des Anwenders schützen.
Die Benutzerfunktionen werden über ein Formular aufgerufen, welches beim Start der Datenbank automatisch aufgerufen wird.
Schön ware es, wenn
a) Beim schliessen dieses Formulars die Datenbank oder Base ebenfalls beendet wird,
b) der Anwender die Benutzeroberfläche für die Base-Entwicklungsfunktionen nicht mehr über die Taskleiste aufrufen kann
Vielleicht gibt es ja auch eine andere Lösung für die Anforderung.
Hat jemand eine Idee dazu?
Vielen Dank und Gruss,
WSO
ich möchte eine Base-Anwendung vor Manipulationen (Änderung von Formularen, Tabellen, Abfragen, ...) des Anwenders schützen.
Die Benutzerfunktionen werden über ein Formular aufgerufen, welches beim Start der Datenbank automatisch aufgerufen wird.
Schön ware es, wenn
a) Beim schliessen dieses Formulars die Datenbank oder Base ebenfalls beendet wird,
b) der Anwender die Benutzeroberfläche für die Base-Entwicklungsfunktionen nicht mehr über die Taskleiste aufrufen kann
Vielleicht gibt es ja auch eine andere Lösung für die Anforderung.
Hat jemand eine Idee dazu?
Vielen Dank und Gruss,
WSO
Re: Base-Anwendung schützen
Hallo!
Falls dein Problem noch aktuell ist (wenn nicht, hilfts vl jemanden, der ein ähnliches Problem hat):
Ich bin bei weitem kein Basic Profi, aber ich hatte einen ähnlichen Gedanken und hab mir deshalb folgende Makros zusammengebastelt:
ad a)
Makro an "Dokument schließen" gebunden in jedem Formular
wichtig ist hierbei die Variable wenn die nicht in der Sub auf true gesetzt wird, produzierst du eine Endlosschleife (Fensterschließen löst Sub dbShutdown aus, Sub dbShutdown schließt alle Fenster, Fenster löst wieder Sub dbShutdown aus etc)
Fallst du irgendeine Art der Menüführung durch die verschiedenen Formulare hast, musst da das dann auch abfangen, da hier ja auch die Formulare geschlossen werden
ad b)
Makro ist an "Dokument öffnen" gebunden
Durch die Zeile "wird die IDE unsichtbar und nicht mehr über die Taskleiste aufrufbar
Die Zeilen und sorgen dafür, dass der User nicht irgendwas im Base Menü herumpfuschen kann
Einziges Problem bei der ganzen Sache ist, dass die IDE sichtbar wird, wenn das .odb Dokument nochmals geöffnet wird, wenn die Datenbank bereits läuft
Ich hoffe, ich konnte dir helfen
Grüße aus Wien
Rasakul
Falls dein Problem noch aktuell ist (wenn nicht, hilfts vl jemanden, der ein ähnliches Problem hat):
Ich bin bei weitem kein Basic Profi, aber ich hatte einen ähnlichen Gedanken und hab mir deshalb folgende Makros zusammengebastelt:
ad a)
Makro an "Dokument schließen" gebunden in jedem Formular
Code: Alles auswählen
Sub dbShutdown
If not(shutdown) then
'Variable zur Steuerung der Fensterschließung (falls false: Endlosschleife
'(shutdown schließt Formular, Formularschließen löst dbShutdown aus etc)
shutdown = true
'Controler referenzieren
oController = ThisDatabaseDocument.CurrentController
oConnection = oController.ActiveConnection
'Verbindung und SubComponenten schließen, Dokument speichern und DB anschließend schließen
oDoc = ThisDatabaseDocument
oDoc.store()
oController.closeSubComponents
oController.ActiveConnection.close()
oDoc.close(True)
endif
End sub
Code: Alles auswählen
shutdown
Fallst du irgendeine Art der Menüführung durch die verschiedenen Formulare hast, musst da das dann auch abfangen, da hier ja auch die Formulare geschlossen werden
ad b)
Makro ist an "Dokument öffnen" gebunden
Code: Alles auswählen
Sub dbStart
'Start der Datenbank: Datenquelle verbinden, IDE unsichtbar machen, Bibliotheken laden
shutdown = false 'wichtige Variable für Fenster schließen (siehe Makro oben)
'IDE-Fenster referenzieren und verstecken
oFrame = ThisComponent.CurrentController.Frame
oMenuWin = oFrame.ContainerWindow()
oMenuWin.setVisible(false)
'Bibliotheken laden
GlobalScope.BasicLibraries.LoadLibrary("Tools")
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
BasicLibraries.LoadLibrary("Menue")
'Controller verbinden
oController= ThisDatabaseDocument.CurrentController
If NOT ( oController.isConnected() ) Then oController.connect()
'Willkommensgruß
MsgBox "Willkommen!", 64
'Hauptmenü öffnen, Layoutmenü verstecken
oFormDoc = ThisDatabaseDocument.formdocuments.getbyname("Menue_Main").open
lmgr = oFormDoc.getCurrentController().Frame.LayoutManager
lmgr.setVisible(false)
'lmgr.hideElement("private:resource/menubar/menubar") 'Menü
'lmgr.hideElement("private:resource/statusbar/statusbar")
lmgr.hideElement("private:resource/toolbar/formsnavigationbar")
lmgr.hideElement("private:resource/toolbar/standardbar")
lmgr.hideElement("private:resource/toolbar/formdesign")
lmgr.hideElement("private:resource/toolbar/formcontrols")
End Sub
Code: Alles auswählen
oMenuWin.setVisible(false)"
Die Zeilen
Code: Alles auswählen
lmgr.setVisible(false)
Code: Alles auswählen
lmgr.hideElement()
Einziges Problem bei der ganzen Sache ist, dass die IDE sichtbar wird, wenn das .odb Dokument nochmals geöffnet wird, wenn die Datenbank bereits läuft
Ich hoffe, ich konnte dir helfen
Grüße aus Wien
Rasakul
Zuletzt geändert von Rasakul am Do, 07.08.2014 16:32, insgesamt 1-mal geändert.
Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden - Linus Torvalds
Re: Base-Anwendung schützen
der ganze 'Mechanismus' leicht auszuhebeln ist indem man die Ausführung von Makros blockiert.Einziges Problem bei der ganzen Sache ist, dass [...]
Gruß
Stephan
Re: Base-Anwendung schützen
Makros scheint er sowieso für seine Datenbank zu nutzen, von dem her würde das Blockieren der Makros sowieso das Konzept umwerfenWSO hat geschrieben: Die Benutzerfunktionen werden über ein Formular aufgerufen, welches beim Start der Datenbank automatisch aufgerufen wird.
Grüße aus Wien
Rasakul
Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden - Linus Torvalds
Re: Base-Anwendung schützen
das war hier aber garnicht mein Thema, sondern der Hinweis das der Versuch eine Datei per Makros schützen zu wollen einfach nicht funktioniert, weil sie leicht umgangen werden kann.Makros scheint er sowieso für seine Datenbank zu nutzen, von dem her würde das Blockieren der Makros sowieso das Konzept umwerfen
Bitte auch lesen das der Threadstarter von "vor Manipulationen ... des Anwenders schützen." sprach, es geht also nicht um ungewollte Fehlbedienung sondern darum den Versuch des Anwenders ungewollte Änderungen zu machen zu blockieren, was mittels Makros einfach nicht klappen kann.
Ich ziele mit dieser Aussage auch ein bisschen in die allgemeine Richtung in Zeiten wo wir allseitig bespitzelt werden auch zu unterscheiden zwischen Sicherheit und Snakeoil (http://de.wikipedia.org/wiki/Schlangen%C3%B6l), typisch hierfür z.B. der Versuch von Nutzern Excel-Tabellenblätter per Passwort zu schützen um wichtige Daten geheimzuhalten und die Verwunderung darüber wie leicht das umgangen werden kann.
Warum ich das schreibe ist ganz einfach, weil ich dem Tun solcher Leute im normalen Leben ausgeliefert bin wenn ich ihnen meine Daten überlassen muss.
Gruß
Stephan
Re: Base-Anwendung schützen
Ok, sorry, da habe ich dich missverstanden.
Wie löst du das Problem dann? Gibt es denn überhaupt eine Möglichkeit einen effizienten Schutz vor Manipulation durch den Anwender? einzurichtenWarum ich das schreibe ist ganz einfach, weil ich dem Tun solcher Leute im normalen Leben ausgeliefert bin wenn ich ihnen meine Daten überlassen muss.
Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden - Linus Torvalds
Re: Base-Anwendung schützen
Ich habe zumindest keine Lösung bei der Hand und hätte auch nur die Makrolösung nennen können, was für mich der Grund war auf die ursprüngliche Frage nicht zu antworten weil ich die Makrolösung dafür ungeeignet halte.Wie löst du das Problem dann? Gibt es denn überhaupt eine Möglichkeit einen effizienten Schutz vor Manipulation durch den Anwender? einzurichten
Eine mögliche Lösung könnte z.B. sein die Datenbankdatei (*.odb) nur als Container für eine insgesamt verschlüsselte Datenbankdatei zu nutzen, die per Makro zur Laufzeit entschlüsselt würde, so wäre sichergestellt das der Benutzter Makros nutzen MUSS um die Datenbank überhaupt nutzen zu können, wenn er versucht Makros nicht zuzulassen ist in diesem Falle erst garkeine bearbeitbare Datenbank erreichbar.
Zur Illustration wie man überhaupt andere Dateien in eine ODF-Datei einpackt und zur Laufzeit entpackt hänge ich mal ein alte Beispiel eines Vorlageninstallers an, dort ist nichts verschlüsselt es wird aber das grundsätzliche Prinzip verdeutlicht wenn Du Dir überlegst das die dort enthaltenen Vorlagendateien Eine VERSCHLÜSSELTE Datenbankdatei sein könnten.
(die anhängende Datei ist hinsichtlich enthaltener Vorlagen stark gekürzt weil sie sonst zu groß wäre (2,5 MB) um sie hier hochzuladen. Mehr Vorlagen gibt es z.B. bei der PrOOo-Box http://www.prooo-box.org/live/seiten/vorlagen.html)
Gruß
Stephan
- Dateianhänge
-
- installer_V3.odt
- (63.1 KiB) 114-mal heruntergeladen
Re: Base-Anwendung schützen
Hi Stephan,
das klingt sehr gut.
Vielen Dank für sie ausführliche Erklärung.
Werde das ausprobieren.
Die Datenbank soll sowohl unter Win 7 als auch Linux Mint laufen.
Ich vermute die Lösung ist nicht kompatibel, oder?
Gruss,
Wolfram
das klingt sehr gut.
Vielen Dank für sie ausführliche Erklärung.
Werde das ausprobieren.
Die Datenbank soll sowohl unter Win 7 als auch Linux Mint laufen.
Ich vermute die Lösung ist nicht kompatibel, oder?
Gruss,
Wolfram
Re: Base-Anwendung schützen
Doch, die Lösung ist kompatibel, soweit sie die Beispieldatei betrifft bzw. auch generell. Einzig zeigt die Beispieldatei aber nur das Prinzip des 'Einpackens' einer Datei in eine Andere und müsste für Deine Zwecke noch um die Verschlüsselung und das Speichern von Änderungen an der eingepackten Datei ergänzt werden, wofür ich kein fertiges Beispiel habe und was auch zu umfangreich ist um es hier in ein paar Codezeilen abhandeln zu können. Das ist aber alles machbar.Ich vermute die Lösung ist nicht kompatibel, oder?
Mir kam es hier nur darauf an auf Probleme hinzuweisen, denen ich bei meiner beruflichen Tätigkeit immer wieder begegne und die in Zeiten faktisch flächendeckender Bespitzelung ein ernsthaftes Problem sind, denn auch ich muss (wie wir alle) meine Daten Anderen anvertrauen und mich gruselt es wenn ich weiß wie sorglos Viele auch reiner Unwissenheit damit umgehen.
Gruß
Stephan
Re: Base-Anwendung schützen
Guten Morgen,
ich habe das Beispiel von Rasakul (vielen Dank dank dafür) zum verstecken der IDE eingebaut.
Die routine zum Shutdown ist nicht implementiert.
Hierbei ist folgendes Problem aufgetrteten:
Von der Anwendung werden weitere LO-Fenster geöffnet:
- Anzeige verlinkter Dokumente (Writer, Draw)
- exportierte Tabellen (Calc)
- etc.
Ist die IDE nicht sichtbar, und ich schliesse eines dieser Fenster wird jetzt auch LO beendet.
Das ist natürlich nicht gewollt.
Es folgt dann die Aufforderung zur Dokumentenwiederherstellung z.B. der Calc-Datei ...
Kann man das verhindern?
Gruss,
WSO
ich habe das Beispiel von Rasakul (vielen Dank dank dafür) zum verstecken der IDE eingebaut.
Die routine zum Shutdown ist nicht implementiert.
Code: Alles auswählen
SUB Systemstart_Anwender
'Start der Datenbank: Datenquelle verbinden, IDE unsichtbar machen, Bibliotheken laden
' shutdown = false 'wichtige Variable für Fenster schließen (siehe Makro oben)
' nicht implementiert
Call GlobalsBelegen
Call Datenbankbackup
Call TempTabelle
DIM oFrame AS OBJECT
DIM oMenuWin AS OBJECT
DIM oFormDoc AS OBJECT
'Bibliotheken laden
GlobalScope.BasicLibraries.LoadLibrary("Tools")
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
'Controller verbinden
oController= ThisDatabaseDocument.CurrentController
If NOT ( oController.isConnected() ) Then oController.connect()
oFrame = ThisComponent.CurrentController.Frame
oMenuWin = oFrame.ContainerWindow()
oMenuWin.setVisible(false)
oFormDoc = ThisDatabaseDocument.formdocuments.getbyname("fMenue").open
' lmgr = oFormDoc.getCurrentController().Frame.LayoutManager
' lmgr.setVisible(false)
' lmgr.hideElement("private:resource/menubar/menubar") 'Menü
' lmgr.hideElement("private:resource/statusbar/statusbar")
' lmgr.hideElement("private:resource/toolbar/formsnavigationbar")
' lmgr.hideElement("private:resource/toolbar/standardbar")
' lmgr.hideElement("private:resource/toolbar/formdesign")
' lmgr.hideElement("private:resource/toolbar/formcontrols")
End Sub
Von der Anwendung werden weitere LO-Fenster geöffnet:
- Anzeige verlinkter Dokumente (Writer, Draw)
- exportierte Tabellen (Calc)
- etc.
Ist die IDE nicht sichtbar, und ich schliesse eines dieser Fenster wird jetzt auch LO beendet.
Das ist natürlich nicht gewollt.
Es folgt dann die Aufforderung zur Dokumentenwiederherstellung z.B. der Calc-Datei ...
Kann man das verhindern?
Gruss,
WSO
Re: Base-Anwendung schützen
Hi!
Immer gerne!
ich versteh noch nicht ganz die Situation: Wenn du die anderen LO-Fenster öffnest, ist gleichzeitig kein Base-Fenster (außer der versteckten IDE) offen? Wie genau öffnest du die Fenster? (Code?) Wie schließt du die Festern wieder (einfach schließen oder mit Makro + Button?) und hängt irgendein Makro am Event "Dokument schließen"? Was hast du vor, was passieren soll, wenn die Fenster geschlossen werden?
Grüße aus Wien
Rasakul
Immer gerne!
ich versteh noch nicht ganz die Situation: Wenn du die anderen LO-Fenster öffnest, ist gleichzeitig kein Base-Fenster (außer der versteckten IDE) offen? Wie genau öffnest du die Fenster? (Code?) Wie schließt du die Festern wieder (einfach schließen oder mit Makro + Button?) und hängt irgendein Makro am Event "Dokument schließen"? Was hast du vor, was passieren soll, wenn die Fenster geschlossen werden?
Grüße aus Wien
Rasakul
Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden - Linus Torvalds
Re: Base-Anwendung schützen
Hallo Rasakul,
hier das ganze etwas ausführlicher.
In den Datenbanktabellen habe ich Links auf Dokumente im Filesystem, z.B. die Angebotspräsentation (Draw) in der Tabelle "Kundenangebot". Die "Links" sind als STRING mit der URL des Dokuments gespeichert.
Über eine Schaltfläche in dem Bases-Formular zur Verwaltung der Angebotsdaten kann das Dokument geöffnet werden:
Somit sind jetzt n Base-Formulare (Kunde, Angebot, ...) geöffnet und ein LO-DRAW Window.
Das DRAW-Window schliesse ich über das Window-Control (X).
Das soll aber nichts anderers tun, als das DRAW-Window zu schliessen,
denn mit Base (hier meinem Kundenangebot) will ich ja weiter arbeiten.
So war das Systemverhalten bevor ich die IDE "versteckt" habe.
Jetzt, mit "versteckter IDE" wird durch das Schliessen des DRAW-Windows auch LO beendet.
Ich hoffe das macht die Situation etwas klarer.
Falls du dazu eine Idee hast würde ich mich freuen.
Mit sonnigen Grüssen aus La Gomera,
Wolfram
hier das ganze etwas ausführlicher.
In den Datenbanktabellen habe ich Links auf Dokumente im Filesystem, z.B. die Angebotspräsentation (Draw) in der Tabelle "Kundenangebot". Die "Links" sind als STRING mit der URL des Dokuments gespeichert.
Über eine Schaltfläche in dem Bases-Formular zur Verwaltung der Angebotsdaten kann das Dokument geöffnet werden:
Code: Alles auswählen
SUB DateianzeigenParameter (oEvent AS OBJECT)
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
DIM oFeld AS OBJECT
DIM oShell AS OBJECT
DIM stFeld AS STRING
Dim stFeldname AS String
DIM stTag AS String
DIM iMessage as boolean
Dim iReplacement_1 as string
Dim iReplacement_2 as string
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
stTag = oEvent.Source.Model.Tag 'Tag wird unter den Zusatzinformationen eingegeben
aForm() = Split(stTag, ",") 'Formularname, DSN-Feldname_im_Formular
stFormular = Trim(aForm(0))
stFeldname = Trim(aForm(1))
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName(stFormular)
oFeld=oForm.getByName(stFeldname)
REM Den Text aus der Dateiauswahl auslesen
stFeld=oFeld.Text
If stFeld < " " THEN
iMessage = getMessage(35, iReplacement_1, iReplacement_2)
EXIT SUB
END IF
REM Start des Files mit der entsprechenden URL-Verbindung
oShell = createUnoService("com.sun.star.system.SystemShellExecute")
stFeld = convertToUrl(stFeld)
oShell.execute(stFeld,,0)
END SUB
Das DRAW-Window schliesse ich über das Window-Control (X).
Das soll aber nichts anderers tun, als das DRAW-Window zu schliessen,
denn mit Base (hier meinem Kundenangebot) will ich ja weiter arbeiten.
So war das Systemverhalten bevor ich die IDE "versteckt" habe.
Jetzt, mit "versteckter IDE" wird durch das Schliessen des DRAW-Windows auch LO beendet.
Ich hoffe das macht die Situation etwas klarer.
Falls du dazu eine Idee hast würde ich mich freuen.
Mit sonnigen Grüssen aus La Gomera,
Wolfram
Re: Base-Anwendung schützen
Guten Morgen!
Sehr seltsam das ganze... Ich habs selber ausprobiert und kanns echt nicht erklären. Selbes passiert übrigens auch mit Hoffentlich kennt hier jemand anderes des Problems Lösung, ich leider nicht
Sorry
Sehr seltsam das ganze... Ich habs selber ausprobiert und kanns echt nicht erklären. Selbes passiert übrigens auch mit
Code: Alles auswählen
StarDesktop.loadComponentFromURL
Sorry
Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden - Linus Torvalds
Re: Base-Anwendung schützen
Trotzdem erst mal vielen Dank.
WSO
WSO