2015-11-01 384 views
0

我想授予用户更新权限给模式中的所有表,除了更新主键。有没有简单的方法来做到这一点?或者我应该为每个表单独执行并定义每个列。授予Oracle授予权限

它是如何工作的?我确定有一个简单的方法来做到这一点。我正在阅读所有文档,但它给了我所有的通用示例。

回答

4
declare 
    myquery varchar2(1024); 
begin 
    for rc in (select * from user_tab_cols u 
    where not exists (
    select * from 
     user_constraints c 
     ,user_cons_columns cc   
    where c.constraint_type = 'P' 
     and c.constraint_name = cc.column_name 
     and u.table_name = cc.table_name 
     and u.column_name = cc.column_name 
)) loop 
    myquery := 'GRANT update ('||rc.column_name||') on '||rc.table_name||' to myuser'; 
    --dbms_output.put_line(myquery); 
    execute immediate myquery; 
    end loop; 
end; 

p.s.我不清楚描述中“所有表”的含义。在我查询当前模式中的所有表,如果你需要数据库中的所有表更改用户***到所有***,即user_constraints到all_constraints等。

+0

谢谢你的回答。但是,我可以授予用户所有权限,然后撤消更新列名称吗?这能工作吗? – user983983