隨著網際網路的深入人心,網路技術不斷發展,資料的保密性要求也越來越高。在通常的server/client方式mis開發中,由於程式要與資料庫伺服器保持聯接,為了程式的靈活和擴充性,聯接引數(使用者id和登入口令)又不能在程式中寫死(其實寫死也不是一種好的方法),一般的方法無外乎有兩種:其一是把聯接引數存放在登錄檔中;其二就是直接讀ini檔案。
而綜上幾種方法安全性都不太好,給人以可乘之機。
本人找到一種方法,可以解決資料庫應用的安全性問題,通過ini檔案和資料庫的巧妙處理,在程式中提供使用者一種介面,可以隨時修改資料庫的聯接引數,而又不給外人以蛛絲馬跡,做到神不知鬼不覺。
實現方法如下:
1、建立ini檔案,記錄資料庫聯接的一些方便程式分發的引數dbms、servername、logid具體如下:
//建立成ini檔案(rsgl.ini)
[database]
dbms=o84 oracle 8.0.4
servername=gxmistest //資料庫伺服器名
logid=rsgl //實際的資料庫登入使用者
然後,在資料庫中建立乙個中間使用者pub,登入口令pub,賦予pub使用者connect,resource許可權,再在其中建立表create table tbl_pub_passshadow (passshadow varchar2(50) not null)用於存放實際的資料庫聯接的登入口令(當然要經過加密)。加密函式網上多的是,在此就不累述。我自已建立了乙個字串加密函式f_password(string old_str,string new_str,integer jm_mode),jm_mode引數用以區分函式的加(解)密,old_str、new_str兩引數分別為加(解)密的字串。
-- 建立登陸,無密碼策略,密碼不過期
create login [test_l] with password='pwd1213',default_database=[db_1], check_expiration=off, check_policy=off;
go use db_1;
go-- 建立使用者
create user [test_u] from login [test_l];
go -- 授權
grant select on dbo.table1 to [test_u];
go
附:解密源**
函式名稱:f_decryptpbpassword()
引數: as_orginalpassword string 原始密碼
返回值: string 解密後文字
功能描述:解密pb資料庫連線描述密碼
建立人: 康劍民
建立日期:2006-04-27
版本號: v1.0
string ls_temp,ls_return=''
integer i,li_count,li_ascii
nvo_numerical lnv_numerical
if len(as_orginalpassword) < 2 or as_orginalpassword = '00' then return ''
as_orginalpassword = left(reverse(as_orginalpassword),len(as_orginalpassword) - 2)
li_count = ceiling(len(as_orginalpassword) / 2)
for i = 1 to li_count
ls_temp = mid(as_orginalpassword,(i - 1) * 2 + 1,2)
li_ascii = lnv_numerical.of_hextodecimal(ls_temp)
ls_temp = char(li_ascii)
ls_return = ls_return + ls_temp
next
return ls_return
函式名稱:of_hextodecimal()
引數: as_hexdata string 16進製制資料
返回值: unsignedlong 10進製資料
功能描述:16進製制資料轉為10進製資料
建立人: 康劍民
建立日期:2006-04-27
版本號:v1.0
char lch_char
unsignedlong lul_decimal=0
integer li_dec[48 to 70], i, li_len
for i = 48 to 57
li_dec[i] = i - 48
next
for i = 65 to 70
li_dec[i] = i - 55
next
as_hexdata = lower(as_hexdata)
lch_char = as_hexdata
li_len = len (as_hexdata)
for i = 1 to li_len
choose case lch_char[i]
case '0' to '9', 'a' to 'f'
lul_decimal = lul_decimal * 16 + li_dec[asc(lch_char[i])]
case else
return lul_decimal
end choose
next
return lul_decimal
寫作日期:2006-05-15
資料庫安全防護幾點介紹
企業最有價值的資產通常是其資料庫中的客戶或產品資訊。因此,在這些企業中,資料庫管理的乙個重要部分就是保護這些資料免受外部攻擊,及修復軟 硬體故障。在大多數情況下,軟硬體故障通過資料備份機制來處理。多數資料庫都自帶有內建的工具自動完成整個過程,所以這方面的工作相對輕鬆,也不會出錯。但麻煩卻來自另一面 ...
資料安全防護之打造安全 mdb資料庫
什麼是mdb資料庫呢?凡是有點製作 經驗的 網路 管理員都知道,目前使用 iis asp access 這套組合方式建立 是最流行的,大多數中小型internet 都使用該 但隨之而來的安全 問題 mdb資料庫是沒有安全防範 一 危機起因 二 常用的補救方法 1 把資料庫的名字進行修改,並且放到很深...
黑客非法探取密碼的原理及安全防範
一 非法獲取password的原理 edit控制項是windows的乙個標準控制項,當把其password屬性設為true時,就會將輸入的內容遮蔽為星號,從而達到保護的目的。雖然我們看來都是星號,但程式中的edit控制項實際仍是使用者輸入的密碼,應用程式可以獲取該控制項中的密碼,其他應用程式也可以通...