Sql 授予Oracle权限

Sql 授予Oracle权限,sql,database,oracle,privileges,grant,Sql,Database,Oracle,Privileges,Grant,我想向用户授予模式中所有表的更新权限,除了更新主键。有没有简单的方法?或者我应该分别为每个表和定义每个列 它是如何工作的?我相信有一个简单的方法可以做到这一点。我正在阅读所有文档,但它提供了所有通用示例 declare myquery varchar2(1024); begin for rc in (select * from user_tab_cols u where not exists ( select * from user_constraints

我想向用户授予模式中所有表的更新权限,除了更新主键。有没有简单的方法?或者我应该分别为每个表和定义每个列

它是如何工作的?我相信有一个简单的方法可以做到这一点。我正在阅读所有文档,但它提供了所有通用示例

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、 我不确定描述中的所有表格是什么意思。在我查询当前模式中的所有表时,如果需要数据库中的所有表,请将user***更改为all***,即user\u约束更改为all\u约束,等等


p、 我不确定描述中的所有表格是什么意思。在我查询当前架构中所有表时,如果需要数据库中的所有表,请将user***更改为all***,即user\u约束更改为all\u约束等。

按顺序连接用户以授予权限

除更新外,请删除此

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;

按顺序连接用户以授予权限

除更新外,请删除此

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;

谢谢你的回答。但是,我是否可以授予用户所有权限,然后撤消更新列名?那行吗?谢谢你的回答。但是,我是否可以授予用户所有权限,然后撤消更新列名?那行吗?