• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:参照権限の付与方法)

参照権限の付与方法

このQ&Aのポイント
  • 参照権限の付与方法のご質問について、Windows Server 2003とOracle 9.2.0.6.0の環境で、userAが持っている表やビューの参照権限をuserBに与える方法について説明します。
  • userAに権限を付与する権限がないため、参照権限の付与ができず、ORA-01031のエラーが発生しています。userAに権限を付与するためには、どのようなSQLを発行すればいいのかについても説明します。
  • systemユーザでログインし、userBに権限を与える方法もありますが、表やビューを1つずつ与える必要があります。全ての表やビューに参照権限を与える方法についても解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

誤解しているようですが、「SELECT ANY TABLE」権限は DB上の全てのテーブルを参照できる権限です。 userAのテーブルだけではなく、全てのテーブルが参照できてしまいます。 下記の要件を満たすには個別テーブルに対して権限を与える必要があります。 >userAが持っている表、ビューの参照権限を >userBに与えようと思います。 面倒であれば、下記URLのようにディクショナリからSQL文を生成します。 http://otn.oracle.co.jp/forum/message.jspa?messageID=2002070 >以下のエラーが出ました。 > ORA-01031:権限が不足しています。 > >これは、userAに権限を付与する権限がないのだと >理解しました。 「SELECT ANY TABLE」はシステム権限です。 ですので通常DBAが権限を付与します。所有者はSYSです。 「userA」に「SELECT ANY TABLE」を付与しても、また貸しのように 他ユーザに付与できません。 もし、どうしても「userA」から権限を与えたい場合、「userA」に対して「WITH ADMIN OPTION」付きで「SELECT ANY TABLE」を付与します。 しかし、また貸しで権限を付与するのはわかりにくいのでやめた方がよいでしょう。

akisusao
質問者

お礼

回答ありがとうございます。 >誤解しているようですが、「SELECT ANY TABLE」権限は >DB上の全てのテーブルを参照できる権限です。 >userAのテーブルだけではなく、全てのテーブルが参照できてしまいます。 そうだったのですね。勘違いしていました。 >「SELECT ANY TABLE」はシステム権限です。 userAはDBA権限を持っていないので、  ORA-01031:権限が不足しています。 のエラーが出たのですね。納得しました。 >要件を満たすには個別テーブルに対して権限を与える必要があります。 了解しました。ディクショナリビュー等を利用し、1つずつ与えることにします。