首批通过分布式安全可靠测评,为关键业务系统打造
Oracle 普通用户 CREATE VIEW 权限问题
更新时间:2026-05-25 09:11
本文介绍 Oracle 普通用户 CREATE VIEW 权限问题。
在 Oracle 11g 版本中,普通用户 CREATE VIEW 报错:ORA-01031: insufficient privileges, 示例如下。
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 创建普通用户。
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 版本中测试
通过操作系统用户验证方式,使用 SQLPlus 客户端工具,登录实例。
[oracle@xxxx]$sqlplus / as sysdba查看当前用户。
SQL> SELECT user FROM dual; USER ------------------------------------------------------------------------------ SYS在
SYS用户下先检查CONNECT和CONNECT角色包含的权限。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;输出结果如下:
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.在
SYS用户下创建普通用户。SQL> CREATE USER TEST_USER_CREATE_VIEW IDENTIFIED BY xxxxx; User created.在
SYS用户下授予普通用户CONNECT角色。SQL> GRANT CONNECT TO TEST_USER_CREATE_VIEW; Grant succeeded.在
SYS用户下授予普通用户RESOURCE角色。SQL> GRANT RESOURCE TO TEST_USER_CREATE_VIEW; Grant succeeded.通过普通用户名和密码方式登录。
[oracle@xxxx]$sqlplus TEST_USER_CREATE_VIEW/xxxxx查看当前用户。
SQL> SELECT user FROM dual; USER ------------------------------------------------------------------------------ test_user_create_view在普通用户下创建测试表。
SQL> CREATE TABLE test(n1 INT PRIMARY KEY, d1 DATE DEFAULT sysdate); Table created.在普通用户下创建视图。
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通过操作系统用户验证方式,使用 SQLPlus 客户端工具,登录实例。
[oracle@localhost]$sqlplus / as sysdba查看当前用户。
SQL> SELECT user FROM dual; USER ------------------------------------------------------------------------------ SYS在
SYS用户下授予普通用户创建视图权限。SQL> GRANT CREATE VIEW TO TEST_USER_CREATE_VIEW; Grant succeeded.通过普通用户名和密码方式登录。
[oracle@xxxx]$sqlplus TEST_USER_CREATE_VIEW/xxxxx查看当前用户。
SQL> SELECT user FROM dual; USER ------------------------------------------------------------------------------ test_user_create_view在普通用户下创建视图。
SQL> CREATE VIEW vw_test AS SELECT * FROM test; View created.
在 OceanBase 数据库 Oracle 模式中测试
通过
SYS用户登录到 Oracle 租户。[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.在 Oracle 租户的
SYS用户下先检查CONNECT和CONNECT角色包含的权限。obclient [SYS]> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee IN ('CONNECT', 'RESOURCE') ORDER BY grantee, privilege;输出结果如下:
+----------+------------------+ | 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)在 Oracle 租户的
SYS用户下创建普通用户。obclient [SYS]> CREATE USER TEST_USER_CREATE_VIEW IDENTIFIED BY xxxxx; Query OK, 0 rows affected (0.088 sec)在 Oracle 租户的
SYS用户下授予普通用户CONNECT角色。obclient [SYS]> GRANT CONNECT TO TEST_USER_CREATE_VIEW; Query OK, 0 rows affected (0.129 sec)在 Oracle 租户的
SYS用户下授予普通用户RESOURCE角色。obclient [SYS]> GRANT RESOURCE TO TEST_USER_CREATE_VIEW; Query OK, 0 rows affected (0.076 sec)退出 Oracle 租户下的
SYS用户。obclient [SYS]> exit Bye通过
TEST_USER_CREATE_VIEW普通用户登录到 Oracle 租户。[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) 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.在 Oracle 租户的
TEST_USER_CREATE_VIEW普通用户下创建测试表。obclient [TEST_USER_CREATE_VIEW]> CREATE TABLE test(n1 INT PRIMARY KEY, d1 DATE DEFAULT sysdate); Query OK, 0 rows affected (0.165 sec)在 Oracle 租户的
TEST_USER_CREATE_VIEW普通用户下创建视图。obclient [TEST_USER_CREATE_VIEW]> CREATE VIEW vw_test AS SELECT * FROM test; ORA-01031: insufficient privileges退出 Oracle 租户下的
TEST_USER_CREATE_VIEW普通用户。obclient [TEST_USER_CREATE_VIEW]> exit Bye通过
SYS用户登录到 Oracle 租户。[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.在 Oracle 租户的
SYS用户下授予普通用户创建视图权限。obclient [SYS]> GRANT CREATE VIEW TO TEST_USER_CREATE_VIEW; Query OK, 0 rows affected (0.081 sec)退出 Oracle 租户下的
SYS用户。obclient [SYS]> exit Bye通过
TEST_USER_CREATE_VIEW普通用户登录到 Oracle 租户。[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) 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.在 Oracle 租户的
TEST_USER_CREATE_VIEW普通用户下创建视图。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 版本。