Laden...

[gelöst] web.config Connectionstring ändern

Erstellt von Lion1984 vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.560 Views
L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren
[gelöst] web.config Connectionstring ändern

Hallo Forum,

ich habe in der web.config einen Connectionstring ändern, der verschlüsselte Benutzer und Passwort beinhaltet. (bis vor kurzem im klar Text)

Nun greift die Anwendung an mehreren Stellen über mehrere Wege auf diesen zu.
Meine Idee war es nun, den User / Passwort zu verschlüsseln, und in der Global.apsx bei Application_Start den Connectionstring zu entschlüsseln.

Nun möchte ich diesen weiterverwenden, so auf die Art:

ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString = "blabla";

Nun ist dieses Property schreibgeschützt, kann ich den ConnectionString irgendwie abändern? Wichtig: Der entschlüsselte String darf aber nicht gespeichert werden, er soll nur in der Anwendung zur Verfügung stehen.

Kann ich diesen über Umwege abändern oder gibt es da keine Chance?
Lion

lg Lion

L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren

Ich habe zwar nicht herausgefunden, wie ich dass ändern kann, aber nun habe ich die Methode, die den String zurück gibt, angepasst, und für den User / Role Provider habe ich folgendes verwendet:

var connectionStringField = Membership.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
            if (connectionStringField != null)
                connectionStringField.SetValue(Membership.Provider, ConnectionString);

            var roleField = Roles.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
            if (roleField != null)
                roleField.SetValue(Roles.Provider, ConnectionString);

            var profileField = ProfileManager.Provider.GetType().GetField("_sqlConnectionString", BindingFlags.Instance | BindingFlags.NonPublic);
            if (profileField != null)
                profileField.SetValue(ProfileManager.Provider, ConnectionString);

Damit steht nun in meiner Config User und Password verschlüsselt und wird bei Application Start korrekt entschlüsselt und zugewiesen.

Lion

lg Lion

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo Lion1884

Das gibt es schon eingebaut, dafür musst du keine Handstände mit Reflection machen, auch wenn du es per Code machen willst.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren

Das habe ich bereits auch gefunden, aber die Anforderung war, dne Connection String doch einfach weiterhin ändern zu können.

Das war meiner Meinung nach nicht möglich. Weiterhin soll auch der Datenbankserver weiterhin einfach geändert werden.

Dennoch werde ich mir das mal zu Gemüte führen.

Lion

lg Lion

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo Lion1984

Im ersten Link (4guysfromrolla) ist eine Lösung ohne und mit Code für genau deine Anforderung.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren

Hallo Peter,

diesen Link habe ich auch offen gehabt, aber wo kann ich hier einfach den String abändern?

For example, if we were to encrypt the <connectionStrings> section above the resulting Web.config file might look like the following: (Note: a large chunk of the <CipherValue> has been removed for brevity.)

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAed...GicAlQ==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>

<system.web>
<compilation debug="true"/>

  &lt;authentication mode=&quot;Forms&quot; /&gt;  

</system.web>
</configuration>

Vielleicht habe ich mich klar ausgedrückt, mit "leicht abändern" meinte ich direkt in der web.config Datei.

Ich seh zwar, dass ich programmiertechnisch den String ändern kann, aber wie erwähnt, er soll in der web.conifg änderbar bleiben.

Weiters sehe ich, dass das teilweise am IIS gemacht wird, wo auch entsprechende Schlüssel abgelegt werden müssen, da ich den Zugriff dahin sowieso nicht habe, wäre das schwierig zu lösen.

Aber dennoch werde ich mal das zuständige Team informieren, die können ja die Section nochmal schützen 😃 Und dann kann ich natürlich auch eine entsprechende Seite anlegen, mit der der String geändert werden kann, aber dazu müßte eine minimal art von Userverwaltung angelegt werden (nicht jeder darf den ändern, aber jeder hat aktuell zugriff auf alle Funktionen der App) und entsprechen eingebaut werden.

Dennoch, vielen Dank für die Information
Lion

lg Lion

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo Lion1984

Kannst du doch nicht. Entweder ist er verschlüsselt und muss beim Ändern auch wieder verschlüsselt werden, oder er ist nicht verschlüsselt und alles bleibt beim alten.

Oder missverstehe ich dich da jetzt total?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

L
Lion1984 Themenstarter:in
770 Beiträge seit 2006
vor 14 Jahren

Hallo Peter,

ich glaube wir beide haben aneinander vorbeigesprochen.
Also klar ist, Zugriff auf den IIS Server habe ich keinster Weise, ausgenommen das Verzeichniss, wo die Anwendung liegt, und selbst der wird nur aktiviert, wenn Änderungen vorhanden sind.

Nun soll der Connectionstring in der webconfig stehen, und "leicht" änderbar sein.
Also im Prinzip kann man sich den Connectionstring wie einen normalen vorstellen, bis auf dass, dass der User und das PW nicht im Klartext stehen, sondern über eine Funktion entschlüsselt werden (nur User und PAssword, nicht der komplette).

Es ist keine sichere Lösung, ist mir klar, es ist aber eine gegen jene, die Zugriff auf die Web.Config haben und das lesen könnten. Daher habe ich diesen "Schutz" eingebaut.

Auch selbst bin ich oder einer meiner Kollegen kein Anwender und haben keinen Zugriff darauf (von daher können wir den String nicht über die Anwendung ändern).

Ich hoffe, ich hab nun die Lage etwas klarer dargestellt.
Ich finde deinen Vorschlag ja nicht schlecht, nur eher für die Lage unpassend.
Wenn ich das IIS Team einschalte, dass die das machen sollten, dann liegt ja auf jeden Fall kurzfristig der String in klar lesbar vor, bevor dieser verschlüsselt wird. Und da möchte ich vermeiden, dass sich da jemand die nötigen Zugriffsinfos merkt/abschreibt/etc.

Lion

lg Lion

5.941 Beiträge seit 2005
vor 14 Jahren

Salute Lion1984

Das geht m.E. nur, wenn du die zu schützenden Dinge in eigene Sections auslagerst, bzw. eigene AppSettings und dir den Connectionstring dann zusammenbaust.

Oder so wie du es im Moment hast, allerdings sollte das auch ohne Reflection gehen. So wie es im Artikel per Code gezeigt wurde.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011