【问题标题】:How do I encrypt the connection string with EF 4.1 Code First?如何使用 EF 4.1 Code First 加密连接字符串?
【发布时间】:2011-03-28 16:27:41
【问题描述】:

我正在使用 Code First RC 构建一个类库,并且我希望能够加密我正在使用的连接字符串。类库的使用者可能是 ASP.NET 或 Windows 窗体应用程序,因此我需要一种适用于两者的加密方法。

看来我可以按名称将连接字符串传递给 DbContext,但不能按值传递,如 here 所示,所以我认为在将字符串传递给 DbContext 之前我不能在程序中手动解密。谁能指出我正确的方向?

【问题讨论】:

    标签: winforms entity-framework code-first


    【解决方案1】:

    您可以轻松地加密任何 .NET 配置部分 - 不仅像许多开发人员认为的那样在 ASP.NET 中,而且在其他应用程序中也绝对如此。

    查看Jon Galloway's blog post 的主题 - 精彩阅读!

    使用这种方法,您可以加密 <connectionStrings> 部分 - 为了更容易,您也可以将该部分外部化到一个单独的文件中。

    因此,在您的 Winforms 应用程序的 app.config 中,您将拥有:

    <connectionStrings configSource="ConnectionStrings.config" />
    

    您的 Web 应用程序的 web.config 也是如此,引用的文件将仅包含 &lt;connectionStrings&gt; 并且可以加密。从您的配置中加载适当的连接字符串,并将其传递给您的 DbContext 构造函数,您应该没问题。

    【讨论】:

    • 如果您使用转换,加密部分是否有效? IE。 Web.Release.config?
    【解决方案2】:

    您可以将完整的连接字符串传递给 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。
    • 您可以通过传递现有的 DbConnection 对象来使用它 到 DbContext 构造函数。如果 连接对象是一个实例 EntityConnection,然后是模型 在连接中指定的将是 用于数据库/模型优先模式。 如果对象是 其他类型——例如, SqlConnection——然后上下文将 将其用于 Code First 模式。

    ...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多