那么有没有什么简单点的办法呢?请往下看: . }, f/ k4 @' o
模型:oracle7.3;开发工具:develope2000。收费系统(在数据库中的名称是sfyy),其client端分散在市区的数个营业点,通过城域网与主机(小型机)相连。 7 r& f7 b9 v6 H5 ~) n) C; ~
过程: # i* z. m( [3 Y M
·在收费小型机oracle系统的system用户(dba)下,创建新用户test; ( [& q: S) w& b$ U/ V
* K V. J) N- ^3 y' g0 T7 Ccreate user testidentified by cartondefault tablespace dataspace1quota 100k( t' Z3 c+ |) N2 ^7 q$ f
·对test用户授以权限;
2 V+ U% {# u/ o* |, K
. E: U1 r0 f6 N) qgrant create session to test;grant resource to test;
) n8 Q1 W+ ^ y·在test用户下建立一个存储函数mmtranslate,它其实是一个加密程序。下面是一个简单的例子。
( l8 L* M7 n w3 r! S; ` X
% D5 h8 n5 H; s: }& Efunction mmtranslate(m varchar2)return varchar2asi number(2);kk varchar2(10);beginkk:=′′;i:=1;loopif i0 thenkk:=kk||chr(100+to_number(substr(m,i,1)));elseif instr(‘wxyz‘,substr(m,i,1),1,1)>0 thenkk:=kk||chr(-8+ascii(substr(m,i,1)));elsekk:=kk||chr(4+ascii(substr(m,i,1)));end if;elseexit;end if;i:=i+1;end loop;return kk;exceptionwhen others thenreturn ′-1′;end;
5 ]2 m" e' t$ l: \, j·在test用户下建表mmtest并插入记录:
3 [/ h3 X2 ?# i7 G2 P7 Q9 T" q3 E( W% @3 s) c6 }( Z
create table mmtest(usnamevarchar2(6),------用户名称mimavarchar2(6)------加密前的密码);insert into mmtest values( ‘sfyy‘,‘eds2‘);commit;
: t1 C6 w1 V9 R t4 j+ H$ A8 W·执行以下语句
6 C/ z) u/ W; x9 K* N+ q
# a6 Y3 u7 Q9 m- b6 k" Zsql>select mmtranslate(‘eds2‘) from dual;mmtranslate(‘eds2‘)----------------------------------------ihwf
$ c$ J, k9 m+ Q( p, k利用dba权限更改sfyy的密码为上面语句的执行结果: 9 p% c9 {( M0 I/ e) z2 u
x* d/ `+ N1 F
alter user sffyidentified by ihwf; ;; m$ W! R$ D; i: g! q; `7 `
·修改应用程序,对于开发环境是develope2000的程序来说,主要是修改主程序的on-lo gon触发器:
1 b$ t# O- \# N. ] e9 q
1 Z2 v$ W; W5 s& S7 qdeclaremm varchar2(6);beginlogon(‘test‘,‘carton‘);select mima into mm from mmtest where usname=‘sfyy‘;mm:=mmtranslate(mm);logout;logon(‘sfyy‘,mm);end; |