Quel est le meilleur endroit pour injecter le mot de passe db à la string de connection EF par défaut

L'assistant Modèle de données d'entité indique:

Cette string de connection semble contenir des données sensibles (par exemple, un mot de passe) requirejses pour se connecter à la database. Le stockage de données sensibles dans la string de connection peut présenter un risque de security. Voulez-vous inclure ces données sensibles dans la string de connection?

J'ai sélectionné Non et j'ai trouvé la nouvelle string de connection suivante dans mon Web.config:

<add name="eMarket_DBEntities" connectionSsortingng="metadata=res://*/App_Code.EFModel.csdl|res://*/App_Code.EFModel.ssdl|res://*/App_Code.EFModel.msl;provider=System.Data.SqlClient;provider connection ssortingng=&quot;data source=.\sqlexpress;initial catalog=eMarket_DB;user id=sa;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient;" /> 

Aussi dans Web.config:

  <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 

Comment et où est le meilleur endroit pour passer le mot de passe en une fois pour être par défaut pour EF?

Il existe deux façons de ne pas inclure de mot de passe dans Web.Config.

  1. Mettez le mot de passe dans les parameters d'hôte d'IIS. IIS conserve une configuration hôte supplémentaire par hôte et tous les parameters de cette configuration hôte sont appliqués avant web.config. Le seul problème est que seul l'administrateur peut le modifier via IIS Management Console.

  2. La string Mot de passe less de connection utilisera l'user de l'identité du pool d'applications pour se connecter. Vous pouvez créer un user Windows et le définir comme Identité du pool d'applications. Et donnez également l'access en lecture au dossier de contenu de votre site. Et append cet user dans la database SQL et rendre cet user db-propriétaire. C'est le moyen le plus sûr d'héberger des sites car chaque pool d'applications s'exécute dans l'isolement et plus de droits peuvent être accordés par application. Le seul problème est que le Gestionnaire de tâches n'affiche plus le nom du site pour le process de travail.

Dans l'hébergement partagé, toute personne ayant access au panneau de contrôle a probablement access à tout, il y a peu de choses que vous pouvez faire pour le sécuriser, mais c'est ainsi que nous le faisons.

  1. Nous créons une connection FTP séparée pour que les développeurs puissent download du code.
  2. L'administrateur configure le file de configuration et les développeurs ne téléchargent jamais web.config. Par erreur, s'ils téléchargent, admin se connectera à une console ou à ftp et modifiera web.config
  3. Les développeurs ne doivent pas avoir access au panneau de contrôle de l'hébergement partagé. La mise en place du site Web avec le téléchargement de code et l'édition de web.config doit être effectuée par l'administrateur.
  4. Les sites Web Windows Azure vous permettent de modifier web.config dans le panneau de configuration d'administration.

Lors de l'initialisation de l'entité, je passe la string de connection qui est construite en utilisant le même format dans le file Web.config :

 Ssortingng EntityConnectionSsortingng = Ssortingng.Format("metadata=res://*/App_Code.EFModel.csdl|res://*/App_Code.EFModel.ssdl|res://*/App_Code.EFModel.msl;provider=System.Data.SqlClient;provider connection ssortingng='data source={0};initial catalog={1};persist security info=True;user id={2};password={3};multipleactiveresultsets=True;App=EntityFramework;Enlist=false'", ServerName, DatabaseName, DatabaseUserName, DatabasePassword); EntityContainer EntityDB = new EntityContainer(EntityConnectionSsortingng); 

Plutôt que d'injecter le mot de passe dans la string de connection dans web.config, vous pouvez utiliser la string de connection complète avec le mot de passe, mais crypter, comme indiqué dans cette question .