熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PB編程 >> 正文

PB應用的數據庫聯接的安全防范[1]

2013-11-23 17:27:26  來源: PB編程 

  在通常的Server/Client方式MIS開發中由於程序要與數據庫服務器保持聯接為了程序的靈活和擴充性聯接參數(用戶ID和登錄口令)又不能在程序中寫死(其實寫死也不是一種好的方法)一般的方法無外乎有兩種其一是把聯接參數存放在注冊表中其二就是直接讀INI文件

  本人找到一種方法可以解決數據庫應用的安全性問題通過INI文件和數據庫的巧妙處理在程序中提供用戶一種接口可以隨時修改數據庫的聯接參數而又不給外人以蛛絲馬跡做到神不知鬼不覺

  實現方法如下

  創建INI文件記錄數據庫聯接的一些方便程序分發的參數DBMSSERVERNAMELOGID具體如下

  //創建成INI文件(rsglini)

  [Database]

  DBMS=O ORACLE

  ServerName=gxmistest //數據庫服務器名

  LogId=rsgl //實際的數據庫登錄用戶

  然後在數據庫中創建一個中間用戶PUB登錄口令PUB賦予PUB用戶CONNECTRESOURCE權限再在其中創建表CREATE TABLE TBL_PUB_PASSSHADOW (PASSSHADOW VARCHAR) NOT NULL)用於存放實際的數據庫聯接的登錄口令(當然要經過加密)加密函數網上多的是在此就不累述

  我自已創建了一個字符串加密函數f_password(string old_strstring new_strinteger jm_mode)jm_mode參數用以區分函數的加(解)密old_strnew_str兩參數分別為加(解)密的字符串

  就開始編寫應用程序了在應用程序的OPEN事件中進行數據庫登錄聯接程序腳本如下

  string ls_inifilels_starttimes

  string ls_logidls_logpassls_dbms

  string ls_passls_sqlls_codels_server

  //設置INI文件

  ls_inifile = rsglini

  ls_server = ProfileString (ls_inifile database ServerName

  ls_logid = ProfileString (ls_inifile database LogId

  // Profile pub

  SQLCADBMS = ProfileString (ls_inifile database dbms

  SQLCALogPass = pub

  SQLCAServerName = ls_server

  SQLCALogId = pub

  SQLCAAutoCommit = False

  SQLCADBParm =

  connect using sqlca;

  //得到用戶RSGL加過密的用戶口令

  select passshadow into:ls_pass from tbl_pub_passshadow;

  //口令解密

  ls_pass = f_password(ls_pass

  disconnect using sqlca;

  //聯接到實際的數據庫用戶RSGL

  SQLCAServerName = ls_server

  sqlcaDBMS = ProfileString (ls_inifile database Dbms

  SQLCADBParm = ProfileString (ls_inifile database Dbparm

  sqlcadatabase = ProfileString (ls_inifile database database

  sqlcauserid = ProfileString (ls_inifile database userid

  sqlcadbpass = ProfileString (ls_inifile database dbpass

  sqlcalogid = ls_logid

  sqlcalogpass = ls_pass//ProfileString (ls_inifile database LogPass

  SQLCAAutoCommit = False

  connect using sqlca;

  if sqlcasqldbcode <> then

  choose case sqlcasqldbcode

  case

  MessageBox (string(sqlcaSQLDBCode)不能聯接數據庫~r錯誤無效的用戶名和口令請與管理員聯系!

  case

  MessageBox (string(sqlcaSQLDBCode)不能聯接數據庫~r錯誤服務器名不存在!請與系統管理員聯系

  case

  MessageBox (string(sqlcaSQLDBCode)不能聯接數據庫~r錯誤數據庫不支持你當前的安裝!

  case else

  MessageBox (string(sqlcaSQLDBCode)不能聯接數據庫~r錯誤+ sqlcasqlerrtext)

  end choose

  halt close

  else

  open(w_gd_frame) //打開應用程序的主窗口

  end if

  接下來就是編寫一個用戶接口讓授權用戶隨時修改數據庫聯接參數窗口界面見下圖(文件名稱dblogonjpg)窗口上面的控件有

[]  []  


From:http://tw.wingwit.com/Article/program/PB/201311/24610.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.