---
title: Oracle 普通用户 CREATE VIEW 权限问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Oracle 普通用户 CREATE VIEW 权限问题相关的常见问题和使用技巧，帮助您快速解决Oracle 普通用户 CREATE VIEW 权限问题的难题。
---
切换语言

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

划线反馈

# Oracle 普通用户 CREATE VIEW 权限问题

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

适用版本： V3.2.x、V4.2.x 内容类型：TechNote  

本文介绍 Oracle 普通用户 `CREATE VIEW` 权限问题。

在 Oracle 11g 版本中，普通用户 `CREATE VIEW` 报错：`ORA-01031: insufficient privileges`， 示例如下。

```shell
SQL> CREATE VIEW vw_test AS SELECT * FROM test;
  CREATE VIEW vw_test AS SELECT * FROM test
              *
  ERROR at line 1:
  ORA-01031: insufficient privileges

```

上述报错是因为 Oracle 10.2 及之后的版本，`CONNECT` 角色就没有 `CREATE VIEW` 权限了，`RESOURCE` 角色也没有 `CREATE VIEW` 权限，所以 Oracle 10.2 及之后的版本需要手动授予 `CREATE VIEW` 权限。

Oracle 10.2 及之后的版本可以使用如下类似 SQL 创建普通用户。

```shell
CREATE USER xxx IDENTIFIED BY xxx;
GRANT CONNECT TO xxx;
GRANT RESOURCE TO xxx;
GRANT CREATE VIEW TO xxx;

```

在 OceanBase 数据库 Oracle 模式是对标 Oracle 11g 语法，同样也需要手动授予 `CREATE VIEW` 权限。

## 在 Oracle 11g 版本中测试

