テーブルスペースには100近く近いテーブルがたくさんあります。これらすべてのテーブルに対する選択、挿入、更新の特権をユーザーに付与する必要があります。出来ますか?私が書くとき:
GRANT USE OF TABLESPACE MYTABLESPACE TO USERNAME
Oracleエラー「無効または権限がありません」が表示される
データディクショナリビューdba_tablesを使用します(dba_tablesにアクセスできない場合は、all_tablesを使用します)。
declare
l_SQL varchar2(4000);
begin
for cur in (
select * from dba_tables where tablespace_name = 'mytablespace')
loop
l_sql := 'grant select, insert, update on ' || cur.owner || '.' || cur.table_name || ' to myuser';
--dbms_output.put_line(l_SQL || ';');
execute immediate l_SQL;
end loop;
end;
スクリプトを生成するだけの場合は、execute immediateをコメント化し、dbms_outputのコメントを外します。
USE OF TABLESPACE
は文書化されたオプションではありません。どこで見つけましたか?
これにより、ユーザーがテーブルスペースにオブジェクトを作成できるようになります。
alter user username quota [amount] on mytablespace;
オブジェクトの選択、挿入、更新、削除を許可するには、テーブルごとに個別のgrant
コマンドを実行する必要があります。
grant select, insert, update, delete on mytable1 to username;
....