0

Oracleデータベースに3人のユーザーがいます

user_admin user user_query

  • user_adminにはdbarolがあります。
  • ユーザーは接続とリソースロールを持っています
  • およびuser_queryはuserと同じです。

最後の1つを構成して、あらゆる種類の挿入、更新、削除を拒否しますが、テーブル、ビュー、またはプロシージャからではなく、完全なテーブルスペースを形成します...

重要なのは、セキュアのみのクエリデータユーザーを持つことです。

しかし、少なくとも私が知る限り、テーブルスペースに対してはそれを行うことはできません。

何か案が?

4

3 に答える 3

1

任意のテーブルまたはビュー(SYSが所有するものを除く)にselectを付与するものは次のとおりです。

    grant select any table to user_query;

ただし、単一のテーブルスペースに限定されるわけではありません。データベース全体の任意のテーブルを選択できます。

于 2012-05-09T18:48:47.913 に答える
1

まず、CONNECTおよびRESOURCEロールの使用は推奨されておらず、そのように文書化されています。

それはさておき、いいえ、テーブルスペースによって、またはユーザーによってさえ付与するための特権はありません。1つには、パーティション化されたテーブルまたはインデックスは複数のテーブルスペースを使用できますが、そのいずれもそのオブジェクトのデフォルトではない可能性があります。

助成金はオブジェクトレベルで行われます。ただし、テーブルのテーブルスペースに基づいて、ユーザー(またはより適切にはロール)に特権を付与するプロシージャを作成することもできます。

于 2012-05-09T21:03:27.910 に答える
1

問題のテーブルスペースを使用するすべてのテーブルをループして、selectを付与できます。データベース全体に適用されるため、「SELECTANYTABLE」のような強力な特権には近づかないようにします。

たとえば、テーブルスペースの名前がXXXの場合、次のようになります。

BEGIN
  FOR tbl IN (SELECT owner, table_name
                FROM dba_tables dt
               WHERE dt.tablespace_name = 'XXX') LOOP
  EXECUTE IMMEDIATE 'GRANT SELECT ON ' || tbl.owner || '.' || tbl.table_name || ' TO USER_QUERY';
  END LOOP;
END;
于 2012-05-09T21:09:22.680 に答える