`
txf2004
  • 浏览: 7077671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PB应用的数据库联接以及安全防范

阅读更多

PB应用的数据库联接以及安全防范

阅读提示:一种方法,可以解决数据库应用的安全性问题,通过INI文件和数据库的巧妙处理,在程序中提供用户一种接口,可以随时修改数据库的联接参数,而又不给外人以蛛丝马迹,做到神不知鬼不觉。

随着因特网的深入人心,网络技术不断发展,数据的保密性要求也越来越高。在通常的Server/Client方式MIS开发中,由于程序要与数据库服务器保持联接,为了程序的灵活和扩充性,联接参数(用户ID和登录口令)又不能在程序中写死(其实写死也不是一种好的方法),一般的方法无外乎有两种:其一是把联接参数存放在注册表中;其二就是直接读INI文件。

而综上几种方法安全性都不太好,给人以可乘之机。

本人找到一种方法,可以解决数据库应用的安全性问题,通过INI文件和数据库的巧妙处理,在程序中提供用户一种接口,可以随时修改数据库的联接参数,而又不给外人以蛛丝马迹,做到神不知鬼不觉。

实现方法如下:

1、创建INI文件,记录数据库联接的一些方便程序分发的参数DBMSSERVERNAMELOGID具体如下:

//创建成INI文件(rsgl.ini

[Database]

DBMS=O84 ORACLE <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">8.0.4</chsdate>

ServerName=gxmistest //数据库服务器名

LogId=rsgl //实际的数据库登录用户

然后,在数据库中创建一个中间用户PUB,登录口令PUB,赋予PUB用户CONNECTRESOURCE权限,再在其中创建表CREATE TABLE TBL_PUB_PASSSHADOW (PASSSHADOW VARCHAR2(50) NOT NULL)用于存放实际的数据库联接的登录口令(当然要经过加密)。加密函数网上多的是,在此就不累述。我自已创建了一个字符串加密函数f_password(string old_str,string new_str,integer jm_mode)jm_mode参数用以区分函数的加(解)密,old_strnew_str两参数分别为加(解)密的字符串。

2、就开始编写应用程序了,在应用程序的OPEN事件中进行数据库登录联接,程序脚本如下:

string ls_inifile,ls_starttimes

string ls_logid,ls_logpass,ls_dbms

string ls_pass,ls_sql,ls_code,ls_server

//设置INI文件

ls_inifile = 'rsgl.ini'

ls_server = ProfileString (ls_inifile, "database", "ServerName", "")

ls_logid = ProfileString (ls_inifile, "database", "LogId","")

// Profile pub

SQLCA.DBMS = ProfileString (ls_inifile, "database", "dbms", "")

SQLCA.LogPass = 'pub'

SQLCA.ServerName = ls_server

SQLCA.LogId = "pub"

SQLCA.AutoCommit = False

SQLCA.DBParm = ""

connect using sqlca;

//得到用户RSGL加过密的用户口令

select passshadow into:ls_pass from tbl_pub_passshadow;

//口令解密

ls_pass = f_password(ls_pass,0)

disconnect using sqlca;

//联接到实际的数据库用户RSGL

SQLCA.ServerName = ls_server

sqlca.DBMS = ProfileString (ls_inifile, "database", "Dbms","")

SQLCA.DBParm = ProfileString (ls_inifile, "database", "Dbparm","")

sqlca.database = ProfileString (ls_inifile, "database", "database","")

sqlca.userid = ProfileString (ls_inifile, "database", "userid","")

sqlca.dbpass = ProfileString (ls_inifile, "database", "dbpass","")

sqlca.logid = ls_logid

sqlca.logpass = ls_pass//ProfileString (ls_inifile, "database", "LogPass","")

SQLCA.AutoCommit = False

connect using sqlca;

if sqlca.sqldbcode <> 0 then

choose case sqlca.sqldbcode

case 1017

MessageBox (string(sqlca.SQLDBCode),"不能联接数据库。~r错误:无效的用户名和口令.请与管理员联系!")

case 12154

MessageBox (string(sqlca.SQLDBCode),"不能联接数据库。~r错误:服务器名不存在!请与系统管理员联系.")

case 999

MessageBox (string(sqlca.SQLDBCode),"不能联接数据库。~r错误:数据库不支持你当前的安装!")

case else

MessageBox (string(sqlca.SQLDBCode),"不能联接数据库。~r错误:"+ sqlca.sqlerrtext)

end choose

halt close

else

open(w_gd_frame) //打开应用程序的主窗口

end if

3、接下来,就是编写一个用户接口,让授权用户随时修改数据库联接参数。窗口界面(文件名称:dblogon.jpg,窗口上面的控件有:

控件名称 控件属性

sle_server SingleLineEdit

sle_login SingleLineEdit

sle_oldkl SingleLineEdit

sle_pass SingleLineEdit

sle_repass SingleLineEdit

cb_1 commandbutton

cb_2 commandbutton

cb_1命令按钮的clicked事件如下:

string ls_inifile,ls_pass,ls_logid,ls_repass,ls_old

string ls_k,ls_user,ls_sql

ls_inifile ='rsgl.ini'

transaction pub_tr

pub_tr = create transaction

pub_tr.DBMS = ProfileString (ls_inifile, "database", "dbms", "")

pub_tr.LogPass = 'pub'

pub_tr.ServerName = sle_server.text

pub_tr.LogId = "pub"

pub_tr.AutoCommit = False

pub_tr.DBParm = ""

connect using pub_tr;

ls_old = sle_oldkl.text

ls_user = lower(trim(sle_logid.text))

//得到数据库联接原用户口令

select passshadow into :ls_k from tbl_pub_passshadow using pub_tr;

if ls_old <> f_password(ls_k,0) then

messagebox("提示","原口令不对!")

return

end if

//检查核对口令

ls_pass = sle_pass.text

ls_repass = sle_repass.text

if ls_repass <> ls_pass then

messagebox("","核对口令不对,请重新输入!")

return

end if

SetProfileString(ls_inifile, "Database", "Servername",sle_server.text)

SetProfileString(ls_inifile, "Database", "Logid",ls_user)

//修改数据库用户的联接口令

ls_sql = ' alter user '+ls_user+' identified by '+ls_pass

Execute Immediate :ls_sql using sqlca;

ls_pass = f_password(ls_pass,1)

UPDATE TBL_PUB_PASSSHADOW SET PASSSHADOW =:ls_pass using pub_tr ;

commit using pub_tr;

commit using sqlca;

disconnect using pub_tr;

close(parent)

cb_2命令按钮的clicked事件如下:close(parent)

4、到此万事OK

所有代码已在Win98环境下,用PowerBuilder 6.5测试通过。

分享到:
评论

相关推荐

    PB对数据库查询的优化.doc

    PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库查询的优化.PB对数据库...

    PB9数据库存取图片

    PB9,全称为PowerBuilder 9,是一款由Sybase公司开发的面向对象的数据库应用程序开发工具,主要用于构建企业级的...在实际应用中,可能还需要考虑到安全性、权限控制以及并发访问等问题,确保系统的稳定性和可靠性。

    用pb实现数据库连接及数据操作

    标题 "用pb实现数据库连接及数据操作" 涉及的是使用PowerBuilder(PB)这一编程工具进行数据库连接和数据管理的...通过实际操作,开发者可以更深入地掌握PB的数据库连接和数据操作技巧,从而提升数据库应用开发能力。

    PB数据库系统原理及应用实训教程

    总结,PB数据库系统原理及应用实训教程是一份全面的指南,涵盖了PB的基本概念、组件、语言以及数据库管理系统的实际开发流程。通过深入学习和实践,你将能够掌握PB的精髓,为你的IT职业生涯打下坚实的基础。

    PB-数据库保存图片并在Datawindow中显示

    1. **PowerBuilder(PB)**:PB是一种强大的可视化开发工具,主要用于构建桌面和Web应用程序,尤其擅长处理数据库应用。它提供了一个集成的开发环境(IDE),允许开发者使用拖放功能来创建用户界面,并与各种数据库...

    在pb中调用word来编辑保存在数据库中的word文件.rar_PB 调用 word_jetr5n_pb word_pb数据库_

    标题中的“在PB中调用Word来编辑保存在数据库中的Word文件”指的是使用PowerBuilder(PB)这种编程工具,通过编程的方式与Microsoft ...这一过程需要对PB、数据库操作、Word对象模型以及OLE自动化有深入的理解和实践。

    PB连接access数据库的方式

    ACCESS数据库是最简单的数据库,也是OFFICE自带的工具软件之一,所以学会用PB连接access数据库很有必要.

    《PB8数据库系统开发实例导航》源码

    在PB8中,你可以创建和管理数据库连接(Database Painter),设计和编辑SQL脚本(SQL Workshop),以及构建用户界面(Window Painter)和应用程序逻辑(Event Painter)。PB8还引入了对象导向编程的概念,使得代码...

    pb实现数据库的备份、还原

    PowerBuilder(简称pb)作为一种广泛使用的快速应用开发工具,提供了丰富的功能来支持数据库的操作,包括备份和恢复。 #### 二、备份操作详解 在PowerBuilder中实现数据库备份主要涉及到以下几个关键步骤: 1. **...

    PB数据库课程设计:图书管理系统

    PB,全称PowerBuilder,是一款强大的可视化数据库应用程序开发工具,以其易用性和快速开发特性在上世纪90年代深受开发者喜爱。在这个图书管理系统中,PB发挥了其优势,帮助我们快速构建出用户友好的界面和高效的数据...

    基于PB数据库自动连接的设计与实现

    PowerBuilder(PB)是一款非常流行的数据库应用程序开发工具,它采用了面向对象的技术,并提供了图形化的应用开发环境,因此被视为数据库前端开发的强大工具之一。PB支持多种数据库的访问,不仅包括Oracle、Sybase等...

    pb做数据库课程设计关于仓库管理系统

    "pb做数据库课程设计关于仓库管理系统" 这个标题表明了一个使用PowerBuilder(pb)工具进行的数据库课程设计项目,其主题是仓库管理系统的开发。PowerBuilder是一种流行的、基于对象的可视化开发工具,尤其适用于...

    PB数据库课程设计

    在"PB数据库课程设计"中,学生通常会学习如何利用PowerBuilder进行数据库应用的开发,包括数据模型设计、用户界面构建以及后台数据库的交互。 首先,我们需要了解数据库的基础知识。数据库是存储和管理数据的系统,...

    PB 存取数据库中图片

    综上所述,"PB 存取数据库中图片"这一主题涵盖了数据库设计、PB数据窗口使用、二进制数据处理以及用户界面交互等多个方面,是PB应用开发中常见且重要的实践。通过学习和掌握这些知识,开发者可以构建出功能完善的...

    PB-SQL 数据库查询

    在这个“PB-SQL数据库查询”主题中,我们将深入探讨如何在PB环境中进行有效的数据库查询以及图书馆管理系统的实现。 首先,PowerBuilder提供了两种方式执行SQL:SQLCA(SQL Control Area)和DataWindow对象。SQLCA...

    PB连接数据库要领.txt

    - **性能优化:**通过调整MDF文件的设置(如自动增长策略)以及PB应用程序的设计,可以提高数据库访问速度和应用性能。 ##### 2. ODBC与PB的集成 ODBC作为一种广泛支持的标准接口,使得PB能够轻松地与多种数据库...

    pb代码 数据库备份和还原

    pb代码 数据库备份和还原,很好用,QQ:172386653 如果用不了,可联系我。

    PB访问Excel数据库

    至于“标签”中的“PB Excel 数据库”,这表明这个主题涵盖了PowerBuilder与Excel之间的数据交互,以及如何将Excel用作数据库进行操作的技能。 虽然没有具体的压缩包子文件的文件名称列表,但通常这类资源可能包括...

    PB数据库系统开发实例源码

    PB,全称PowerBuilder,是Sybase公司推出的一种可视化、面向对象的数据库应用程序开发工具。它以其强大的数据窗口(DataWindow)组件而闻名,能够帮助开发者快速构建数据库应用系统。本压缩包“PB数据库系统开发实例...

    经典pb 连接数据库

    在描述中提到了两种数据库连接方式:“pb + asa”和“pb + mssql”,分别对应的是PowerBuilder与ASA(Adaptive Server Anywhere,Sybase公司的轻量级数据库)以及与Microsoft SQL Server的连接。 1. **pb + asa**:...

Global site tag (gtag.js) - Google Analytics