为Oracle授予权限

时间:2015-11-01 13:03:29

标签: sql database oracle privileges grant

除了更新主键之外,我想向用户授予模式中所有表的更新权限。有一个简单的方法吗?或者我应该为每个表单独执行并定义每个列。

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

2 个答案:

答案 0 :(得分: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等。

答案 1 :(得分:0)

依次连接用户以获得授予权限

对于UPDATE,请删除此

BEGIN
  FOR x IN (SELECT * FROM user_tables)
  LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT, UPDATE, DELETE, INSERT ON ' || x.table_name || ' TO <user>';
  END LOOP;
END;