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

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

相关推荐
天骄t42 分钟前
HTML入门:从基础结构到表单实战
linux·数据库
qq_3988989344 分钟前
【备忘】ASP.Net MVC无缝对接SQL Server数据库设置步骤
数据库·asp.net·mvc
努力学编程呀(๑•ี_เ•ี๑)1 小时前
宝塔上的数据库用Navicat如何连接
数据库
l1t1 小时前
AI关于MySQL 能否存储数组的回答
数据库·mysql
菩提小狗1 小时前
小迪安全_第4天:基础入门-30余种加密编码进制&Web&数据库&系统&代码&参数值|小迪安全笔记|网络安全|
前端·网络·数据库·笔记·安全·web安全
Albert Edison1 小时前
【MySQL】使用C/C++语言连接数据库
c语言·数据库·mysql
高一要励志成为佬1 小时前
【数据库】第二章 关系数据库 各种概念
数据库
youshang520i1 小时前
Gbase 8s 不能参考一个未设日志的外在数据库
数据库
宇宙的尽头是PYTHON2 小时前
开窗函数简单的排序row_number() rank() densite()
数据库
心止水j2 小时前
hbase 电商2
数据库·windows·hbase