在Winform开发框架中实现对数据库的加密支持

在很多情况下,我们需要对数据库进行加密,特别是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开发框架用到的数据库字机密机制的一种,供大家参考和指正。

本文转自博客园伍华聪的博客,原文链接:在Winform开发框架中实现对数据库的加密支持,如需转载请自行联系原博主。

时间: 2024-09-21 07:57:11

在Winform开发框架中实现对数据库的加密支持的相关文章

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

在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适应性和强壮型.还有一种情况,由于业务数据库的不断膨胀或者方便数据库的切割隔离,有时候也会把不同的业务数据库进行分拆,如权限提供数据库,客户关系管理数据库,工作流程数据库,企业营运数据库等等,因此在一个系统里面,同时使用2个或者以上的数据库的情况也是有的.针对这两种情况,本文介绍在我的Winform开

Winform开发框架中实现同时兼容多种数据库类型处理

在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适应性和强壮型.还有一种情况,由于业务数据库的不断膨胀或者方便数据库的切割隔离,有时候也会把不同的业务数据库进行分拆,如权限提供数据库,客户关系管理数据库,工作流程数据库,企业营运数据库等等,因此在一个系统里面,同时使用2个或者以上的数据库的情况也是有的. 在我较早期的一篇随笔<Winform开发框架

Winform开发框架中的内容及文档管理模块功能介绍

在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInform项目中利用ZetaHtmlEditControl进行HTML内容管理,以及利用TX TextControl控件进行WORD文档管理,这两方面都是我们一般进行内容和文档管理所必须的. 1.内容及文档管理模块功能介绍 整个模块,支持WInform框架和混合式开发框架两种模式,都是基于WInform

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

在我们开发工作流的时候,往往需要设计到具体业务表单信息的编辑,有些是采用动态编辑的,有些则是在开发过程中处理的,各有各的优点,动态编辑的则方便维护各种各样的表单,但是数据的绑定及处理则比较麻烦,而自定义开发的,则数据弹性很大,方便修改调整.本篇随笔基于表单的开发设计过程,介绍在工作流中如何新增一个业务表单,以便快速的实现审批业务的上线处理. 1.业务表单的基类继承 首先我们来了解一下业务表单的对应关系,一般创建一个业务流程处理,都需要有一个具体的创建业务表单的界面,以及一个查看处理表单的界面.

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

在实际的系统开发中,我们往往需要一些简单的的案例代码,基于此目的我把Winform开发框架中各种闪光点和不错的功能,有些是我们对功能模块的简单封装,而有些则是引入了一些应用广泛的开源组件进行集成使用,因此把它们做了一个Demo进行展示,以方便我们随时了解和参考,并能够快速应用相应的场景到具体的项目中. 1.闪屏展示界面及主体界面 在很多系统里面,提供一个设计不错的图片作为程序界面展示的效果是挺不错的,这个小程序也不例外,基本上整合了一些WInform界面常用的各种功能. 而整个案例的界面的界面以

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

在我们开发工作流模块的时候,有时候填写申请单过程中,暂时不想提交审批,那么可以暂存为草稿,以供下次继续填写或者提交处理,那么这个草稿的功能是比较实用的,否则对于一些填写内容比较多的申请单,每次要重填写很多数据,那会被用户骂的,从用户的角度上来讲,提供草稿保存的功能是比较友好的.本篇随笔介绍在工作流模块中使用一种通用的存储方式来存储及显示申请单草稿的信息. 1.申请单填写 在我们提交申请前,我们一般是需要填写一些相关的资料,如下界面所示. 这个表单记录的信息不多,不过提供存为草稿的功能也是要的,我

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

在前面介绍了框架中工作流的几个开发过程,本篇随笔重点介绍一下日常审批环节中的具体处理过程,从开始创建表单,以及各个审批.会签过程的流转过程,希望大家对其中流程的处理有一个大概的印象. 1.请假申请表单 这里介绍的具体功能,是在业务表单已经完成好,具体的使用过程,我们以请假申请单为例,在我们创建对应的流程步骤如下所示后, 我们就可以开始创建具体的业务审批流程了,在业务受理列表里面选择对应的请假申请,弹出相应的创建业务流程表单窗体. 单击[发送]按钮,会要求选择下一步的审批人,如下所示.  这样对应

Winform开发框架中工作流模块之审批会签操作(2)

前面随笔介绍了请假申请单和报销申请单两个不同的业务表单的流程处理,一个是单表信息,一个包含明细的主从表信息,后者包含了条件流程的处理,在流程审批中,一般还有一种流程处理就是会签的操作,会签处理是几个审批步骤中审批人同时处理是否通过的,一般同时通过即为通过.本篇随笔介绍工作流中的会签处理过程. 1.会签流程定义 会签是指创建一个或多个子流程供相关人员进行审批,等待全部人员完成处理后再次回到主流程上,然后决定是否继续流转到下一个流程步骤上去,一般的申请单的主流程如下所示. 这里设置的会签处理就是其中

PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQL数据库,希望大家多多提意见. 1.PostgreSQL数据库介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL.它具有很多不错的特点: 开源:PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 B