Oracleエラー対応(ORA-01031):ORA-01031発生時の対処方法について

現役DBAが解説 ~Oracleエラー対応~

Oracle Databaseでよく発生するエラーとしてORA-01031があります。
これは実行ユーザーに必要な権限が付与されていないために発生します。

今回はORA-01031の内容とエラー発生時の対応について、ユーザーがマテリアライズドビューを作成する場合を例にご説明します。

1. エラー発生例

ORA-01031エラー発生例(USER1がマテリアライズドビュー作成)

SQL> create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE;
create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE

ERROR at line 1:
ORA-01031: insufficient privileges

2. エラー原因

USER1がマテリアライズドビューを作成しようとしたところ、必要なシステム権限が足りないためにエラーが発生しています。

3. エラー調査と対応

まず、USER1に付与されているシステム権限をUSER_SYS_PRIVSやDBA_SYS_PRIVSから確認します。
※USER_SYS_PRIVSは現行ユーザーのみのシステム権限を表示します

<システム権限確認>

SQL> select username, privilege, admin_option
  2  from user_sys_privs;
				
USERNAME   PRIVILEGE                                   ADM
---------------- -------------------------------------------- ---
USER1        CREATE SESSION                             NO

確認の結果、USER1には「CREATE SESSION」権限しか付与されていません。
そのため、マテリアライズドビューを作成するために必要なシステム権限をSYSTEM等の管理ユーザーからGRANT文でUSER1に付与します。

今回気を付けなくてはいけないのは、マテリアライズドビューを作成するためには「CREATE MATERIALIZED VIEW」権限だけでは不足している、という点です。
「CREATE MATERIALIZED VIEW」権限に加えて「CREATE TABLE」権限も必要になります。

OracleのSQL言語リファレンスには、前提条件の項目に必要な各種権限が記載されていますので、不足している権限をこちらで確認しておきましょう。
※実際のマニュアルでは、マテリアライズドビュー作成に必要な権限は『「CREATE MATERIALIZED VIEW」権限と「CREATE TABLE」権限、または「CREATE ANY TABLE」権限のいずれか』と記載がありますが、「CREATE ANY TABLE」権限は他スキーマへのテーブル作成も可能になる強力な権限なので、なるべく付与しないことを推奨します

CREATE MATERIALIZED VIEW権限だけ付与した場合

SQL> select username, privilege, admin_option
  2  from user_sys_privs;

USERNAME     PRIVILEGE                                  ADM
--------------  ----------------------------------------  ---------
USER1        CREATE MATERIALIZED VIEW       NO
USER1        CREATE SESSION                        NO

SQL> create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE;
create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE
                                                                 *
ERROR at line 1:
ORA-01031: insufficient privileges

→まだ権限が足りないためエラー

CREATE MATERIALIZED VIEW権限とCREATE TABLE権限を付与した場合

SQL> select username, privilege, admin_option
2 from user_sys_privs; USERNAME PRIVILEGE   ADM --------------- ---------------------------------------- -------- USER1   CREATE TABLE NO USER1   CREATE MATERIALIZED VIEW NO USER1   CREATE SESSION NO SQL> create materialized view USER1.TEST_MVIEW as select * from USER2.TEST_TABLE; Materialized view created.

→権限が足りているため、マテリアライズドビューが作成できた

4. 最後に

ORA-01031はDB操作する実行ユーザーに必要な権限が不足しているために発生するエラーです。
まずは実行ユーザーに付与されている権限の確認と、操作に必要な権限の確認を行い、追加の権限を付与しましょう。

なお、このとき権限を複数付与する代わりに管理者用のDBAロールなどを付与してしまうと、必要以上に強力な権限をユーザーに与えてしまい、セキュリティ上大きな問題になります。
エラー解消に必要な最低権限のみを与えるようにしてください。