为什么user2登录会处理user1表的数据呢?不可能吧

解决方案 »

  1.   

    为什么user2登录会处理user1表的数据呢?不可能吧,你是不是说反了
      

  2.   

    create procedure p_test() AUTHID CURRENT_USER   is ....
      

  3.   


    如果用户B要执行A用户的某存储过程,传统的解决方案是:
    A用户将此存储过程的执行权限赋予B用户:
    grant execute on p_test to B;
     
    在B用户下创建一个同义词:
    create synonym p_test for a.p_test;
     
    然后B用户就可以直接执行p_test了.
    但是,如果使用 Authid Current_User 选项,在创建时给调用者授权,就简单多了!
    SQL>  create or replace procedure p_test
      2  Authid Current_User
      3  is
      4  begin
      5  execute immediate 'create table creat_table(id number)';
      6  end;
      7  /
    --至于你说的执行当前用户表里面的数据,你可以在传递参数时不明确指定是那张表,
    --只是用变量代替,如:
    create or replace procedure pro_test(table_name in varchar2(20))
    authid current_user
    is
    begin
         select * from table_name;
    end pro_test;
      

  4.   

    似乎仍没有解决问题授权还好,大不了,我grant授权就是了但是我看了你下面的语句,发现,你把表当参数传入了,也就是说,对于我们这些复杂的己写好的过程,我们需要重写,改成动态的,这就麻烦好多了,改动太大了,且如果我里面要处理50张表的话,那么,我要带的参数肯定超过50了,
    这几乎不可能这样做。所以期望大家给出更好的解决方法。在线等待!
    感谢啦!
      

  5.   

    我测了下,在不同用户中执行时,它:
    SQL> exec p_test;
     
    begin p_test; end;
     
    ORA-06550: 第 2 行, 第 7 列: 
    PLS-00201: 必须声明标识符 'P_TEST'
    ORA-06550: 第 2 行, 第 7 列: 
    PL/SQL: Statement ignored看来这个 AUTHID CURRENT_USER  还是有限制。多谢!
      

  6.   

    你要把这个过程的执行权限授给这个用户,执行的时候exec 原用户.过程,加AUTHID CURRENT_USER 后,处理的执行用户下的表,不加AUTHID CURRENT_USER时处理的是原创建过程用户下的表