我们通常在IBatisNet配置文件 properties.config 加入数据库连接字符串。数据库连接字符串直接放在里面,没有被加密,很不安全。如果我们把 properties.config 文件作为资源嵌入到程序集,似乎可用解决安全问题,但是又出现新的问题,那就是部署。因为用户部署时,是需要重新设置数据库地址,名称,用户名,密码等值 的。

解决办法:
        数据库连接字符串还是放在原来的程序的配置文件中,比如 WebForms 的web.config中, WinForms的 App.config中,这样我们可以以使用企业库管理工具来加密这个配置文件。

然后,通过编程的方式加入数据库连接字符串。

DomSqlMapBuilder builder = new DomSqlMapBuilder();
NameValueCollection prop = new NameValueCollection();
//DatabaseHelper.GetConnectionString()是用来从原来的配置文件中获得数据库连接字符串
prop.Add("connectionString", DatabaseHelper.GetConnectionString());
builder.Properties = prop;
ISqlMapper sqlMapper = builder.Configure();

由于我们自己通过编程的方式提供了 ISqlMapper ,所以我们需要考虑性能的问题.SqlMap是线程安全的,所以我们可以考虑使用单件模式来提供 ISqlMapper .

整个提供 ISqlMapper 的类如下:

//-----------------------------------------------------------------------------------------
// 模块编号:
// 文件名: SqlMapperHelper.cs
// 描述: SqlMapperHelper 类
// 作者:ChenJie 
// 编写日期:2007-5-26
// Copyright 2007
//-----------------------------------------------------------------------------------------
using System;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
using System.Collections.Specialized;

namespace Novelty.CustomSystem.IBatisNet
{
    /// <summary>
    /// 提供 ISqlMapper 对象,属于单件模式(Singleton Pattern)
    /// </summary>
    public class SqlMapperHelper
    {
        #region 私有变量
        /// <summary>
        /// ISqlMapper 实例
        /// </summary>
        private ISqlMapper _sqlMapper;
         #endregion

         #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        SqlMapperHelper()
        {
            CreateSqlMapper();
        }
        #endregion

        #region 嵌套类
        class Nested
        {
            static Nested()
            {
            }
            internal static readonly SqlMapperHelper instance = new SqlMapperHelper();
        }
        #endregion

        #region 属性
        /// <summary>
        /// 唯一实例
        /// </summary>
        public static SqlMapperHelper Instance
        {
            get
            {
                return Nested.instance;
            }
        }
        #endregion

        #region 公有方法
        /// <summary>
        /// 刷新 ISqlMapper 对象
        /// 原因:当数据库连接出现变化,需要刷新该对象
        /// </summary>
        public void RefreshSqlMapper()
        {
            CreateSqlMapper();
        }
        #endregion

        #region 私有方法
        /// <summary>
        /// 创建 ISqlMapper 对象
        /// </summary>
        private void CreateSqlMapper()
        {
            //-----(1)
            //DomSqlMapBuilder builder = new DomSqlMapBuilder();
            //ISqlMapper _sqlMapper = builder.Configure("SqlMap.config");     
            //-----(2)
            //SqlMap是线程安全的
            //Mapper.Get()方法和Mapper.Instance()方法调用默认的 SqlMap.config 配置文件来创建SqlMapper
            //ISqlMapper sm = Mapper.Get();
            //以下注释内容摘自一个网友的blog:www.cnblogs.com/shanyou/articles/388602.html 。
            //与使用DomSqlMapBuilder类的区别是,Mapper.Get()不需要指定配置文件的名称,并且使用Mapper.Get()返回SqlMapper后如果映射的XML没有错误的话,会将该XML文件缓存到内存,
            //下次调用的时候就不需要在检查XML文件,直到SqlMap.config被改变,这样将大大的提高了程序的性能,而使用DomSqlMapBuilder建立的SqlMapper每次都要先分析映射的XML文件,性能将大大的降低
            

            DomSqlMapBuilder builder = new DomSqlMapBuilder();
            NameValueCollection prop = new NameValueCollection();
            prop.Add("connectionString", DatabaseHelper.GetConnectionString());
            builder.Properties = prop;
            _sqlMapper = builder.Configure();
        }
        #endregion