1. 通过操作系统用户验证方式，使用 SQLPlus 客户端工具，登录实例。

   ```shell
   [oracle@xxxx]$sqlplus / as sysdba

   ```
 2. 查看当前用户。

   ```shell
   SQL> SELECT user FROM dual;

   USER
   ------------------------------------------------------------------------------
   SYS

   ```
 3. 在 `SYS` 用户下先检查 `CONNECT` 和 `CONNECT` 角色包含的权限。

   ```shell
   SQL> SET linesize 300
   SQL> COL GRANTEE FOR a30
   SQL> COL PRIVILEGE FOR a50
   SQL> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee IN ('CONNECT', 'RESOURCE') ORDER BY grantee, privilege;

   ```

   输出结果如下：

   ```shell
   GRANTEE        PRIVILEGE
   ------------------------------ -----------------------------------------------
   CONNECT       CREATE SESSION
   RESOURCE      CREATE CLUSTER
   RESOURCE      CREATE INDEXTYPE
   RESOURCE      CREATE OPERATOR
   RESOURCE      CREATE PROCEDURE
   RESOURCE      CREATE SEQUENCE
   RESOURCE      CREATE TABLE
   RESOURCE      CREATE TRIGGER
   RESOURCE      CREATE TYPE
   9 rows selected.

   ```
 4. 在 `SYS` 用户下创建普通用户。

   ```shell
   SQL> CREATE USER TEST_USER_CREATE_VIEW IDENTIFIED BY xxxxx;

   User created.

   ```
 5. 在 `SYS` 用户下授予普通用户 `CONNECT` 角色。

   ```shell
   SQL> GRANT CONNECT TO TEST_USER_CREATE_VIEW;

   Grant succeeded.

   ```
 6. 在 `SYS` 用户下授予普通用户 `RESOURCE` 角色。

   ```shell
   SQL> GRANT RESOURCE TO TEST_USER_CREATE_VIEW;

   ```
 7. 通过普通用户名和密码方式登录。

   ```shell
   [oracle@xxxx]$sqlplus TEST_USER_CREATE_VIEW/xxxxx

   ```
 8. 查看当前用户。

   USER
   ------------------------------------------------------------------------------
   test_user_create_view

   ```
 9. 在普通用户下创建测试表。

   ```shell
   SQL> CREATE TABLE test(n1 INT PRIMARY KEY, d1 DATE DEFAULT sysdate);

   Table created.

   ```
 10. 在普通用户下创建视图。

    ```
 11. 通过操作系统用户验证方式，使用 SQLPlus 客户端工具，登录实例。

    ```shell
    [oracle@localhost]$sqlplus / as sysdba

    ```
 12. 查看当前用户。

    ```
 13. 在 `SYS` 用户下授予普通用户创建视图权限。

    ```shell
    SQL> GRANT CREATE VIEW TO TEST_USER_CREATE_VIEW;

    ```
 14. 通过普通用户名和密码方式登录。

    ```
 15. 查看当前用户。

    ```
 16. 在普通用户下创建视图。

    ```shell
    SQL> CREATE VIEW vw_test AS SELECT * FROM test;

    View created.

    ```

## 在 OceanBase 数据库 Oracle 模式中测试

1. 通过 `SYS` 用户登录到 Oracle 租户。

   ```shell
   [admin@xxxx]$obclient -h${DB_HOST} -P2883 -uSYS@oboracle#obcluster -A -p${DB_PASSWORD}
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 3221656304
   Server version: OceanBase 4.2.3.0 (r200000192024040109-ca32c1fd8307f35671725f4269733d0f715ce34c) (Built Apr  1 2024 10:11:07)

   Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

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

   ```
 2. 在 Oracle 租户的 `SYS` 用户下先检查 `CONNECT` 和 `CONNECT` 角色包含的权限。

   ```shell
   obclient [SYS]> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee IN ('CONNECT', 'RESOURCE') ORDER BY grantee, privilege;

   ```

   输出结果如下：

   ```shell
   +----------+------------------+
   | GRANTEE  | PRIVILEGE        |
   +----------+------------------+
   | CONNECT  | CREATE SESSION   |
   | RESOURCE | CREATE PROCEDURE |
   | RESOURCE | CREATE SEQUENCE  |
   | RESOURCE | CREATE TABLE     |
   | RESOURCE | CREATE TRIGGER   |
   | RESOURCE | CREATE TYPE      |
   +----------+------------------+
   6 rows in set (0.021 sec)

   ```
 3. 在 Oracle 租户的 `SYS` 用户下创建普通用户。

   ```shell
   obclient [SYS]> CREATE USER TEST_USER_CREATE_VIEW IDENTIFIED BY xxxxx;
   Query OK, 0 rows affected (0.088 sec)

   ```
 4. 在 Oracle 租户的 `SYS` 用户下授予普通用户 `CONNECT` 角色。

   ```shell
   obclient [SYS]> GRANT CONNECT TO TEST_USER_CREATE_VIEW;
   Query OK, 0 rows affected (0.129 sec)

   ```
 5. 在 Oracle 租户的 `SYS` 用户下授予普通用户 `RESOURCE` 角色。

   ```shell
   obclient [SYS]> GRANT RESOURCE TO TEST_USER_CREATE_VIEW;
   Query OK, 0 rows affected (0.076 sec)

   ```
 6. 退出 Oracle 租户下的 `SYS` 用户。

   ```shell
   obclient [SYS]> exit
   Bye

   ```
 7. 通过 `TEST_USER_CREATE_VIEW` 普通用户登录到 Oracle 租户。

   ```shell
   [admin@xxxx]$obclient -h${DB_HOST} -P2883 -uTEST_USER_CREATE_VIEW@oboracle#obcluster -A -p${DB_PASSWORD}
   Welcome to the OceanBase.  Commands end with ; or \g.
   Your OceanBase connection id is 3221656304
   Server version: OceanBase 4.2.3.0 (r200000192024040109-ca32c1fd8307f35671725f4269733d0f715ce34c) (Built Apr  1 2024 10:11:07)

   ```
 8. 在 Oracle 租户的 `TEST_USER_CREATE_VIEW` 普通用户下创建测试表。

   ```shell
   obclient [TEST_USER_CREATE_VIEW]> CREATE TABLE test(n1 INT PRIMARY KEY, d1 DATE DEFAULT sysdate);
   Query OK, 0 rows affected (0.165 sec)

   ```
 9. 在 Oracle 租户的 `TEST_USER_CREATE_VIEW` 普通用户下创建视图。

   ```shell
   obclient [TEST_USER_CREATE_VIEW]> CREATE VIEW vw_test AS SELECT * FROM test;
   ORA-01031: insufficient privileges

   ```
 10. 退出 Oracle 租户下的 `TEST_USER_CREATE_VIEW` 普通用户。

    ```shell
    obclient [TEST_USER_CREATE_VIEW]> exit
    Bye

    ```
 11. 通过 `SYS` 用户登录到 Oracle 租户。

    ```
 12. 在 Oracle 租户的 `SYS` 用户下授予普通用户创建视图权限。

    ```shell
    obclient [SYS]> GRANT CREATE VIEW TO TEST_USER_CREATE_VIEW;
    Query OK, 0 rows affected (0.081 sec)

    ```
 13. 退出 Oracle 租户下的 `SYS` 用户。

    ```
 14. 通过 `TEST_USER_CREATE_VIEW` 普通用户登录到 Oracle 租户。

    ```
 15. 在 Oracle 租户的 `TEST_USER_CREATE_VIEW` 普通用户下创建视图。

    ```shell
    obclient [TEST_USER_CREATE_VIEW]>  CREATE VIEW vw_test AS SELECT * FROM test;
    Query OK, 0 rows affected (0.115 sec)

    ```

## 适用版本

OceanBase 数据库 V3.2.x，V4.2.x 版本。

上一篇

[OceanBase Oracle 模式如何规避 all_tab_columns 中 data_length 和 Oracle 不一致的问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207706)

下一篇

[__all_virtual_table 和 __all_virtual_meta_table 两个表数据不一致的原因解析](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207717) ![有帮助](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) 咨询热线
