web-dev-qa-db-ja.com

表領域への選択、挿入、更新の許可

テーブルスペースには100近く近いテーブルがたくさんあります。これらすべてのテーブルに対する選択、挿入、更新の特権をユーザーに付与する必要があります。出来ますか?私が書くとき:

GRANT USE OF TABLESPACE MYTABLESPACE TO USERNAME

Oracleエラー「無効または権限がありません」が表示される

8

データディクショナリビュー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のコメントを外します。

9
Frank Schmitt

USE OF TABLESPACEは文書化されたオプションではありません。どこで見つけましたか?

これにより、ユーザーがテーブルスペースにオブジェクトを作成できるようになります。

alter user username quota [amount] on mytablespace;

オブジェクトの選択、挿入、更新、削除を許可するには、テーブルごとに個別のgrantコマンドを実行する必要があります。

grant select, insert, update, delete on mytable1 to username;
....
11
Tony Andrews