oracle业务系统的怪问题

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
现在公司的业务系统出现一很怪的问题,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 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
ding起来。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
各位指点一下
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
我个人觉得首先要确定一件事:你的最终用户所用的用户是应用系统的用户还是数据库的用户。
通常在象你这样的系统结构中,用户都是使用Websphere的用户来登录应用并最终访问数据库的。当然也不排除你所说的50个用户都是建在数据库上的真实用户。
我想给一些建议,或许会有点帮助:
1 其实我觉得你如果有测试系统的话,最好在数据库中直接测试一下是否存在这样的权限问题;如果也是,你就要检查一下权限以及对象;
2 虽然你只给了Connect和Resource的角色,但是关于它们的子权限需要确认;
3 每个Schema下的对象是否用到了Synonymas;
另外这个数据分配在怎样的表空间是没有关系的。
我还是觉得这是应用上的问题可能性更大些。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
你的最终用户所用的用户是应用系统的用户还是数据库的用户。
通常在象你这样的系统结构中,用户都是使用Websphere的用户来登录应用并最终访问数据库的。当然也不排除你所说的50个用户都是建在数据库上的真实用户。
----对于这个问题,我们情况是这样的,数据库中新建了50多个数据库用户,也就对应了50多个不同的客户(注:不同的企业或公司,相互之间不认识,只是都是购买我们公司的同一套软件产品),每个客户有自己的一套war包架构的应用系统,数据库用户及密码信息配置在resource文件中,每个客户的应用系统最终用户所用的登录用户是应用系统的用户,且这些登录用户信息保存在每套客户自己的数据库表中,对每个客户来说,连接底层数据库的用户只有一个,而前台登录应用系统的用户可能有无数个。
1 其实我觉得你如果有测试系统的话,最好在数据库中直接测试一下是否存在这样的权限问题;如果也是,你就要检查一下权限以及对象;
----每个数据库用户的权限我都检查过了,他们之间不存对象之间的交叉访问,每个数据库用户只能访问自己schema下的对象
2 虽然你只给了Connect和Resource的角色,但是关于它们的子权限需要确认;
--connect,resource的子权限有哪些呢?

3 每个Schema下的对象是否用到了Synonymas;
--每个数据库用户下的synonym是否用到了,还没有查到,但我已查过了dba_synonyms,没有发现异常,请问只dba_synonym是否就够了,还要每个数据库用户单独再查吗?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
再ding
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
用USER_B登录 执行SELECT COUNT(*) FROM USER_A.eregistry 看看到底有米有权限喽
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
不管有没有权限,都不是权限的问题啊。
难道有权限,就应该出错吗?
如果确认不是程序问题,就要考虑是中间件的bug了
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 absentchen 于 2008-12-31 15:36 发表
用USER_B登录 执行SELECT COUNT(*) FROM USER_A.eregistry 看看到底有米有权限喽

没有,执行时提示如下:
ERROR at line 1:
ORA-00942: table or view does not exist
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
各位能解释一下为什么v$logmnr_contents中会记录b用户update了a用户的表呢?这个update动作一定成功执行了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行