最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

Entity FrameWork加密数据库连接字符串的方法

CSharp 宇托 928浏览 暂无评论

最近做一个C#的项目,用的是Entity FrameWork和Oralce。需要把连接数据库的连接字符串加密,网上找了一堆的资料,发现SqlServer的资料很多,Oralce的相对比较少。基本上找到的都没什么用。

后面自己在看DbContext的构造方法时,发现有这个一个构造方法。

C#
//
// Summary:
//     Constructs a new context instance using the existing connection to connect
//     to a database.  The connection will not be disposed when the context is disposed
//     if contextOwnsConnection is false.
//
// Parameters:
//   existingConnection:
//     An existing connection to use for the new context.
//
//   contextOwnsConnection:
//     If set to true the connection is disposed when the context is disposed, otherwise
//     the caller must dispose the connection.
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
public DbContext(DbConnection existingConnection, bool contextOwnsConnection);

用这个构造方法的话,只要提供一个数据库连接就行。在网上找了一下,发现可以用下面的代码生成一个数据库连接。

C#
var providerName = ConfigurationManager.ConnectionStrings["Test"].ProviderName;
var conn = DbProviderFactories.GetFactory(providerName).CreateConnection();
var connectString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
conn.ConnectionString = connectString;

这样的话,只要把ConnectionString解密的功能加上就行了。我的代码如下:

App.config中的连接字符串定义,其中xxxx部分表示加密字符串:

XML
<connectionStrings>
  <add name="Test" connectionString="xxxx" providerName="Oracle.ManagedDataAccess.Client" />
</connectionStrings>

DbContext实现的一部分代码如下:

C#
public partial class TestContext : DbContext
{
    public TestContext()
        : base(GetConnection(), true)
    { }

    public static DbConnection GetConnection()
    {
        var providerName = ConfigurationManager.ConnectionStrings["Test"].ProviderName;
        var conn = DbProviderFactories.GetFactory(providerName).CreateConnection();
        var connectString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
        conn.ConnectionString = EncryUtil.DecryptFromBase64ToString(connectString);
        return conn;
    }
}

转载请注明:宇托的狗窝 » Entity FrameWork加密数据库连接字符串的方法

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址