O2OA的数据库数据库配置-使用不同用户访问Oracle时报错-表或视图不存在

在使用Oracle数据库时,多个O2OA服务器同一个Oracle实例中使用不同的用户启动时,可能会遇到数据库访问的错误。本篇阐述此类问题以及解决方案。

一、先决条件:

1、O2OA已经下载并且解压到指定的目录;

2、Oracle数据库已经完成安装,并且已经创建数据库实例和不同的数据库用户。

二、问题描述

在同一个Oracel数据库实例中建立两个不同的用户,如:usera,userb。我们使用两个独立的O2OA服务器分别使用usera和userb连接到数据库。

我们会发现:先启动的o2server能够正常完成服务器启动,但是后启动o2server在控制台会出现如下图所示报错:

三、问题分析

由于usera和userb都具有dba的权限,在服务器启动的时候会先通过DatabaseMetaData对象来判断需要访问的数据表或者视图是否存在,如果不存在,则主动创建相关的数据库对象。由于具有数据库用户拥有dba权限,所以可以查询到指定的数据表已经存在(已经在第一个o2server服务器启动时由usera创建过了)。但是在访问过程中由usera创建的对象,并不在userb用户能访问的Schema下,所以定义在userb用户schema下的数据库对象实际上是不存在的。

因此会导致使用userb数据库用户启动O2OA时,跳过了数据表创建的过程而报错:表或视图不存在。

四、解决办法

删除O2OA使用的数据库用户的dba权限,并为usera,userb设置以下权限.

复制代码
GRANT RESOURCE TO USERA;
GRANT CONNECT TO USERA;
GRANT UNLIMITED TABLESPACE TO USERA;
GRANT CREATE SESSION TO USERA;
GRANT CREATE TABLE TO USERA;

GRANT RESOURCE TO USERB;
GRANT CONNECT TO USERB;
GRANT UNLIMITED TABLESPACE TO USERB;
GRANT CREATE SESSION TO USERB;
GRANT CREATE TABLE TO USERB;

这样就可以避免不同的用户相互看到数据库对象,从而实现对象的隔离。

五、实际需要的角色和权限

需要的角色:CONNECT、RESOURCE,如下图所示:

需要的权限:CREATESESSION、CREATETABLE、UNLIMITED TABLESPACE,如下图所示:

以上问题解决的方法,希望对您有帮助。

相关推荐
是小崔啊3 小时前
事务03之MVCC机制
数据库·mysql·事务·
LUCIAZZZ7 小时前
简单的SQL语句的快速复习
java·数据库·sql
Elastic 中国社区官方博客8 小时前
使用真实 Elasticsearch 进行高级集成测试
大数据·数据库·elasticsearch·搜索引擎·全文检索·jenkins·集成测试
@_@哆啦A梦9 小时前
Redis 基础命令
java·数据库·redis
fajianchen9 小时前
MySQL 索引存储结构
数据库·mysql
想做富婆9 小时前
oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
数据库·oracle·联合查询
xianwu54311 小时前
反向代理模块jmh
开发语言·网络·数据库·c++·mysql
Leven19952711 小时前
Flink (十三) :Table API 与 DataStream API 的转换 (一)
数据库·sql·flink
geovindu11 小时前
neo4j-community-5.26.0 create new database
数据库·mysql·neo4j
因特麦克斯12 小时前
索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢
数据库