您的位置:首页 > 其它

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

2015-03-10 16:24 323 查看
以前一直以为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怎么会有这个权限的呢?。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: