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="data source=.\sqlexpress;initial catalog=eMarket_DB;user id=sa;multipleactiveresultsets=True;application name=EntityFramework"" 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.
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.
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.
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 .