在架构上的任何表/视图上授予select

时间:2016-04-24 16:55:58

标签: sql oracle

在oracle中如果我正在创建用户/模式FOO,那么在模式FOO上创建一堆表,

有没有一种方法可以在创建表/视图之前为所有表/视图提供User FOO grant select? 或者我必须在创建表/视图后才能这样做?

CREATE USER FOO ....
/
*** GRANT SELECT TO USER FOO ON ANY TABLE/VIEW CREATED
/
CREATE TABLE 1    ...
/
CREATE TABLE ...   ...
/
CREATE TABLE N     ...
/

2 个答案:

答案 0 :(得分:2)

不完全是您想要的,但您可以使用动态sql为模式的所有表赋予select(或任何其他)特权:

begin
  for i in (
            select 'grant select on ' || table_name || ' to USER2' as stm
            from dba_tables
            where owner = 'USER1'
            )
  loop
    execute immediate i.stm;
  end loop;
end;

这与你提出的问题略有不同,因为你只能在创建了所有表之后执行此操作;但是,这是一个简单的SQL,您可以在每个表创建后运行,以确保您的用户完全被授予。

答案 1 :(得分:1)

您要求的是grant select on <schema_name> to <user_name>。今天这样的事情不存在。在OTN(Oracle技术网)上有一个关于此问题的开放请求/用户调查,该调查目前处于活动状态:

https://community.oracle.com/ideas/2333

如果需要,您可以在同一个地方找到解决方法的想法。