打扰下,问个问题,我有用户user1,用户user2,我想让用户user1用户对用户user2下面所有对象的select、insert、delete、update、drop。我原来的方法是,一个对象一个对象赋予权限
conn u1/u1@orcl;
grant select,insert,update,delete,drop to u2;
......这样如果把u1的所有对象(表、视图、存储过程......)的权限赋予u2的话,这样操作不知道要做到何时呢!
大家有什么好的办法,一条sql就赋予完毕了呢?

解决方案 »

  1.   

    grant select on 表名 to 用户;
      

  2.   

    如果楼主嫌一个一个赋予权限太麻烦的话可以生成一个脚本 完了再一次执行set serveroutput ondeclare
    v_objname varchar2(50);
    cursor v_cursor is
    select object_name from user_objects where owner='USER2' and object_type='TABLE';
    begin
    open v_cursor;
    loop
    fetch v_cursor into v_objname;
    exit when v_cursor%NOTFOUND;
    dbms_output.put_line('grant all on '||v_objname||' to USER2;');
    end loop;
    close v_cursor;
    end;
    /把运行结果拷到一个.sql文件里再一次运行就可以了
      

  3.   

    用动态sql,生成需要执行的授权sql,然后执行就好了
      

  4.   

    declare
    v_objname varchar2(50);
    v_str varchar2(200);
    cursor v_cursor is
    select object_name from user_objects where owner='USER2' and object_type='TABLE';
    begin
    open v_cursor;
    loop
    fetch v_cursor into v_objname;
    exit when v_cursor%NOTFOUND;
    v_str := 'grant all on '||v_objname||' to USER1';
    execute immediate v_str;
    end loop;
    close v_cursor;
    end;
    /
      

  5.   

    select 'grant all on ' || object_name || ' to username;'
    from user_objects 
    where object_type='TABLE';执行上面的语句,将结果保存成.sql文件,再执行之。
      

  6.   

    declare
    v_objname varchar2(50);
    v_str varchar2(100);
    cursor v_cursor is
    select object_name from user_objects where owner='USER1' and object_type='TABLE';
    begin
    open v_cursor;
    loop
    fetch v_cursor into v_objname;
    exit when v_cursor%NOTFOUND;
    v_str := 'grant all on '||v_objname||' to USER2';
    execute immediate v_str;
    end loop;
    close v_cursor;
    end;
    /如果不想先生成SQL再运行的话
    可以按上面的代码执行一次就可以了
    代码中object_type='TABLE'是以表为例子
    只会把USER1所有表的权利授予USER2
    如果你还想对于USER1的其他对象给USER2授权 那么把object_type的内容换一下就可以了
    或者在后面加or object_type=...