2011-03-28 79 views
4

我使用Code First RC来构建一个类库,我希望能够加密我正在使用的连接字符串。类库的使用者可以是ASP.NET或Windows Forms应用程序,所以我需要一种适用于这两者的加密方法。如何使用EF 4.1 Code First加密连接字符串?

看来我可以通过名称传递连接字符串到DbContext,但不是通过值,如here所示,所以我不认为我可以在将字符串传递给DbContext之前在程序中手动解密。任何人都可以将我指向正确的方向吗?

回答

3

您可以轻松加密任何.NET配置部分 - 不仅仅是在ASP.NET尽可能多的开发者似乎认为,但绝对也是其他应用程序。

的话题

退房Jon Galloway's blog post - 优秀的读!

通过这种方法,你可以加密<connectionStrings>部分 - 并使其更容易的是,你可以外部化该段成一个单独的文件,太。

app.config为您的WinForms应用

所以,你必须:

<connectionStrings configSource="ConnectionStrings.config" /> 

和相同的将是你的web.config为Web应用程序,并引用将包含只是<connectionStrings>的文件,并可能被加密。从您的配置中加载适当的连接字符串,并将其传递到您的DbContext构造函数中,并且您应该没问题。

+0

谢谢 - 效果很好。 – Roger 2011-04-08 20:27:12

+0

如果您正在使用转换,将加密部分工作吗?即。 'Web.Release.config'? – 2012-12-20 20:10:06

1

您可以通过一个完整的连接字符串到的DbContext:

http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

“其他的DbContext构造选项”:

...

  • 您可以通过一个完整的连接字符串到DbContext而不仅仅是 数据库或连接字符串 名称。默认情况下,此连接 字符串与 System.Data.SqlClient提供程序一起使用; 这可以通过设置不同 实施
    IConnectionFactory的到
    context.Database.DefaultConnectionFactory被改变。
  • 您可以通过它 传递到的DbContext构造使用现有的DbConnection对象。如果 连接对象是 EntityConnection的一个实例,则在连接中指定的模型 将在数据库/模型优先模式中使用 。 如果对象是 的某个其他类型的实例,例如 SqlConnection,则上下文将 用于代码优先模式。

...

如果这是真的,那么你可以使用AES或其他一些加密的加密字符串。config文件,然后在运行时解密并将其提供给DbContext构造函数。