现在公司的业务系统出现一很怪的问题,A客户通过web网页查看/操作自己的业务系统时,却在系统里看到B客户的数据,但每次出现类似问题,只要页面刷新一下或重启一下应用的服务,问题暂时就不再重现。整个系统是一个三层架构的系统,最外层是客户直接访问的IBM apache步署的web server,中间层是IBM Websphere Application Express 6.0步署的application server,通过jdbc访问最底层的oracle数据库,最底层是linux es4操作系统装的oracle10.2.0.2数据库,大约近50个客户的数据全放在一个data表空间,索引全放在index表空间,大对象lob数据放在lob表空间中。50个客户初始建库时都是用一套完全一样的sql script创建的,DB主机的内存有6G,硬盘空间现40G可用,做的raid5。发生这个问题后,我通过logminer挖掘数据库的日志,查询v$logmnr_contents发现如下信息:
SCN
TIMESTAMP
COMMIT_TIMESTAMP
LOG_ID
DATA_OBJD#
SEG_OWNER
SEG_NAME
TABLE_NAME
SEG_TYPE
SEG_TYPE_NAME
TABLE_SPACE
ROW_ID
SESSION#
SERIAL#
USERNAME
SESSION_INFO
TX_NAME
OPERATION
OPERATION_CODE
SQL_REDO
SEQUENCE#
DATA_OBJV#
AUDIT_SESSIONID
1002036697
2008-12-25 0:36
49760
0
0
AAAAAAAAAAAAAAAAAA
363
51136
USER_B
login_username=USER_B client_info=10.20.30.10 OS_username= Machine_name=utmca.localdomain OS_terminal= OS_process_id=1234 OS_program_name=
START
6
set transaction read write;
1
0
23800011
1002036697
2008-12-25 0:36
49760
183133
USER_A
EREGISTRY
EREGISTRY
2
TABLE
DATA
AAAstdAAFAAAIYpADR
363
51136
USER_B
login_username=USER_B client_info=10.20.30.10 OS_username= Machine_name=utmca.localdomain OS_terminal= OS_process_id=1234 OS_program_name=
UPDATE
3
"update ""USER_A"".""EREGISTRY"" set ""REG_VALUE_STR"" = '1' where ""EREGISTRY_CODE"" = '14634' and ""ECODE"" = '100' and ROWID = 'AAAstdAAFAAAIYpADR';"
1
1
23800011
1002036697
2008-12-25 0:36
49760
182933
USER_A
EDETAIL
EDETAIL
2
TABLE
DATA
AAAsqVAAFAAAHoUAAA
363
51136
USER_B
login_username=USER_B client_info=10.20.30.10 OS_username= Machine_name=utmca.localdomain OS_terminal= OS_process_id=1234 OS_program_name=
UPDATE
3
"update ""USER_A"".""EDETAIL"" set ""LOGIN_FAILED"" = '0' where ""ECODE"" = '100' and ""POST_CODE"" IS NULL and ""DEPART_CODE"" = '-1'and ""TEL_NO"" IS NULL ;"
1
253
23800011
1002036698
2008-12-25 0:36
2008-12-25 0:36
49760
0
0
AAAAAAAAAAAAAAAAAA
363
51136
USER_B
login_username=USER_B client_info=10.20.30.10 OS_username= Machine_name=utmca.localdomain OS_terminal= OS_process_id=1234 OS_program_name=
COMMIT
7
commit;
1
0
23800011
发现USER_B登录后对USER_A的两个表eregistry和edetail进行了update操作,但在数据库中,USER_B对USER_A下的对象没有任何权限,且我在创建数据库用户时只给用户connect,resource两个角色,现在log中记录了USER_B对USER_A的表进行了update是不是就代表一定操作成功了呢?
现在请各位帮忙分析一下,根据以上具体情况,发生这样问题的可能原因会在哪儿呢?是应用程序还是oracle数据库或者其它原因?
从oracle数据库的角度出发,我想到的原因有以下几方面:
1、是不是不能将50个客户的数据都放入一个表空间?需要一个客户一个表空间吗??
2、或者数据在oracle缓存中有问题,才导致这样的问题发生?
3、是否与public的默认权限有关?
[ 本帖最后由 lovelele 于 2008-12-31 11:53 编辑 ]
|