关于IBatisNet的配置文件中数据库连接字符串加密处理
我们通常在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的配置文件中数据库连接字符串加密处理的更多相关文章
- ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法
ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法 第一种情况,本地开发时,使用本地数据库,如下面的代码 <connectionStrings& ...
- Springboot 之 自定义配置文件及读取配置文件注意:配置文件中的字符串不要有下划线 .配置中 key不能带下划线,value可以(下划线的坑,坑了我两天..特此纪念)
注意:配置文件中的字符串不要有下划线 .配置中 key不能带下划线,value可以 错误的.不能读取的例子: mySet .ABAP_AS_POOLED = ABAP_AS_WITH_P ...
- SpringBoot项目配置文件中密码的加密
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/15565862.html 版权声明:本文为博主原创文章,转载请附上博文链接! 公众号:追梦1819 ...
- web config数据库连接字符串加密
ASP.NET web.config中,数据库连接字符串的加密与解密 ASP.NET web.config中,数据库连接字符串的加密与解密. 开始--->运行,输入cmd,接着输入以下内容 加密 ...
- asp.net web.config数据库连接字符串加密与解密
在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的迁移带来麻烦,因为万一服务器地址或者数据库发生变更,那么我们就不得不修改源程序并重新将其编译.最好的解决方法 ...
- Castle ActiveRecord配置文件中连接字符串解密
使用Castle ActiveRecord通常都是使用配置文件进行数据库连接配置.然后采用如下方式初始化: IConfigurationSource source = ConfigurationMan ...
- IOS中把字符串加密/IOS中怎么样MD5加密/IOS中NSString分类的实现
看完过后,你会学到: 1学习IOS开发中的分类实现, 2以及类方法的书写, 3以及字符串的MD5加密/解密. ---------------------------wolfhous---------- ...
- EntLib 自动数据库连接字符串加密
const string provider = "RsaProtectedConfigurationProvider"; Configuration config = null; ...
- 不同数据库下的web.config中数据库连接字符串
<connectionStrings> <add name="OADBConnectionString" connectionString="Data ...
随机推荐
- 24. Swap Nodes in Pairs + 25. Reverse Nodes in k-Group
▶ 问题:单链表中的元素进行交换或轮换. ▶ 24. 每两个元素进行翻转.如 [1 → 2 → 3 → 4 → 5] 变换为 [2 → 1 → 4 → 3 → 5] ● 初版代码,4 ms class ...
- WinRAR命令行版本 rar.exe使用详解
RAR 命令行语法~~~~~~~~~~~~~~ 语法 RAR.exe <命令> [ -<开关> ] <压缩文件> [ <@列表文件...> ] ...
- AS3 localToGlobal、globalToLocal方法的总结
(1).localToGlobal (point) 把point看成在(1)内部,计算出该point相当于stage的坐标 (2).globalToLocal (point) point为全局 ...
- python之建完model之后操作admin
1)建完model 之后,运行./manage.py migrate 2)建立管理员:./manage.py createsuperuser 3)输入用户名和命令上提示的信息,在点击网址,输入admi ...
- COM组件三大接口IUnknown、IClassFactory、IDispatch。
转自:http://blog.csdn.net/chenyujing1234/article/details/7753863 (1)COM组件有三个最基本的接口类,分别是IUnknown.IClass ...
- 疯狂JAVA——第八章 java集合
集合类主要负责保存.盛装其他数据,因此集合类也被称为容器类. 数组元素既可以是基本类型的值,也可以是对象(实际上是保存的对象的引用): 集合里只能保存对象.
- 【转】Android Shape绘制虚线在手机端查看是实线的问题
Android share绘制虚线在手机上显示实线问题 给控件添加Drawableleft等图片后,单独给图片设置动画效果,参考文章: http://blog.csdn.net/langzxz/art ...
- SQL Server 2016/2014/2012/2008/2005/2000简体中文企业版下载地址
为什么只提供企业版下载呢?因为不管你是学生还是工作研究人员,企业版都是功能最为齐全的一个版本,比如企业版都集成了SQL Server Management Studio管理界面(俗称企业管理器的可视化 ...
- css写三角形
#triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 5 ...
- cin中函数的作用
cin是istream类的对象,它是从标准输入设备(键盘)获取数据,程序中的变量通过流提取符">>"从流中提取数据.流提取符">>"从流 ...