在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 ...
/
答案 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
如果需要,您可以在同一个地方找到解决方法的想法。