WPF: Datenbank mitliefern, die nicht ausgelesen werden kann?

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Translating-IT.

    WPF: Datenbank mitliefern, die nicht ausgelesen werden kann?

    Hallo,

    Für eine App muss ich zwingend eine Datenbank anhängen.
    Aus Datenschutzgründen, sollte es auch die Möglichkeit geben, eine Datenbank direkt in der App mitzuliefern (kann recht groß werden :( ), damit die Abfragen nicht ständig an meinen Server gesendet werden müssen, und die Benutzer sollten nicht in der Lage sein, die DB auszulesen. Wie kann ich das am besten lösen bzw. mit welcher Datenbank (SQLite kann ja nicht verschlüsseln). Ohne Verschlüsselung kann ich mir das kaum vorstellen, oder habe ich das was übersehen?

    Es muss eine DB sein, da es ganz wichtig ist, die Abfragen nach unterschiedlichen Bedingungen zu sortieren (Längste zuerst, alphabetisch ASC/DESC, …).

    LG,
    Pascal

    Verschoben. ~Thunderbolt
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Hallo

    Warum schützt du die DB nicht mit einem Passwort?
    Das geht sowohl mit SQLite als auch mit localDB.

    Oder spricht etwas dagegen?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    echt jetzt?! so einfach geht das? Dann ist das Problem ja ur einfach zu lösen und ich habe wieder mal zu kompliziert gedacht. ;)
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Ja, musst ja nur den connectionstring anpassen.

    stackoverflow.com/questions/13…-sqlite-db-is-it-possible

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    ok, jetzt muss ich nur rausfinden, wie ich das Passwort setzen kann. Über das normale SQLite in WPF funktioniert das ja nicht mehr, wie ich gelesen habe. :(

    DB Browser for SQLite scheint auch keine solche Funktion zu haben.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Aber das ist doch alles in dem Link den ich dir gepostet habe.

    Quellcode

    1. SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
    2. conn.SetPassword("password");
    3. conn.Open();


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nein, die funktionieren leider nicht mehr. SetPassword und Changepassword wurden wieder entfernt. :(
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Oh, das ist doof.

    Ich kann dir da leider sonst nicht helfen. Arbeite nur mit SQL Datenbanken oder localDB.
    Aber probier folgendes mal. stackoverflow.com/questions/62…in-sqliteconnection-class
    Du könntest eine frühere Version auch probieren wo das noch ging.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Den Link hatte ich auch schon gefunden. Frühere Versionen bringen anscheinend nicht viel, da die Funktion in .NET generell nie richtig funktioniert hat. :(

    MS SQL habe ich am Server laufen, aber den Zugriff darauf möchte ich ja für jene vermeiden, die datenschutzrechtliche Probleme damit haben, dass ihre Texte (wenn auch nur zerstückelt und ohne Zusammenhang) an einen fremden Server geschickt werden.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.
    Hi @petaod Die Idee hatte ich auch, die Frage ist, wie sicher ist das? Und mit welchen DBs funktioniert das? Gibt's da auch was lizenzfreies oder recht kostengünstiges? Für SQLite habe ich noch nicht wirklich was gefunden, das funktioniert, bei meinen Suchen.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Translating-IT schrieb:

    Und mit welchen DBs funktioniert das?
    Mit allen natürlich.
    Du musst halt vor dem Schreiben in die DB die Daten selbst verschlüsseln und nach dem Lesen selbst entschlüsseln.
    Probleme gibt es da natürlich bei SQL Abfragen mit ORDER BY und ähnlichem.
    Sortieren musst du da nach der Entschlüsselung, also z.B. in der DataTable.

    Das ist mit Aufwand in deinem Code verbunden.
    Und Performance-fördernd wird dieser Weg auch nicht sein.

    Aber wenn die DB an sich keine Verschlüsselung anbietet, musst du halt solche Klimmzüge machen.
    Und hier die Frage;
    Lohnt sich der Aufwand?
    Welche wichtigen Daten hast du denn in der DB drin, die so schützenswert sind?
    Wenn du die DB gefüllt mit auslieferst, scheint es sich um Readonly-Daten zu handeln.
    Welche Daten stehen in der DB, die mit der Anwendung nicht ohnehin gelesen werden können?

    Und selbst wenn du eine verschlüsselte Datenbank verwendest:
    Wo speicherst du das Passwort für die Entschlüsselung?
    In der Anwendung? Dann ist das nur eine Pseudo-Sicherheit.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Aufgrund der Größe (wie in einem anderen Thread herausgefunden) von bisher ein paar Hundertausend Zeilen (Tendenz wachsend) ist es wohl eh besser, wenn ich meine bestehende MS-SQL-Datenbank verwende und nichts bzw. nur ein paar wenige uninteressante Daten in einer SQLite-DB bereitstelle. Die MS SQL ist schon verschlüsselt, der Key bleibt am Server und die Entschlüsselung ist nur über bestimmte Abfragen möglich, die zwar aus der Software heraus gestartet werden, aber am Server abgelegt sind, wodurch auch der Key sicher ist.

    An sich nur einfache Begrifflisten, die aber in Kombination mit den verknüpften Triggern extrem interessant sind, vor allem für die Konkurrenz, da es recht lange dauert, das alles miteinander zu kombinieren. Die Software prüft bestimmte Daten gegen die DB und löst entsprechende Aktionen aus.
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.