        #region 对外属性
        /// <summary>
        /// ISqlMapper 实例
        /// </summary>
        public ISqlMapper SqlMapper
        {
            get
            {
                return _sqlMapper;
            }
        }
        #endregion

    }
}

关于IBatisNet的配置文件中数据库连接字符串加密处理的更多相关文章

  1. ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

    ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...

  2. Springboot 之 自定义配置文件及读取配置文件注意:配置文件中的字符串不要有下划线 .配置中 key不能带下划线,value可以(下划线的坑,坑了我两天..特此纪念)

    注意:配置文件中的字符串不要有下划线 .配置中  key不能带下划线,value可以 错误的.不能读取的例子: mySet .ABAP_AS_POOLED      =  ABAP_AS_WITH_P ...

  3. SpringBoot项目配置文件中密码的加密

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/15565862.html 版权声明:本文为博主原创文章,转载请附上博文链接! 公众号:追梦1819 ...

  4. web config数据库连接字符串加密

    ASP.NET web.config中,数据库连接字符串的加密与解密 ASP.NET web.config中,数据库连接字符串的加密与解密. 开始--->运行,输入cmd,接着输入以下内容 加密 ...

  5. asp.net web.config数据库连接字符串加密与解密

    在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或者数据库发生变更,那么我们就不得不修改源程序并重新将其编译.最好的解决方法 ...

  6. Castle ActiveRecord配置文件中连接字符串解密

    使用Castle ActiveRecord通常都是使用配置文件进行数据库连接配置.然后采用如下方式初始化: IConfigurationSource source = ConfigurationMan ...

  7. IOS中把字符串加密/IOS中怎么样MD5加密/IOS中NSString分类的实现

    看完过后,你会学到: 1学习IOS开发中的分类实现, 2以及类方法的书写, 3以及字符串的MD5加密/解密. ---------------------------wolfhous---------- ...

  8. EntLib 自动数据库连接字符串加密

    const string provider = "RsaProtectedConfigurationProvider"; Configuration config = null; ...

  9. 不同数据库下的web.config中数据库连接字符串

    <connectionStrings> <add name="OADBConnectionString" connectionString="Data ...

随机推荐

  1. MVC,MVP 和 MVVM 模式如何选择?

    转摘:http://www.linuxidc.com/Linux/2015-10/124622.htm 前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决 ...

  2. 62. 用流程自带的打印功能,IE浏览器打印出来是空白

    用流程自带的打印功能,IE浏览器打印出来是空白的这个问题确认是由于IE启用了兼容模式导致的了把IE的兼容模式关掉就行了

  3. 用strings命令查看kafka-log内容 过滤二进制编码

    kafka的log内容格式还不没怎么了解,想快速浏览消息内容的话,除了使用它自带的kafka-console-consumer.sh脚本,还可以直接去看log文件本身,不过内容里有部分二进制字符,通过 ...

  4. JS时间格式和时间戳的互转

    //时间格式转为时间戳 function sjc(){ var date = new Date(); //时间对象 var str = date.getTime(); //转换成时间戳 } //时间戳 ...

  5. 递归实现tree JQuery

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. Oracle+Mybatis批量插入,更新和删除

    1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...

  7. python内存泄漏

    记录: 一个脚本在连续运行后,使用内存越来越大,在循环后手动添加gc.collect()没有作用. 尝试方法: 去除所有函数中当作参数传入的全局变量 使用全局redis对象,不再当作参数传入 循环末尾 ...

  8. ubuntu 命令安装软件

    终端安装(命令安装).第一,找到终端或者按住Ctrl+Alt+t 打开终端;第二输入命令,命令如下:cd /xxx/xxx/,(xxx代表软件包路径,一直到你放置软件包的文件夹),之后输入命令:sud ...

  9. 迷你MVVM框架 avalonjs 1.3.7发布

    又到每个月的15号了,现在avalon已经固定在每个月的15号发布新版本.这次发布又带来许多新特性,让大家写码更加轻松,借助于"操作数据即操作DOM"的核心理念与双向绑定机制,现在 ...

  10. 百度BAE的使用