在很多情况下,我们需要对数据库进行加密,特别是Access数据库、Sqlite数据库,这些直接部署在客户端的数据,因为数据也是客户的资产,数据库总是存在很多相关的秘密或者重要的业务数据,所以一般来说,数据库是比较敏感的。由于我的Winform开发框架数据库访问模块中采用了EnterpriseLibrary模块,因此其实也可以使用其中的Crytography Application Block进行加解密处理。

由于不想引入太多这些额外的模块,或者为了简化客户端的配置考虑,直接在EnterpriseLibrary模块内部对数据库连接字符串,增加密码部分,也是一个有效的方法,本文通过介绍这种方式,实现对加密Access数据库连接字符串的处理,并能顺利访问带密码的Access数据库。

1、数据库选择

如果要加密的是Access数据库,必须选择Access2007以上版本,这个版本的密码是经过128位的特殊处理,目前好像还是比较难破解,也好像没有找到合适的破解工具,如果是Access2000,那破解密码的工具真是多了去的了。

Access2007版本的数据库引擎,一般没有安装Office2007的电脑,是需要特别安装AccessDatabaseEngine这个驱动的。否则会提示“The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.”(未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序)的错误。到微软网站下载对应版本的驱动即可。

如果要加密的是Sqlite数据库,那么也是可以比较有效的,他的密码也是比较难于破解的。

上面两种客户端数据库,打开后先通过软件本身的功能进行加密,密码我们在开发初期就设定即可,客户一般不需要了解,他们或者其他人员复制出去,也无法单独使用,确保了数据库的安全性。

2、数据库加密处理

1)Access的数据库加密

如果是对Access的数据库加密,记住选择Access2007以上的格式,然后以独占方式打开Access文件,如下图所示。

然后在数据库工具选项里面,选择用密码进行加密,在弹出的对话框输入你的密码即可。

Office2007的密码强度还是不错的,至少我找了好几个工具,没能顺利破解出我的密码内容。

2)Sqlite数据库加密

Sqlite的数据库加密也很简单,我这里使用Sqlite Developer打开已有数据库,然后在数据库右键上选择Set Encryption Key,在弹出的对话框中输入密码即可。

我曾经专门针对Sqlite数据库机密机制做了一些了解,好像强度还是不错,而且据说性能损失是很少的。我在开发测试的时候,性能方面确实看不出太大的干扰。

3、连接字符串增加加密内容

由于我们希望数据库配置项尽可能简洁,因此可以不用在配置文件中指定访问密码,这样也避免了加密字符串的泄密问题,我们可以通过动态设置数据库访问对象Database 的数据库访问密码属性进行内存上处理。如下代码所示是对Access数据库连接字符串进行增加加密字符串的操作。

        #region 连接字符串加密
        /// <summary>/// 根据配置数据库配置名称生成Database对象/// </summary>/// <returns></returns>protected virtual Database CreateDatabase(){Database db = null;if (string.IsNullOrEmpty(dbConfigName)){db = DatabaseFactory.CreateDatabase();}else{db = DatabaseFactory.CreateDatabase(dbConfigName);}DbConnectionStringBuilder sb = db.DbProviderFactory.CreateConnectionStringBuilder();sb.ConnectionString = GetConnectionString();GenericDatabase newDb = new GenericDatabase(sb.ToString(), db.DbProviderFactory);db = newDb;return db;}/// <summary>/// 动态改变或者连接字符串/// </summary>/// <returns></returns>protected virtual string GetConnectionString(){string connectionString = "";DatabaseSettings setting = ConfigurationManager.GetSection("dataConfiguration") as DatabaseSettings;if(setting != null){string defaultConnection = setting.DefaultDatabase;connectionString = ConfigurationManager.ConnectionStrings[defaultConnection].ConnectionString;//尝试加密或者解密if(!connectionString.EndsWith(";")){connectionString += ";";}connectionString += string.Format("Jet OLEDB:Database Password=testpassword;");}return connectionString;}#endregion

通过在访问数据库的时候,动态增加加密的连接字符串,在系统的配置文件上,就和普通的没什么差别了,如下所示

  <connectionStrings><!--路径符号|DataDirectory|代表当前运行目录-->
<add name="Access" providerName="System.Data.OleDb"connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb;User ID=Admin;"/><add name="sqlite" providerName="System.Data.SQLite" connectionString="Data Source=|DataDirectory|\ForumMis.db;Version=3;"/></connectionStrings>

上面配置文件,Access数据库用的是2007格式的,所以用了Provider=Microsoft.ACE.OLEDB.12.0,如果是Access2000的话,那么就是Provider=Microsoft.Jet.OLEDB.4.0(基于安全原因,不用)。

Sqlite数据库的操作也类似, 它的加密字符串例子如下:Data Source=c:\mydb.db;Version=3;Password=myPassword;。

通过动态在连接字符串中增加加密字符串的方式,对于这些部署到客户端的数据库,第一个是提高安全性,用户分析不到那种加密类型;第二个是用户连接字符串不受干扰,可以正常阅读;第三是不用引入更多的模块和代码去实现。

以上只是我Winform开发框架用到的数据库字机密机制的一种,供大家参考和指正。

