首页 文章

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

提问于
浏览
2

在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 回答

  • 1

    不完全是您想要的,但您可以使用动态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,您可以在每个表创建后运行,以确保您的用户完全被授予 .

  • 2

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

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

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

相关问题