一直被我误解的create view,ORA-01031: 权限不足

来源:互联网 发布:忘记mac管理员密码 编辑:程序博客网 时间:2024/06/06 14:05
以前一直以为create view权限会随着授予connect和resource角色(本人一般创建新用户时就给这两个角色)而授予,一直以为create view权限就是resource角色的一部分。但是今天实验exp/imp时却发现大错特错。。。

1、用system进入SQL*Plus,创建用户并授权
SQL> create user test03 identified by a;
SQL> create user test04 identified by a;
SQL> grant connect,resource to test03,test04;

2、用test03进入查看
SQL> conn test03/a
SQL> select * from session_privs; //查看当前用户拥有什么权限
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
已选择10行。

3、通过上述select * from session_privs;语句可以看到test03并没有create view的权限的(test04当然也一样了啦)

4、以上只是从原理或者命令上看到test03并没有create view的权限,但我还是要动手exp/imp测试一下,虽然心里已经百分百确定了。。。

5、在test03上建两张表emp和dept
SQL> conn system/***
已连接。
SQL> create table test03.emp as select * from scott.emp;
SQL> create table test03.emp as select * from scott.dept;
create table test03.emp as select * from scott.dept
                    *
第 1 行出现错误:
ORA-00955: 名称已由现有对象使用
SQL> create table test03.dept as select * from scott.dept;

6、创建视图v_loc连接两表查询哪个人住在哪里。
SQL> create or replace view test03.v_loc as
  2  select ename,emp.deptno,loc from emp,dept
  3  where emp.deptno=dept.deptno;

7、连上test03确定创建成功。
SQL> conn test03/a
SQL> select * from tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
V_LOC                          VIEW

SQL> select * from v_loc;
ENAME          DEPTNO LOC
---------- ---------- -------------
SMITH              20 DALLAS
ALLEN              30 CHICAGO
。。。 。。。

8、exp test03/a file=test03.dmp成功
imp test04/a file=test03.dmp fromuser=test03 touser=test04报错:
IMP-00017: 由于 ORACLE 错误 1031, 以下语句失败:
 "CREATE FORCE VIEW "TEST04"."V_LOC"                          ("ENAME","DEPTN"
 "O","LOC") AS "
 "select ename,emp.deptno,loc from emp,dept"
 "where emp.deptno=dept.deptno"
IMP-00003: 遇到 ORACLE 错误 1031
ORA-01031: 权限不足
成功终止导入, 但出现警告。
即使加上ignore=y命令也不行

9、授予create view权限后导入成功
SQL> grant create view to test04;
SQL> conn test04/a
SQL> select * from tab;
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
V_LOC                          VIEW

最后,我还是没明白create view为什么不是resource角色的一部分,为什么啊。。。谁能告诉我。。。
最后,想到直接在test03上创建视图也会报同样的错误
SQL> conn test03/a
已连接。
SQL> create view v_loc2 as
  2  select ename,emp.deptno,loc from emp,dept
  3  where emp.deptno=dept.deptno;
create view v_loc2 as
            *
第 1 行出现错误:
ORA-01031: 权限不足
最后,往上第2步中UNLIMITED TABLESPACE好像不属于connect或resource角色的,那test03怎么会有这个权限的呢?。。。。。。
0 0
原创粉丝点击