主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架、Web开发框架、WCF开发框架、微信门户开发框架的研究及应用。
  转载请注明出处:
撰写人:伍华聪  http://www.iqidi.com 

转载于:https://www.cnblogs.com/ziyandeyanhuo/p/7877540.html

在Winform开发框架中实现对数据库的加密支持(转)相关推荐

  1. Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持

    Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持 在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很 ...

  2. Winform开发框架中工作流模块的业务表单开发

    在我们开发工作流的时候,往往需要设计到具体业务表单信息的编辑,有些是采用动态编辑的,有些则是在开发过程中处理的,各有各的优点,动态编辑的则方便维护各种各样的表单,但是数据的绑定及处理则比较麻烦,而自定 ...

  3. Winform开发框架中工作流模块之审批会签操作

    在前面介绍了框架中工作流的几个开发过程,本篇随笔重点介绍一下日常审批环节中的具体处理过程,从开始创建表单,以及各个审批.会签过程的流转过程,希望大家对其中流程的处理有一个大概的印象. 1.请假申请表单 ...

  4. Winform开发框架中的综合案例Demo

    在实际的系统开发中,我们往往需要一些简单的的案例代码,基于此目的我把Winform开发框架中各种闪光点和不错的功能,有些是我们对功能模块的简单封装,而有些则是引入了一些应用广泛的开源组件进行集成使用, ...

  5. Winform开发框架中工作流模块之申请单草稿处理

    在我们开发工作流模块的时候,有时候填写申请单过程中,暂时不想提交审批,那么可以暂存为草稿,以供下次继续填写或者提交处理,那么这个草稿的功能是比较实用的,否则对于一些填写内容比较多的申请单,每次要重填写 ...

  6. 参照企业微信审批业务,在Winform开发框架中工作流模块的实现业务审批

    目前微信的企业号已经切换到企业微信里面,这个是一个APP程序,提供了很丰富的企业应用,其中包括了业务审批处理,审批业务包括请假.报销.费用.出差等很多个审批场景,在Winform开发框架中工作流模块这 ...

  7. dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

    DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...

  8. Winform开发框架中工作流模块的动态处理

    在工作流处理表中,首先我们区分流程模板和流程实例两个部分,这个其实就是类似模板和具体文档的概念,我们一份模板可以创建很多个类似的文档,文档样式结构类似的.同理,流程模板实例为流程实例后,就是具体的一个 ...

  9. Winform开发框架之通用短信邮件通知模块

    在做Winform项目的时候,一直有一个梦想,就是希望把所有的组件模块组合即可组装成一个完整的项目系统(或者至少可以大部分完成).在之前介绍的<Winform开发框架之通用附件管理模块>里 ...

  10. Winform开发框架之Office Ribbon界面

    Winform开发框架之Office Ribbon界面 在前面几篇文章介绍我的Winform框架随笔文章,包括有<Winform开发框架之字典数据管理>.<Winform开发框架之权 ...

最新文章

  1. 2021年春季学期-信号与系统-第四次作业参考答案
  2. 国家服务器1eb硬盘,仅一个月:奇亚币已占用超过1EB存储空间
  3. 高斯混合模型GMM的理解
  4. django2.0 自己入门记录一些基础url 模板等
  5. 用户界面样式-鼠标样式(HTML、CSS)
  6. 单向流动的拓扑结构_只允许数据在传输介质中单向流动的拓扑结构是
  7. 怎么用计算机技术预测蛋白质结构,蛋白质结构预测及方法介绍 一搜索无重复 - 生物科学 - 小木虫 - 学术 科研 互动社区...
  8. ElasticSearch全文搜索引擎之查询API操作详解
  9. java核心技术卷1 2 英文版pdf/epub+源代码 Core Java, 11th Edition
  10. MySql触发器以及实例
  11. 国际版云购网站代码开发实现案例
  12. 超好用的后台管理的框架
  13. 制作Thinkpad五合一WIN7光盘(只要两个小步骤,并附$OEM$资料包下载)
  14. 银行卡数据API接口有哪些?
  15. hp 交换机远程连接_Hp服务器 iLO3 使用方法
  16. C6678信号处理板学习资料:基于6U VPX TMS320C6678+XC7K325T 的信号处理板
  17. haribote bootpack.c 主任务程序代码阅读注释
  18. 推荐:几个优质的数据公众号
  19. 数据校验(身份证,ip地址,银行卡号等)
  20. 查看Oracle数据库命中率

热门文章

  1. openai-gpt_GPT-3 101:简介
  2. android gsm编程,Android新手入门 FAQ
  3. 台服海岛纪元显示无法连接服务器,打开海岛纪元提示网络异常或者连接不上
  4. Shell脚本中的分号使用
  5. 软件构架 课堂练习一
  6. java.lang.OutOfMemoryError: PermGen space tomcat启动项目出错
  7. CImage对象使用罗伯特算子进行边缘检测
  8. 【转】彻底理解安卓里的ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹含义
  9. 从华住遭遇“抄袭” 看酒店行业互联网发展现状
  10. WPF-21:WPF实现仿安卓的图案密码键盘(改进)