2012-05-09 36 views
0

からできる唯一のクエリデータのユーザを作成し、私は私のOracleデータベースに3人のユーザーが表領域(オラクル)

user_admin ユーザー USER_QUERY

  • user_adminは、DBA ROLを持っています。
  • ユーザーは接続してリソースロールを持っています
  • とuser_queryはユーザーと同じです。私はポイントがある

    ...、インサートのすべての種類の彼を否定し、更新ではなく、テーブル、ビュー、またはプロシージャからフル表領域を削除しても形成するために、最後の1を構成したい

安全なだけの照会データユーザーを持つこと。

しかし、少なくとも私が知っている限り、テーブルスペースではできません。

答えて

1

問題の表スペースを使用するすべての表をループして、selectを許可することができます。私は、データベース全体に当てはまるように、 "SELECT ANY TABLE"のような強力なprivから離れようとします。例えば

、表領域は、その後、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; 
1

(SYSが所有するものを除く)任意のテーブルまたはビューに選択付与以下がある:

grant select any table to user_query; 

それはしかし、単一の表領域に制限するものではない - 全体データベース内のテーブルは次のようになり選択可能です。

+0

しかし、私が探してものではありません...:\ – nax

1

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

これ以外にも、表スペースまたはユーザーによって権限を付与する特権はありません。パーティション化された表または索引では、複数の表領域を使用できますが、いずれもそのオブジェクトのデフォルトではありません。

グラントはオブジェクトレベルにあります。あなたは、テーブルのテーブルスペースに基づいて、ユーザ(またはより良いロール)に権限を与える手続きを作成することができます。

+0

1.あなたは、インサートを接続するためにpermisionsにユーザーを与えるために私をお勧めしますどのように、削除し、変更しますか? (テーブル、トリガ、プロシージャ、インデックス、すべて?)2. OKなので、おそらく最善の解決策は、彼に最小のパーミッションを与え、テーブルごとに選択パーミッションテーブルを与えるだけです。 – nax

+0

「セッションの作成」などの権限の文書化されたリストを参照し、どのユーザーがどのユーザーに必要かを検討します。役割を作成して権限を割り当ててから、ユーザーに役割を割り当てます。 –