我正在使用Code First RC来构建类库,我希望能够加密我正在使用的连接字符串。类库的使用者可能是ASP.NET或Windows Forms应用程序,因此我需要一种兼容两者的加密方法。
看来我可以通过名称传递连接字符串到DbContext,但不是按值传递,如here所示,所以我认为在将字符串传递给DbContext之前我不能在程序中手动解密。有人能指出我正确的方向吗?
答案 0 :(得分:3)
您可以轻松加密任何.NET配置部分 - 不仅仅是在ASP.NET中,正如许多开发人员所想的那样,但绝对也可以在其他应用程序中加密。
在主题上查看Jon Galloway's blog post - 精彩阅读!
使用这种方法,您可以加密<connectionStrings>
部分 - 并且为了使其更容易,您也可以将该部分外部化为单独的文件。
因此,在您的Winforms应用的app.config
中,您将拥有:
<connectionStrings configSource="ConnectionStrings.config" />
,您的web.config
也适用于您的网络应用程序,引用的文件只包含<connectionStrings>
,可以加密。从您的配置加载适当的连接字符串,并将其传递到您的DbContext
构造函数中,您应该没问题。
答案 1 :(得分:1)
您可以将完整的连接字符串传递给DbContext:
在“其他DbContext构造函数选项”下:
...
- 您可以将完整的连接字符串传递给DbContext,而不仅仅是 数据库或连接字符串 名称。默认情况下此连接 字符串与。一起使用 System.Data.SqlClient提供程序; 这可以通过设置一个来改变 不同的执行方式 IConnectionFactory上 context.Database.DefaultConnectionFactory。
- 您可以通过传递现有的DbConnection对象 到DbContext构造函数。如果 连接对象是一个实例 EntityConnection,然后是模型 在连接中指定的将是 用于Database / Model First模式。 如果对象是。的实例 一些其他类型 - 例如, SqlConnection-那么上下文会 将它用于Code First模式。
...
如果是这样,那么您可以使用AES或其他加密来加密.config文件中的字符串,然后在运行时解密并将其提供给DbContext构造函数。