Hallo,
Ich möchte gerne das Password zur der DB verschlüsseln.
Web.config:
<connectionStrings>
<add name="TEntities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=tedb;initial catalog=DaTa;user id=sa;password=NxBYQy0fQ+1Pys0DF64t/w==;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
wenn ich die Daten aus der DB auslese (Entity Framework 6) ...
using (TEntitiesdb = new TEntities())
{
... Daten aus db hollen
}
In der ...
public partial class TEntities : DbContextpublic TEntities()
: base("name=TEntities")
{
PasswordEncrypting();
}
public void PasswordEncrypting()
{
System.Configuration.Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
System.Configuration.ConnectionStringSettings connString;
if (0 < rootWebConfig.ConnectionStrings.ConnectionStrings.Count)
{
connString = rootWebConfig.ConnectionStrings.ConnectionStrings["TEntities"];
if (null != connString)
{
var password = connString.ConnectionString.Substring(connString.ConnectionString.IndexOf(";password=") + 10, connString.ConnectionString.Substring(204 + 10).IndexOf(";"));
var testDecr = Decrypt(password, "test");
var neuesConnString = connString.ConnectionString.Replace(";password=" + password + ";", ";password=" + testDecr + ";");
connString.ConnectionString = neuesConnString;
rootWebConfig.Save();
}
}
}
Es funktioniert soweit auch alles, nur nicht 100% so wie ich es brauche.
Durch das rootWebConfig.Save(); wird die Web.config überschrieben und das Password steht wieder unverschlüsselt da. Wie muss ich das machen, damit das Password unverschlüsselt zur Verfügung stehen oder das ich die Web.config überschreiben muss??
Vielen Dank
Hallo Mary81,
hast du [FAQ] DB-Password/Kennwort/Connection-String sicher speichern mal durchgelesen?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Eine Frage dazu:
Würde etwas dagegen sprechen wenn man einen eigenen Windows-Account anlegt, der von der WebApp verwendet wird (AppDomain im IIS) und dieser gegen die DB fährt? Setzt natürlich vorraus, dass der AppDomain Prozess Zugriffsrechte auf die DB hat.
In ASP.NET MVC (4) lohnt es sich gar nicht so selten, selbst was sicheres zu basteln oder zu verwenden.
In ASP.NET Core bitte die UserSecrets verwenden.
Wenn man in Azure unterwegs ist, in beiden Fällen bitte Key Vault verwenden.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code