dポイントプレゼントキャンペーン実施中!

OcaleMasterにむけて勉強中です。
Oracle11.2をOracleLinux5にインストールして以下を行いました。

1.ユーザー「test」を作成。権限はconnectロールのみ。
2.sqlplusにtestでログイン(sqlplus test/***)
3.テーブル「t1」を作成/行移動を有効。
4.t1に対し挿入・更新を実行する。
5.flashback tableを実施すると以下のようなエラーが発生しました。

SQL> flashback table test.t1 to scn 1015246;
flashback table test.t1 to scn 1015246
*
行1でエラーが発生しました。:
ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-01031:
権限が不足しています。

6.testにflashback any tableシステム権限/sysdba権限を付与
7.sqlplusにtestで再度ログイン(sqlplus test/***)
8.flashback tableを実施するとやはり同様のエラーが発生しました。

9.sqlplusにsysdbaでtestで再度ログイン。(sqlplus test/*** as sysdba)
10.flashback tableを実施すると成功しました。

参考書などの記載を見る限り、基本的に自分のテーブルであれば権限は不要と思ったのですが(少なくともSYSDBAでないと不可というものではないはず!?)、No5、No8でエラーとなってしまったのは、どこに問題があったものでしょうか。

何か情報ありましたら教えてください。

A 回答 (2件)

こんにちわ。



>どこに問題があったものでしょうか。

Oracle のマニュアル (SQL リファレンス) には、以下のように記載されています。

> 表を以前のSCNまたはタイムスタンプまでフラッシュバックするには、
> その表に対するFLASHBACKオブジェクト権限か、FLASHBACK ANY TABLE
> システム権限が必要です。 また、その表に対するSELECT、INSERT、DELETE
> およびALTERオブジェクト権限が必要です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私の方でもマニュアルの方は確認しまして、たとえば別ユーザー(FLASHBACKオブジェクト権限以外をtest.t1に付与。FLASHBACKのみない。)で以下を実行したところでは、直接エラーが発生しました。

SQL> flashback table test.t1 to scn 1015246;
flashback table test.t1 to scn 1015246
*
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。

対してtestでは再帰SQLにてエラーとなっています。
testユーザーはt1に対しては自所有のオブジェクトのため全オブジェクト権限を持っているはずですし、No8ではFLASHBACK ANY TABLEを付与しても発生したので、マニュアルに記載以外の条件が必要なのではと思った次第でした。

なお、その別ユーザーにFLASHBACK ANY TABLEを付与しても同様でした。
的外れかもしれませんが、ディクショナリ関連の権限が必要かと推測しています・・・。

他になにか情報ありましたら教えてください。

お礼日時:2011/12/29 22:57

こんにちわ。


#1 のmuyodhid です。

> 1.ユーザー「test」を作成。権限はconnectロールのみ。
> 2.sqlplusにtestでログイン(sqlplus test/***)
> 3.テーブル「t1」を作成/行移動を有効。
Oracle 10.2 から、connect ロールにはCreate session System 権限しか
無くなった筈ので、Create table もできないはずです。
権限を付与したユーザとFlashback を実行しているユーザの権限を
再度確認した方が良いと思います。

以下、11.2 のセキュリティガイドのConnect ロールに関する説明です。
http://docs.oracle.com/cd/E16338_01/network.112/ …

この回答への補足

本件、原因は不明なままですが、いつの間にか実行できるようになっておりました。。。

関係ないと思いますが、実施した内容として大きなものはバックアップやファイル削除後のリカバリーなどを行っておりました。

若干すっきりしない点がありますが、回答いただきありがとうございました。

補足日時:2012/01/04 09:49
    • good
    • 0
この回答へのお礼

大変申し訳ありません、質問の文章が誤っておりました。

「1.ユーザー「test」を作成。権限はconnectロールのみ。」

と記載しましたが、実際にはCONNECT/MGMT_USER/OEM_MONITORの3つの権限がありました。

(以前、enterprise managerよりtestでインポート/エクスポートするとき、やはり権限関連でうまく動作せず、ロールを付与したり、どこかのサイトにのっていたストアドプロシージャを実行したりしました)

2,3,記載の通りt1は、test自身が作成したものになります。

また、念のためtestにさらにresourceロールを付与しましたが同様でした。

現在のtestの権限は以下の通りです。

ロール:CONNECT/MGMT_USER/OEM_MONITOR/RESOURCE(いずれもデフォルト)
システム権限:FLASHBACK ANY TABLE
オブジェクト権限:無し

たびたびお手数をおかけしますが、情報ありましたらよろしくお願いします。

お礼日時:2011/12/30 00:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!