如何在ADO.Net实体数据模型中为密码连接提供密码

sau*_*erl 21 c# ado.net entity-framework-4 odata

我一直在关注如何创建OData服务的本教程.

http://www.hanselman.com/blog/CreatingAnODataAPIForStackOverflowIncludingXMLAndJSONIn30Minutes.aspx

并且它完美无瑕地工作......但是,在实体数据模型向导中,当它要求您"选择您的数据连接"时,它会向您发出此警告.

"此连接字符串似乎包含连接到数据库所需的敏感数据(例如,密码).在连接字符串中存储敏感数据可能存在安全风险.是否要将此敏感数据包含在连接字符串中?"

如果我选择:"不,从连接字符串中排除敏感数据.我将在我的应用程序代码中设置它."

我没有看到我能在哪里,"在我的应用程序代码中"插入密码.(我的公司将它们加密到注册表中)

另外,我需要连接多个DB,具体取决于环境(Dev,CA或Prod),我需要知道连接字符串中引用了什么DB才能获得正确的密码.

谢谢.

Fra*_*cis 31

创建上下文时,可以设置连接字符串.要构建此连接字符串,您可以使用a解析没有密码的连接字符串EntityConnectionStringBuilder,然后使用另一个解析内部连接字符串ConnectionStringBuilder,具体取决于您的浏览器.然后,您可以设置密码并将其传递给构造函数.

var originalConnectionString = ConfigurationManager.ConnectionStrings["your_connection_string"].ConnectionString;
var entityBuilder = new EntityConnectionStringBuilder(originalConnectionString);
var factory = DbProviderFactories.GetFactory(entityBuilder.Provider);
var providerBuilder = factory.CreateConnectionStringBuilder();

providerBuilder.ConnectionString = entityBuilder.ProviderConnectionString;

providerBuilder.Add("Password", "Password123");

entityBuilder.ProviderConnectionString = providerBuilder.ToString();

using (var context = new YourContext(entityBuilder.ToString()))
{
    // TODO
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!没有使这个"即插即用"的单件是放置此代码的地方.我终于意识到我需要覆盖DataService <T> CreateDataSource() (2认同)
  • 当您重写DataService <T> CreateDataSource()时,它是公共的还是私有的? (2认同)

The*_*all 17

我在配置文件("XXXXX")中添加了一个"虚拟"密码,然后用实体构造函数中的真实密码替换了该值

public MyDatabaseContainer() : base("name=MyDatabaseContainer")
{
    Database.Connection.ConnectionString = Database.Connection.ConnectionString.Replace("XXXXX","realpwd");
}
Run Code Online (Sandbox Code Playgroud)


Vig*_*aja 11

修改实体的构造函数

 public sampleDBEntities() : base("name=sampleDBEntities")
    {
        this.Database.Connection.ConnectionString = @"Data Source=.\;Initial Catalog=sampleDB;Persist Security Info=True;User ID=sa;Password=Password123"; ;
    }
Run Code Online (Sandbox Code Playgroud)