Connection String Passwort verbergen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Sub7evenHH.

    Connection String Passwort verbergen

    Hi,

    ich habe bereits sehr viel zu diesem Thema gefunden. Leider komme ich trotzdem nicht weiter und denke, dass ich hierfür etwas Hilfe benötige.

    Hat hier vielleicht jemand Zeit und Lust mit mir gemeinsam, Schritt für Schritt das Passwort der Datenbank aus dem Connection String der XML zu verschlüsseln/verbergen? Ich kriege es einfach nicht hin und muss bei 0 anfangen. Vielleicht findet sich ja jemand, der mir dabei helfen kann.
    Ja ich habe bereits sehr viele Artikel bei google darüber lesen können. Leider ist das Verständnis bei mir hierfür noch nicht soweit ausgebaut und ich muss alles langsam Schritt für Schritt durchgehen um es zu verstehen. Daher helfen die Artikel von MS nicht wirklich.

    Ich habe eine Testanwendung mit einer Datenbank. Im Visual Basic Editor/App.config ist folgendes hinterlegt.

    <connectionStrings>
    <add name="test.My.MySettings.MXDBConnectionString"
    connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Test\Datenbank.mdb;Persist Security Info=True;Jet OLEDB:Database Password=1234"
    providerName="System.Data.OleDb" />
    </connectionStrings>

    Was muss ich als erstes tun um das Passwort zu entfernen? In den Eigenschaften der Verbindung zur Datenbank habe ich unter Erweitert einige Funktionen wie "Mask Password" entdeckt. Kann man vielleicht hiermit arbeiten?

    Vielen lieben Dank zunächst.

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

    Woher kommt denn die Datei? Erstellst du bzw. dein Programm die selbst oder kommt die aus ner Fremdanwendung?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Woher kommt denn die Datei? Erstellst du bzw. dein Programm die selbst oder kommt die aus ner Fremdanwendung?

    Die wird von visual basic erstellt sobald ich ein neues Projekt eröffnet habe.

    VB1963 schrieb:

    @Sub7evenHH
    Was du suchst, ist das Verbergen einer Verbindungszeichenfolge in der App.config...
    Hier im Portal:
    app.config verschlüsseln

    Das habe ich schon gelesen. Nur leider weiß ich nicht wie ich wo was machen muss :(

    Sub7evenHH schrieb:

    Nur leider weiß ich nicht wie ich wo was machen muss
    Brauchst eigentlich nur die Methode ProtectConfig aufrufen und das Argument Protect mit True oder False (True ist vorgegeben) angeben...

    VB.NET-Quellcode

    1. Private Shared Sub ProtectConfig(Optional Protect As Boolean = True)

    Sub7evenHH schrieb:

    Aber wo packe ich den Quellcode nun rein?
    Na ja - einfach in eine Klasse:

    VB.NET-Quellcode

    1. Public NotInheritable Class DeineKlasse
    2. '
    3. 'hier rein...
    4. '
    5. End Class
    Und aufrufen kannst du die Methode dann so:

    VB.NET-Quellcode

    1. DeineKlasse.ProtectConfig()
    Hmmm...
    Ich habe es jetzt so

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Call ProtectConfig()
    4. End Sub
    5. Private Shared Sub ProtectConfig(Optional ByVal Protect As Boolean = True)
    6. End Sub
    7. End Class

    wenn ich jetzt das projekt öffne, passiert mit der config nichts. Auch wenn ich das Programm veröffentliche und dann die .exe starte, mir danach die config anschaue, ist das passwort lesbar.

    Sub7evenHH schrieb:

    Hast du vielleicht Lust mir das genauer zu erklären wo ich das wie einfügen muss?

    Les dir doch bitte den von @VB1963 verlinkten Thread noch einmal ganz genau durch und vergleiche Deinen obigen Code mirt dem Code in dem Thread... (#3 ist das, was du suchst)
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Sub7evenHH schrieb:

    Hast du vielleicht Lust mir das genauer zu erklären wo ich das wie einfügen muss?

    Les dir doch bitte den von @VB1963 verlinkten Thread noch einmal ganz genau durch und vergleiche Deinen obigen Code mirt dem Code in dem Thread... (#3 ist das, was du suchst)


    Ok da fehlte ja echt ein bisschen... Jetzt sieht es so aus:

    VB.NET-Quellcode

    1. ​Private Sub ProtectConfig(ByVal ConfigNameExe As String, ByVal Protect As Boolean)
    2. Dim conf = ConfigurationManager.OpenExeConfiguration(ConfigNameExe)
    3. Dim sect = DirectCast(conf.GetSection("connectionStrings"), ConnectionStringsSection)
    4. If sect IsNot Nothing Then
    5. If Not sect.IsReadOnly() Then
    6. With sect.SectionInformation
    7. If Protect = .IsProtected Then Return
    8. If Protect Then
    9. .ProtectSection("DataProtectionConfigurationProvider")
    10. Else : .UnprotectSection()
    11. End If
    12. .ForceSave = True
    13. End With
    14. conf.Save(ConfigurationSaveMode.Modified)
    15. Console.WriteLine("Protected={0}", sect.SectionInformation.IsProtected)
    16. End If
    17. End If
    18. End Sub


    Er unterstreicht mir aber noch ConfigurationSaveMode und ConfigurationManager und sagt das wurde nicht deklariert. Hmmm :-/

    Sub7evenHH schrieb:

    Er unterstreicht mir aber noch ConfigurationSaveMode und ConfigurationManager und sagt das wurde nicht deklariert. Hmmm :-/

    Naja, in dem verlinkten Thread ist ja auch ein Link zur MSDN drinn und dort steht:
    System.Configuration.dll ist nicht in allen Projekttypen enthalten, sodass Sie u. U. einen Verweis einfügen müssen, um die Konfigurationsklassen zu verwenden.

    Du msst also erst einen Verweis setzen und dann oben im Code einen Import auf diesen Verweis...
    "Hier könnte Ihre Werbung stehen..."
    Hi,

    leider habe ich nun auf anderen Rechnern das Problem wenn ich Main() ausführe:

    System.Configuration.ConfigurationErrorsException: Beim Laden einer Konfigurationsdatei ist ein Fehler aufgetreten.: Der Zugriff auf den Pfad "C:\Program Files (x86)\Test\ewha3ogp.tmp" wurde verweigert. (C:\Program Files (x86)\Test\test.exe.config) ---> System.UnauthorizedAccessException: Der Zugriff auf den Pfad "C:\Program Files (x86)\Test\ewha3ogp.tmp" wurde verweigert.

    Hat einer eine Idee wie ich das umgehe?

    Ich starte die Anwendung und per Button wird zunächst das ausgeführt:

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Xml
    4. Imports System.Windows.Forms
    5. Imports System.Configuration
    6. Public Class Start
    7. Public Sub Main()
    8. Dim ConfigNameExe As String = Application.ExecutablePath
    9. ProtectConfig(ConfigNameExe, True)
    10. GetData(ConfigNameExe)
    11. Console.ReadLine()
    12. End Sub
    13. Public Sub ProtectConfig(ByVal ConfigNameExe As String, ByVal Protect As Boolean)
    14. Dim conf = ConfigurationManager.OpenExeConfiguration(ConfigNameExe)
    15. Dim sect = DirectCast(conf.GetSection("connectionStrings"), ConnectionStringsSection)
    16. If sect IsNot Nothing Then
    17. If Not sect.IsReadOnly() Then
    18. With sect.SectionInformation
    19. If Protect = .IsProtected Then Return
    20. If Protect Then
    21. .ProtectSection("DataProtectionConfigurationProvider")
    22. Else : .UnprotectSection()
    23. End If
    24. .ForceSave = True
    25. End With
    26. conf.Save(ConfigurationSaveMode.Modified)
    27. Console.WriteLine("Protected={0}", sect.SectionInformation.IsProtected)
    28. End If
    29. End If
    30. End Sub
    31. Private Sub GetData(ByVal ConfigNameExe As String)
    32. Using reader As New XmlTextReader(ConfigNameExe & ".config")
    33. While reader.Read()
    34. Select Case reader.NodeType
    35. Case XmlNodeType.Element : Console.WriteLine("<" + reader.Name & ">")
    36. Case XmlNodeType.Text : Console.WriteLine(reader.Value)
    37. Case XmlNodeType.None : Stop
    38. Case XmlNodeType.EndElement ': Console.WriteLine
    39. End Select
    40. End While
    41. Console.WriteLine()
    42. End Using
    43. End Sub



    Und anschließend wird die nächste Form gezeigt. Leider funktioniert das wohl nur am eigenem PC. Kann ich die Berechtigungen irgendwie ändern? Ich hoffe sehr auf Eure Hilfe :)