写在前面的话:在开发基于 PowerBuild 的 Client/Server 数据库系统的时候,我们使用得最多的是 ODBC 或者各数据库的专用连接方式,这些方式连接方式简洁,操作效率高,对于快速开发系统很有好处,然而这样的方式也有一个不容忽视的弊端。那就是数据库的连接参数必须写入到客户端的注册表中,而且是采用明码方式存放,这对于我们的系统带来了巨大的安全隐患,试想一下,如果我们的数据库服务器的地址、访问数据库的用户名和密码均暴露在客户端,那会是一种什么样的后果?如果我们最终发布的系统依然采用这样的方式,那系统的安全是完全没有保障的。
基于以上的原因,我们自然会需要想到一种解决办法,如果能将数据库地址、访问数据库的用户名、密码采取一种加密的方式存放,则系统的安全性就会大大提高。
然而遗憾的是,采用 ODBC或其他数据库的专有访问方式连接数据库,如果对存放于注册表中的数据库地址、访问数据库的用户名、,密码进行加密存放,结果是无法访问数据库。如果采用文件DSN来访问数据库呢?看起来是一个解决问题的思路,如果能采用文件 DSN 来访问数据库,则可以在读入 DSN 文件后,进行解密,然后交由 PowerBuild 程序管理数据库的连接,这似乎是一个不错的想法,可惜在实际测试中依然没有成功。
那么有没有其他的办法呢?近来 JAVA 程序很流行,很多数据库都提供了 JDBC 的方式访问数据库,经过反复测试,发现 JDBC 方式访问数据库,只需要将访问的参数传递给 PowerBuild 的数据库访问对象中定义的相关参数,就能够实现与数据库的连接与访问,而这些连接参数可以放置在一个配置文件中,通过一定的方式读取,如果我们能对这个配置文件进行加密,则既可以保证系统的安全性,又能提供一个很好的访问数据库的手段。
本文不探讨文件的加密部分,配置文件的加密请各位自己实现,本文仅探讨采用 JDBC 方式连接数据库。
以下内容以 SQLAnyWhere 10.01 数据库为例,PowerBuild 12.01.Net 版本上实现,其他数据库的连接方式大同小异,主要的区别在于 DriverName 和 URL 的参数不同,其他部分大体一致,请大家自己摸索。
1、首先启动 SQLAnyWhere 的 SyBase Central 管理中心来创建一个数据库,我们假设数据库名为 testdb,数据库的用户为 test、访问密码为 test ,数据库部署在本机上,访问地址为 localhost 。
2、启动 SQLAnyWhere 10.01 的网络服务器,加载 testdb 数据库。
3、在 PowerBuild 12.01中打开 DB Profile,展开 JDB JDBC 项,点击右键,选择 New Profile 来配置 JDBC 访问的参数信息。
3、在 connection 标签页中定义信息内容(信息内容如下)
Profile Name:Test
URL : jdbc:sybase:Tds:localhost:2638?ServiceName=TestDB
Driver Name : com.sybase.jdbc3.jdbc.SybDataSource
Login ID : test
Password : test
4、在系统的环境参数中配置 CLASSPATH=<你的 SQLAnyWhere 10.01 的安装目录\java\jconn3.jar>
5、点击 Preview 标签页,我们观察到配置的信息内容如下:
// Profile Account
SQLCA.DBMS = "JDBC"
SQLCA.LogPass = <*******>
SQLCA.LogId = "test"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Driver='com.sybase.jdbc3.jdbc.SybDataSource',URL='jdbc:sybase:Tds:localhost:2638?ServiceName=TestDB'"
点击该页面上的 Test Connection 按钮看看,是不是连接上了? ^_^.
至于说在 PowerBuild 程序中如何调用上面的信息,和 ODBC 的连接方式一样,不需要俺在继续啰嗦了吧?
需要注意的是:采用此种连接方式,我们需要安装 jre 或者是 jdk , 俺采用的是 1.6 的版本。
==================================================================
PS:原创文档,请尊重知识产权,转载请注明来源。
风之舞 2011-10-03
阅读(2604) | 评论(0) | 转发(0) |