Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830559
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: Java

2023-07-27 10:12:08

写在前面的话:在开发基于 PowerBuild 的 Client/Server 数据库系统的时候,我们使用得{BANNED}最佳多的是 ODBC 或者各数据库的专用连接方式,这些方式连接方式简洁,操作效率高,对于快速开发系统很有好处,然而这样的方式也有一个不容忽视的弊端。那就是数据库的连接参数必须写入到客户端的注册表中,而且是采用明码方式存放,这对于我们的系统带来了巨大的安全隐患,试想一下,如果我们的数据库服务器的地址、访问数据库的用户名和密码均暴露在客户端,那会是一种什么样的后果?如果我们{BANNED}最佳终发布的系统依然采用这样的方式,那系统的安全是完全没有保障的。

基于以上的原因,我们自然会需要想到一种解决办法,如果能将数据库地址、访问数据库的用户名、密码采取一种加密的方式存放,则系统的安全性就会大大提高。

然而遗憾的是,采用 ODBC或其他数据库的专有访问方式连接数据库,如果对存放于注册表中的数据库地址、访问数据库的用户名、,密码进行加密存放,结果是无法访问数据库。如果采用文件DSN来访问数据库呢?看起来是一个解决问题的思路,如果能采用文件 DSN 来访问数据库,则可以在读入 DSN 文件后,进行解密,然后交由 PowerBuild 程序管理数据库的连接,这似乎是一个不错的想法,可惜在实际测试中依然没有成功。

那么有没有其他的办法呢?近来 JAVA 程序很流行,很多数据库都提供了 JDBC 的方式访问数据库,经过反复测试,发现 JDBC 方式访问数据库,只需要将访问的参数传递给 PowerBuild 的数据库访问对象中定义的相关参数,就能够实现与数据库的连接与访问,而这些连接参数可以放置在一个配置文件中,通过一定的方式读取,如果我们能对这个配置文件进行加密,则既可以保证系统的安全性,又能提供一个很好的访问数据库的手段。

本文不探讨文件的加密部分,配置文件的加密请各位自己实现,本文仅探讨采用 JDBC 方式连接数据库。

以下内容以 PostgreSQL 12.7 数据库为例,PowerBuild 12.05.Net 版本上实现,其他数据库的连接方式大同小异,主要的区别在于 DriverName 和 URL 的参数不同,其他部分大体一致,请大家自己摸索。

系统环境说明:
开发环境:
  客户端:
     开发语言:PowerBuild 12.5
     客户端操作系统:Windows 10 企业版

服务器端:
    数据库:PostgreSQL 12.7
    操作系统:SCO OpenServer 6.0.0Ni
    网络 IP : 192.168.137.103
    数据库服务端口号:5432

开发测试:
step 1:修改 PostgreSQL 12.7 配置参数,开启远程访问权限。
     修改 data/pg_hba.conf 文件,将其中的:

点击(此处)折叠或打开

  1. host all all 127.0.0.1/32 true
修改成:

点击(此处)折叠或打开

  1. host all all 127.0.0.1/32 md5
并在其下面添加如下代码:

点击(此处)折叠或打开

  1. host all all 0.0.0.1/0 md5
   修改:postgresql.conf 文件,开启其中的访问端口和侦听的 IP 地址
   修改如下内容:

点击(此处)折叠或打开

  1. #port = 5432
   为:

点击(此处)折叠或打开

  1. port = 5432
   修改:

点击(此处)折叠或打开

  1. listen_addresses = 'localhost'
   为:

点击(此处)折叠或打开

  1. listen_addresses = '*'
   修改:

点击(此处)折叠或打开

  1. #password_encryption = md5
   为:

点击(此处)折叠或打开

  1. password_encryption = md5
step 2:下载 PostgreSQL 的 jdbc 驱动包 postgresql-42.2.23.jre6.jar:
   特别注意:由于 PowerBuild 12.5.Net 的 java 环境是 jdk 1.6 的,因此,我们只能下载并使用支持 jdk 1.6 的 jdbc 驱动包,截止在本文发稿时为止,{BANNED}最佳新的支持 jdk 1.6 的jdbc 驱动包为 postgresql-42.2.23.jre6.jar
   下载完成后,我们需要放本地的 java 安装目录的 lib 目录下,并设置 CLASSPATH 路径。

step 3:打开 PowerBuild 12.5.Net ,配置数据库访问
   在 Database Profile 中选择 jdbc,新建一个 DB profile ,配置相应的连接参数,内容如下:
   在 Correction 标签页中配置如下信息:
   Profile Name : test
   Driver Name  :org.postgresql.Driver
   URL       :jdbc:postgresql://192.168.137.103:5432/testdb
   Login ID    :postgres
   PossWord    :postgres
   在 Systemp 标签页中配置如下信息:
   Powerbuild Catalog Table Owner:public
   我们在 Preview 标签页中,点击 Test Connections , 可以看到测试连接成功。

step 4:
    新建一个项目,比如 test , 在应用的 open 事件中写入如下代码:

点击(此处)折叠或打开

  1. // Profile zProgCtl_DB
  2. SQLCA.DBMS = "JDBC"
  3. SQLCA.LogPass = "postgres"
  4. SQLCA.LogId = "postgres"
  5. SQLCA.AutoCommit = False
  6. SQLCA.DBParm = "Driver='org.postgresql.Driver',URL='jdbc:postgresql://192.168.137.103:5432/testdb',PBCatalogOwner='zprogctl'"
  7. Connect Using SQLCA;
  8. IF SQLCA.SQLCODE <> 0 Then
  9. MessageBox("","Connect Error");
  10. Return
  11. Else
  12. MessageBox("","Connect surcess");
  13. End if




  
阅读(581) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~