数据库中现在有个A用户的表a。
创建一个B用户,拥有的角色是dba,connect.
B用户建立视图b,b中用a表,但是在创建的时候提示权限不足 。
但是直接执行视图的sql时候是可以访问的。创建视图代码如下create or replace view inPatiRegInfo as
--inPatiRegInfo
select .........
  from A.a
 难道dba的权限,在创建视图的时候不允许使用其他用户的表吗。

解决方案 »

  1.   

    SQL> conn sys@orcl200 as sysdba
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as SYS
     
    SQL> grant sysdba to scott;
     
    Grant succeeded
     
    SQL> conn scott@orcl200 as sysdba
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as SYS
     
    SQL> create or replace view my_view as select * from tds.info_app;
     
    View created
     
    SQL> 
      

  2.   

    DUQIANG@oamis>>conn / as sysdba;
    已连接。
    /****************************************/
    /*****Welcome To The Local Database ********/
    /****************************************/
    SYS@oamis>>grant dba to scott;授权成功。已用时间:  00: 00: 00.13
    SYS@oamis>>conn scott/tiger
    已连接。
    /****************************************/
    /*****Welcome To The Local Database ********/
    /****************************************/
    SCOTT@oamis>>create or replace view test_view as
      2  select * from duqiang.TEST_DATA;
    select * from duqiang.TEST_DATA
                          *
    第 2 行出现错误:
    ORA-01031: 权限不足
    已用时间:  00: 00: 00.03
    SCOTT@oamis>>CONN DUQIANG/DUQIANG
    已连接。
    /****************************************/
    /*****Welcome To The Local Database ********/
    /****************************************/
    DUQIANG@oamis>>GRANT SELECT ANY TABLE TO SCOTT;
    GRANT SELECT ANY TABLE TO SCOTT
    *
    第 1 行出现错误:
    ORA-01031: 权限不足
    已用时间:  00: 00: 00.06
    DUQIANG@oamis>>GRANT SELECT ON TEST_DATA TO SCOTT;授权成功。已用时间:  00: 00: 00.10
    DUQIANG@oamis>>CONN SCOTT/TIGER
    已连接。
    /****************************************/
    /*****Welcome To The Local Database ********/
    /****************************************/
    SCOTT@oamis>>CREATE OR REPLACE TEST_VIEW AS
      2  SELECT * FROM DUQIANG.TEST_DATA;
    CREATE OR REPLACE TEST_VIEW AS
                      *
    第 1 行出现错误:
    ORA-00922: 选项缺失或无效
    已用时间:  00: 00: 00.01
    SCOTT@oamis>>SHOW ERRORS;
    没有错误。
    SCOTT@oamis>>/
    CREATE OR REPLACE TEST_VIEW AS
                      *
    第 1 行出现错误:
    ORA-00922: 选项缺失或无效
    已用时间:  00: 00: 00.00
    SCOTT@oamis>>L
      1  CREATE OR REPLACE TEST_VIEW AS
      2* SELECT * FROM DUQIANG.TEST_DATA
    SCOTT@oamis>>ED
    已写入 file afiedt.buf
    'C:\Program' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。  1  CREATE OR REPLACE TEST_VIEW AS
      2* SELECT * FROM DUQIANG.TEST_DATA
    SCOTT@oamis>>CREATE OR REPLACE VIEW TEST_VIEW AS
      2  SELECT * FROM DUQIANG.TEST_DATA;视图已创建。已用时间:  00: 00: 00.03
      

  3.   

    看来如果scott拥有了dba的权限还是不能够使用test_data表,
    只有通过a用户给b授权后,b才能够在a的表示创建视图。
    DUQIANG@oamis>>GRANT SELECT ON TEST_DATA TO SCOTT;授权成功。
    不知道我的理解是否正确!但从测试的效果看,应该就是这样的。
      

  4.   

    你单独select * from A.a要么
    grant create view to A
      

  5.   

    dba的角色只是一个幌子,所以一般也很少看到grant dba to ...的语句。
      

  6.   

    学习了,
    单独执行视图中的SQL语句是可以的,而不能创建视图,
    是不是没有创建视图的权限!
      

  7.   

    我测试了,单纯的用户直接授权dba,访问其他用户的表都不行的
    SQL> show user
    USER 为 "CHF"
    SQL> grant dba to b;授权成功。SQL> select tname from tab;未选定行SQL> create table a(id int);表已创建。SQL> insert into a values(1);已创建 1 行。SQL> commit;提交完成。SQL> conn b/b@vm;
    已连接。
    SQL> select chf.a;
    select chf.a
               *
    第 1 行出现错误:
    ORA-00923: 未找到要求的 FROM 关键字
    SQL> select * from chf.a;
    select * from chf.a
                      *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    SQL> conn chf/xifenfei@vm;
    已连接。
    SQL> grant select on a to b;授权成功。SQL> conn b/b@vm;
    已连接。
    SQL> select * from chf.a;        ID
    ----------
             1
    也许因为dba是system级别的,而我们访问表是object级别的,所以不行哦