在特定用户拥有的所有表上授予选择权限

Mar*_*ddy 39 oracle

我需要为特定用户拥有的所有表授予对另一个用户的select权限.我可以使用以下命令执行此操作:

Grant Select on OwningUser.* to ReceivingUser
Run Code Online (Sandbox Code Playgroud)

或者我是否必须为每个表生成sql,其中包含以下内容:

 Select 'GRANT SELECT ON OwningUser.'||Table_Name||'TO ReceivingUser' 
 From All_Tables Where Owner='OWNINGUSER'
Run Code Online (Sandbox Code Playgroud)

DCo*_*kie 55

好吧,这不是一个单一的声明,但它与oracle的关系非常接近:

BEGIN
   FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='TheOwner') LOOP
      EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to TheUser';
   END LOOP;
END; 
Run Code Online (Sandbox Code Playgroud)

  • 只是观察到这种方法的挑战在于它是“时间点” - 任何后续添加的表都将被排除。如果有一个概念性的“向 someUser 授予对 someSchema 拥有的任何表的只读访问权限”的语句会更好,因为可以保证 someSchema 拥有的任何表都可以被 someUser 读取 (3认同)
  • 另外`for v in(选择OWNER,来自ALL_VIEWS的VIEW_NAME,其中OWNER ='XXX')循环` (2认同)