Datenbankanbindung individualisieren für spätere Anwender

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Datenbankanbindung individualisieren für spätere Anwender

    Hallo,

    ich entwickle meine Anwendung in meiner Entwicklungsumgebung, mit meinem Datenbankserver. Damit sind im Connection-String der Projekteinstellungen natürlich auch mein Server, meine Datenbank, etc. eingetragen.
    Wenn das Projekt jemals Produktionsreife erlangt, wie bekomme ich das geregelt, dass der zukünftige Anwender dann die Datenbankverbindung an seine Umgebung anpassen kann?
    Der Connection-String in den Projekt-Settings ist ja im Bereich Anwendung, d.h. über MySettings kann ich den nicht überschreiben.

    Muss ich das in die app.config schreiben? Gibt es da eine Funktion um Werte direkt in der Config zu ändern, oder muss ich die parsen und dann den Connection-String manuell überschreiben?

    Danke im voraus.

    Gruß Markus
    8-Bit Nerd - Retro-Computer Junkie - Elektronik-Fuzzi - Lötkolben-Jongleur
    Lord Luxors Retrogalerie llrg.me
    Hallo,

    bei meinen Apps mit Datenbankanbindung speichere ich die DB Zugangsdaten in eine verschlüsselte XML. Beim Start wird abgefragt, ob es diese XML gibt, sollte die XML oder ein Parameter nicht stimmen, dann erscheint eine Eingabemaske für die Zugangsdaten. So kann ich die App verteilen und auf jedem Rechner individuell einrichten. Dazu habe ich eine allgemeine Klasse geschrieben, welche ich in anderen Apps verwende bzw. etwas anpasse.

    Wenn du den ConnectionString in eine exe.config schreibst, ist ja das Passwort ersichtlich.
    So ähnlich hattes ich es vor. Ich habe mir eine Verschlüssungsroutine und eine Entschlüsselungsroutine geschrieben. Über den Configurationsmanager wollte ich dann den verschlüsselten Connectionstring in die config schreiben.
    Bei allen Zugriffen über den Datareader kann ich vorher den Connectionstring entschlüsseln um dann die Datenbankverbindung aufzubauen.

    Bei der Entschlüsselung ist mir jetzt noch nicht ganz klar, wie das mit dem Dataset funktioniert, das ich im Designer angelegt habe. Das würde ja erstmal auf den verschlüsselten ConnectionString zugreifen und dabei natürlich scheitern. Damit steuere ich aber meine ganzen DGVs an.

    Gruß
    Markus
    8-Bit Nerd - Retro-Computer Junkie - Elektronik-Fuzzi - Lötkolben-Jongleur
    Lord Luxors Retrogalerie llrg.me

    GerhardW schrieb:

    speichere ich die DB Zugangsdaten in eine verschlüsselte XML
    Und hier stellt sich mir wieder die Frage: Wie wird die XML entschlüsselt bzw. wie kommt die App an die DB-Daten?
    Solch ein Thema hatten wir hier: Hashing und Verschlüsseln von DB-Daten: best practice gesucht - leider ohne Patentlösung
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,

    wenn ich etwas verschlüssle, dann kann es auch entschlüsselt werden.

    Wir verwenden folgende Routinen:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Serialisierung der ServerPool Klasse in eine XML Datei +
    3. ''' Verschlüsseln des gesamten XML inhalts.
    4. ''' </summary>
    5. ''' <typeparam name="T"></typeparam>
    6. ''' <param name="pFilename"></param>
    7. ''' <param name="pObj"></param>
    8. ''' <param name="pKey"></param>
    9. ''' <returns>True/False</returns>
    10. Public Shared Function EncryptAndSerializeFile(Of T)(pFilename As String, pObj As T) As Boolean
    11. Try
    12. Using fs As FileStream = File.Open(pFilename, FileMode.Create)
    13. Dim key As New DESCryptoServiceProvider()
    14. Dim e = key.CreateEncryptor(Encoding.ASCII.GetBytes(mCryptKey), Encoding.ASCII.GetBytes(mCryptPassword))
    15. Using cs As New CryptoStream(fs, e, CryptoStreamMode.Write)
    16. Dim xmlser As New XmlSerializer(GetType(T))
    17. xmlser.Serialize(cs, pObj)
    18. End Using
    19. End Using
    20. Return True
    21. Catch ex As Exception
    22. mErrorMsg = ex.Message
    23. Return False
    24. End Try
    25. End Function
    26. ''' <summary>
    27. ''' Entschlüsseln des gesamten XML inhalts
    28. ''' Deserialisieren der XML in die ServerPool Klasse
    29. ''' </summary>
    30. ''' <typeparam name="T"></typeparam>
    31. ''' <param name="pFilename"></param>
    32. ''' <param name="pObj"></param>
    33. ''' <returns>ServerPool/Nothing</returns>
    34. Friend Shared Function DecryptAndDeserializeFile(Of T)(pFilename As String) As T
    35. Try
    36. Using fs As FileStream = File.Open(pFilename, FileMode.Open)
    37. Dim key = New DESCryptoServiceProvider()
    38. Dim d = key.CreateDecryptor(Encoding.ASCII.GetBytes(mCryptKey), Encoding.ASCII.GetBytes(mCryptPassword))
    39. Using cs As New CryptoStream(fs, d, CryptoStreamMode.Read)
    40. Dim xmlser As New XmlSerializer(GetType(T))
    41. Return CType(xmlser.Deserialize(cs), T)
    42. End Using
    43. End Using
    44. Catch ex As Exception
    45. Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace)
    46. Return Nothing
    47. End Try
    48. End Function


    Beim Start der App wird die XML gelesen und die DB Klasse mit den entsprechenden Parametern befüllt. Danach wird der ConnectionString erzeugt.

    Funktioniert ohne Probleme.
    Entweder hab ich mich falsch ausgedrückt oder Du hast Dich um meine Frag rumgemogelt. Wie man was ver-/entschlüsselt, ist hier zweitrangig. Mir stellt sich die Frage: Woher kommen CryptKey und CryptPassword? Usereingabe oder doch irgendwo abgespeichert? Denn das ist ja die Crux an der Sache.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also stehen sie im Code? Und sind damit doch wieder für alle Gewillten einsehbar?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wenn alle Daten im Code sind, ist es nicht wasserdicht. Egal, wie kompliziert der Weg zu den Zugangsdaten an sich ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.