我在同一个实例下,建立了不同的存储空间A、B,并且对应见了相应的用户Auser,Buser,现在在Auser登录后,在它的存储过程中需要调用Buser中的存储过程,但是无法访问,是不是有什么权限我没设置对啊,Auser的角色我设置为了Connect和DBA,系统权限设置为了Access_ANY_WORKSPACE和UNLimited TABLESPACE,Buser我设置的也是这样的,请求大家指点

解决方案 »

  1.   

    在B存储过程前加上Buser前缀即Buser.procedure_name
      

  2.   

    我知道了,少加了权限execute_any procedure
      

  3.   

    这是我曾经写过的例子是不是你写的存储过程有问题,或者执行语句有问题啊
    以用户A登录
    用户A中有表dept和mydept,且有相同的字段,dept中有数据,mydept没有数据
    --创建存储过程
    create or replace procedure insert_mydept
    is 
    begin 
    insert into mydept select t.deptno,t.dname,t.loc from dept t where t.deptno not in (select s.deptno from mydept s); 
    commit; 
    end insert_mydept;
     
    以用户B登录
    --调用存储过程
    call A.insert_mydept();再以用户A登录
    select * from mydept;
    你会发现mydept有数据了
      

  4.   

    DBA角色本身已经有execute_any procedure权限SQL> show user
    USER 为 "SYS"
    SQL> create or replace procedure eht.test_proc
      2  is
      3  begin
      4     null;
      5  end;
      6  /过程已创建。SQL> show error
    没有错误。
    SQL> conn scott/scott@test
    已连接。
    SQL> exec test_proc
    BEGIN test_proc; END;      *
    第 1 行出现错误:
    ORA-06550: 第 1 行, 第 7 列:
    PLS-00201: 必须声明标识符 'TEST_PROC'
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored
    SQL> exec eht.test_proc
    BEGIN eht.test_proc; END;      *
    第 1 行出现错误:
    ORA-06550: 第 1 行, 第 7 列:
    PLS-00201: 必须声明标识符 'EHT.TEST_PROC'
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored
    SQL> conn sys/top10@test as sysdba
    已连接。
    SQL> grant dba to scott
      2  ;授权成功。SQL> conn scott/scott@test
    已连接。
    SQL> exec test_proc
    BEGIN test_proc; END;      *
    第 1 行出现错误:
    ORA-06550: 第 1 行, 第 7 列:
    PLS-00201: 必须声明标识符 'TEST_PROC'
    ORA-06550: 第 1 行, 第 7 列:
    PL/SQL: Statement ignored
    SQL> exec eht.test_procPL/SQL 过程已成功完成。SQL>
      

  5.   

    你是在过程中调用的,默认角色继承权限失效。
    不过授予execute any procedure权限有点大,不安全,最小权限原则,授予Auser该存储过程上的执行权限即可。