3

实体数据模型向导说:

此连接字符串似乎包含连接到数据库所需的敏感数据(例如密码)。在连接字符串中存储敏感数据可能存在安全风险。您想在连接字符串中包含这些敏感数据吗?

我选择了否,并且在我的 Web.config 中发现了以下生成的新连接字符串:

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

同样在 Web.config 中:

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

一次传递密码以默认为 EF 的最佳位置是如何以及在哪里?

4

3 回答 3

3

有两种方法可以在 Web.Config 中不包含密码。

  1. 将密码放入 IIS 的主机设置中。IIS 为每个主机多保留一个主机配置,并且此主机配置中的所有设置都在 web.config 之前应用。唯一的问题是,只有管理员才能通过 IIS 管理控制台对其进行修改。

  2. 无密码连接字符串将使用应用程序池身份用户登录。您可以创建一个 windows 用户并将其设置为应用程序池标识。并授予对您网站内容文件夹的读取权限。并在 SQL 数据库中添加此用户并使此用户成为 db-owner。这是托管站点的最安全方式,因为每个应用程序池都在隔离中运行,并且可以为每个应用程序授予更多权限。唯一的问题是,任务管理器不再显示工作进程的站点名称。

在共享主机中,任何有权访问控制面板的人都可能可以访问所有内容,您几乎无法保护它,但我们就是这样做的。

  1. 我们为开发人员创建单独的 FTP 登录以上传代码。
  2. 管理员设置配置文件,开发人员永远不会上传 web.config。如果他们上传错误,管理员将登录到某个控制台或 ftp 并修改 web.config
  3. 不应授予开发人员对共享主机控制面板的管理员访问权限。设置网站以及上传代码和编辑 web.config 必须由管理员完成。
  4. Windows Azure 网站允许您在管理控制面板中修改 web.config。
于 2013-08-03T07:44:14.123 回答
1

与其将密码注入 web.config 中的连接字符串,不如将完整的连接字符串与密码一起使用,但对其进行加密,如本问题中所述。

于 2013-08-03T06:07:58.343 回答
1

在初始化实体时,我传递了在文件中使用相同格式构造的连接字符串Web.config

String EntityConnectionString = String.Format("metadata=res://*/App_Code.EFModel.csdl|res://*/App_Code.EFModel.ssdl|res://*/App_Code.EFModel.msl;provider=System.Data.SqlClient;provider connection string='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(EntityConnectionString);
于 2013-08-03T05:51:41.763 回答