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,如下图所示:

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

相关推荐
zfoo-framework15 小时前
通过redis-cli+lua脚本查询redis数据
数据库·redis·lua
牛栓柱15 小时前
【后端实战】用 Supabase + React/TS 零成本构建高并发 Multi-Agent 服务
前端·数据库·人工智能·后端·react.js·前端框架
yyuuuzz15 小时前
谷歌云基础服务的入门认知
linux·运维·服务器·数据库·人工智能·github
超梦dasgg15 小时前
工作中 MySQL 读写分离主从延迟:成因、影响、落地方案、生产实战处理
数据库·mysql
Wonderful U16 小时前
Python+Django实战:打造智能生鲜果蔬进销存管理系统(采购入库、库存预警、销售开单、毛利统计)
数据库·python·django
Demon1_Coder16 小时前
Day4-微服务-Seata默认事务
java·数据库·微服务
我是大猴子16 小时前
Redis为什么不适合做持久化和DB的区别在哪里
数据库·redis·缓存
mN9B2uk1716 小时前
数据库锁总结
数据库·oracle
闪电悠米16 小时前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
Jun62616 小时前
QT(5)-第三方日志系统
开发语言·数据库·qt