Oracle:一行语句授予多个模式的权限

3
我希望能够在Oracle中编写一行代码,以便可以一次性将表的选择权限授予多个模式。以下是我拥有的内容,但我遇到了语法错误:
GRANT SELECT ON OWNER.TABLE_NAME to (select distinct owner from dba_objects where owner like 'SCHEMA_%');

因为参数不应该是列表或结果集。请参考 Littlefoot 的答案。 - Alfabravo
此外,如果与PLSQL代码一起使用,则会打开一些关于权限的微妙之处。 对于直接查询,您可以考虑创建角色,将角色分配给用户,然后仅向角色分配特权,该角色中的用户继承特权。 - TenG
1个回答

3
您需要使用动态SQL来实现这一点,例如:
SQL> declare
  2    l_str varchar2(200);
  3  begin
  4    for cur_r in (select 'MIKE' username from dual union all
  5                  select 'IMPORTER'      from dual union all
  6                  select 'DIP'           from dual
  7                 )
  8    loop
  9      l_str := 'grant select on emp to ' || cur_r.username;
 10      dbms_output.put_line(l_str);
 11      execute immediate l_str;
 12    end loop;
 13  end;
 14  /
grant select on emp to MIKE
grant select on emp to IMPORTER
grant select on emp to DIP

PL/SQL procedure successfully completed.

SQL>

我从数据库中使用了几个用户在游标FOR循环中提取用户名; 你可以用你自己的select distinct owner from dba_objects where owner like 'SCHEMA_%'来代替它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接