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

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

相关推荐
嘘神秘用5 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
东北小狐狸-Hellxz7 小时前
Redis 哨兵搭建+ACL权限控制
数据库·redis
研究员子楚8 小时前
GEO行业发展标准体系白皮书V2.0-第09卷 · 适配篇:硅基主权伦理宪章与行业适配宣言
数据库·人工智能·geo
l134062082359 小时前
鸿蒙实战:RDB 数据库设计与 DatabaseService
数据库·华为·harmonyos·鸿蒙系统
山峰哥9 小时前
数据库工程与索引策略实战指南‌
服务器·数据库·sql·oracle·深度优先
谙忆9 小时前
图片版权保护工程实战:明水印、盲水印(DCT隐写)、Referer防盗链与签名URL怎么落地
数据库
KaMeidebaby10 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
xfhuangfu10 小时前
19c CDB架构下的数据库启动和停止
数据库·架构
神道君天下10 小时前
填充与积累:积分与面积的可视化
数据库·oracle
爱折腾的小黑牛10 小时前
小程序云开发数据模型设计:礼账系统的三表结构
数据库·架构