---
title: Oracle 模式重新创建对象导致对象上的权限丢失-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 模式重新创建对象导致对象上的权限丢失相关的常见问题和使用技巧，帮助您快速解决Oracle 模式重新创建对象导致对象上的权限丢失的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# Oracle 模式重新创建对象导致对象上的权限丢失

更新时间：2026-05-25 09:11

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题描述

用户 user_view 查询视图，提示视图不存在。

```shell
obclient [USER_VIEW]> select * from sys.v_t1;
ORA-00942: table or view does not exist

```

sys 用户查询视图，视图却是存在的。

```shell
obclient [SYS]> select view_name,TEXT from all_views where owner='SYS' and view_name ='V_T1';

```

输出结果如下。

```shell
+-----------+------------------------------------------------------------------------+
| VIEW_NAME | TEXT                                                                   |
+-----------+------------------------------------------------------------------------+
| V_T1      | select "SYS"."T1"."ID" AS "ID","SYS"."T1"."R1" AS "R1" from "SYS"."T1" |
+-----------+------------------------------------------------------------------------+
1 row in set (0.012 sec)

```

## 问题原因

create or replace 的实现是先 drop 旧对象再 create 新对象，新创建的对象没有维护对象权限。视图、触发器、序列等同时支持对象权限和 create or replace 语法的对象都存在此类问题。 ​ 具体参考如下案例过程。

1. sys 用户创建视图、创建用户 user_view、赋予用户 user_view 查询视图 v_t1 的读权限。

      1. 使用 sys 用户登录到集群的 oracle 租户。

        ```shell
        [root@xxx admin]# obclient -usys@oracle -p'root' -P 2883 -h 127.1 -cA

        ```

        输出内容如下。

        ```shell
        Welcome to the OceanBase.  Commands end with ; or \g.
        Your OceanBase connection id is 32
        Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)
        Copyright (c) 2000, 2018, OB Corporation Ab and others.
        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

        ```
      2. 创建视图。

        ```shell
        obclient [SYS]> create or replace view v_t1 as select * from t1;
        Query OK, 0 rows affected (0.073 sec)

        ```
      3. 查询视图。

        ```shell
        obclient [SYS]> select * from v_t1;

        ```

        输出内容如下。

        ```shell
        +-----+------+
        | ID  | R1   |
        +-----+------+
        | 967 |   11 |
        +-----+------+
        1 row in set (0.035 sec)

        ```
      4. 创建用户。

   ```shell
   obclient [SYS]> create user user_view identified by root;
   Query OK, 0 rows affected (0.090 sec)

   ```

      5. 授予用户 user_view 拥有查询 sys 用户下 v_t1 视图的权限。

        ```shell
        obclient [SYS]> grant select on sys.v_t1 to user_view;
        Query OK, 0 rows affected (0.074 sec)

        ```
      6. 授予 user_view 用户在服务器上拥有创建 session 会话连接数据库权限。

   ```shell
   obclient [SYS]> grant create session to user_view;
   Query OK, 0 rows affected (0.056 sec)

   ```

      7. 退出 sys 用户 OBClient 客户端。

   ```shell
   obclient [SYS]> \q
   Bye

   ```
 2. 用户 user_view 可以正常查询视图。

      1. 使用 user 用户登录到集群的 oracle 租户。

        ```shell
        [root@xxx admin]# obclient -uuser_view@oracle -p'root' -P 2883 -h 127.1 -cA

        ```

   输出结果如下。

   ```shell
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 35
   Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)

   Copyright (c) 2000, 2018, OB Corporation Ab and others.

   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

   ```

      2. 查询 sys 用户中的视图 v_t1。

   ```shell
   obclient [USER_VIEW]> select * from sys.v_t1;

   ```

   输出结果如下。

   ```shell
   +-----+------+
   | ID  | R1   |
   +-----+------+
   | 967 |   11 |
   +-----+------+
   1 row in set (0.022 sec)

   ```

      3. 退出 user_view 用户 OBClient 客户端。

        ```shell
        obclient [USER_VIEW]> \q
        Bye

        ```
 3. sys 用户重建视图，用户 user_view 再次查询视图报错视图不存在。

        ```

        输出结果如下。

        ```shell
        Welcome to the OceanBase.  Commands end with ; or \g.
        Your OceanBase connection id is 36
        Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)

        opyright (c) 2000, 2018, OB Corporation Ab and others.

        ```
      2. 使用 sys 用户登录重建视图。

        ```shell
        obclient [SYS]> create or replace view v_t1 as select * from t1;
        Query OK, 0 rows affected (0.095 sec)

        ```
      3. 退出 sys 用户 OBClient 客户端。

        ```
      4. 使用 user 用户登录到集群的 oracle 租户。

        ```

        输出结果如下。

        ```shell
        Welcome to the OceanBase.  Commands end with ; or \g.
        Your OceanBase connection id is 37
        Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)

        ```
      5. 使用 user_view 用户查询 sys 用户中的 v_t1 视图。

        ```
      6. 退出 user_view 用户 OBClient 客户端。

        ```

## 适用版本

OceanBase 数据库 V2.x 和 V3.x 版本。

## 解决方法

升级至问题已修复版本。

目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 (oceanbase-2.2.77-20210508211731) 及之后版本、V3.3.3 BP6 Hotfix1 (oceanbase-3.2.3.3-106010052022120116) 及之后版本。 ​

### 规避方法

提前把相关对象的权限保留下来或重建对象后重新授予权限。

示例如下。

   ```

   输出结果如下。

   ```shell
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 38
   Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)

   ```
 2. 授予 user_view 用户拥有查询 sys 用户中 v_t1 视图的权限。

   ```shell
   obclient [SYS]> grant select on sys.v_t1 to user_view;
   Query OK, 0 rows affected (0.060 sec)

   ```shell
   [root@xxxx admin]# obclient -uuser_view@oracle -p'root' -P 2883 -h 127.1 -cA

   ```

   输出结果如下。

   ```shell
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 39
   Server version: OceanBase 3.2.3.0 (r20220429172811-141f0018b07e9f8d269bb5f6dbd020cd419eb3fc) (Built Apr 29 2022 17:39:23)

   ```

   输出结果如下。

   ```shell
   +-----+------+
   | ID  | R1   |
   +-----+------+
   | 967 |   11 |
   +-----+------+
   1 row in set (0.028 sec)

   ```

上一篇

[OceanBase 数据库 Oracle 租户创建视图成功，但查询报错 ORA-04063](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207732)

下一篇

[Oracle 模式下使用 create or replace 创建对象后对象上的权限会丢失](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000180193) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
