Oracleでユーザ権限を設定する方法を徹底解説|GRANT・REVOKE・ROLEの使い方

Oracleでユーザ権限を設定する方法を徹底解説|GRANT・REVOKE・ROLEの使い方

※ この記事にはアフィリエイトリンクが含まれます

Oracleのユーザ権限について、あいまいなまま設定していたりしませんか?

Oracleでは、ユーザごとに「どんな操作をしてよいか」を厳密に制御しており、接続やテーブル作成、データの参照・更新など、すべての操作に対して明確な権限が必要です。

例えば、以下のようなシーンは非常によくあります。

  • 開発環境で新しいユーザを作成したが、接続できない
  • 他のスキーマのテーブルを参照したいが、ORA-01031: 権限がありません と怒られた
  • 管理者が付与した権限を整理したいけど、どのユーザが何を持っているのか分からない

こうした悩みを解決するには、Oracleの権限モデル(システム権限・オブジェクト権限・ロール)をしっかり理解することが大切です。

本記事では、初心者でも迷わないように、

  • 権限の基本構造
  • GRANT / REVOKE コマンドの使い方
  • ロール(ROLE)を使った権限管理
  • よくあるエラーと確認方法

といったポイントを、実際のSQL例を交えながら解説していきます。

記事の最後には、Oracleをさらに深く学びたい方向けに、実務でも役立つおすすめの書籍を紹介しますので、ぜひ最後まで読んでみてください。

目次

Oracleの権限とは?基本の考え方

そもそも、権限ってどういうもの?というところから見てみましょう。

Oracleでは、ユーザーが行える操作を細かく制御するために、「権限」という仕組みがあります。
この権限は大きく分けて、次の2種類に分類されます。

システム権限

データベース全体に対して有効な権限です。

ユーザの作成や、テーブル・ビューの作成、データベース接続など、システムレベルの操作を行うためのものです。

例えば以下のような権限があります。

スクロールできます
権限名内容
CREATE SESSIONデータベースへ接続できる
CREATE TABLEテーブルを作成できる
CREATE VIEWビューを作成できる
CREATE USER新しいユーザを作成できる
DROP USERユーザを削除できる

システム権限は、データベース全体に影響します。誤って与えすぎると、セキュリティリスクになるため、必要最小限の付与が鉄則です。

オブジェクト権限

特定のオブジェクト(テーブル・ビューなど)に対して与える権限です。

あるユーザが他のスキーマのテーブルを参照・更新したいときに必要になります。

主なオブジェクト権限は次の通りです。

スクロールできます
権限名内容
SELECTデータの参照ができる
INSERTデータの追加ができる
UPDATEデータの更新ができる
DELETEデータの削除ができる
REFERENCES外部キー参照ができる

たとえば、他のスキーマ(HR)にあるEMPLOYEES テーブルに対してSELECT が可能になります。

権限の関係は、ざっくりですが下図のとおりです。

   Oracle Database 全体        
   ├─ システム権限(CREATE USER など)
   │   → 管理者が操作可能
   └─ スキーマ(各ユーザ)
        ├─ オブジェクト権限(SELECT, UPDATE など)
        │   → 他ユーザへ付与できる         
        └─ 自分のテーブルなどを管理       
  • システム権限:データベース全体に対する操作権限
  • オブジェクト権限:特定のテーブルやビューに対する操作権限

Oracleではこの2つを組み合わせて、細かくアクセス制御を行っています。
次章では、実際に GRANT 文を使ってユーザに権限を付与する方法を解説します。

ユーザ権限を付与する(GRANT文の使い方)

Oracleでユーザに操作権限を与えるには、GRANT (グラント)文を使用します。
GRANT は「○○の権限を△△に与える」という意味で、最も基本的な権限管理コマンドです。

GRANT文の基本構文

GRANT 権限名 TO ユーザ名;

たとえば、ユーザTEST_USER にデータベースへ接続する権限を与える場合は、次のように書きます。

GRANT CREATE SESSION TO TEST_USER;

これで TEST_USERsqlplusSQL Developer などからログインできるようになります。

よく使うシステム権限の付与例

開発環境などで新規ユーザを作成した場合、基本的には以下の権限を与えておくとよいでしょう。

GRANT CREATE SESSION TO TEST_USER;  -- 接続権限
GRANT CREATE TABLE TO TEST_USER;    -- テーブル作成権限
GRANT CREATE VIEW TO TEST_USER;     -- ビュー作成権限
GRANT CREATE SEQUENCE TO TEST_USER; -- シーケンス作成権限

これらを付与しておけば、基本的なテーブル操作が可能になります。

複数の権限を一度に付与する

複数の権限は、カンマで区切ってまとめて付与できます。

GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO TEST_USER;

SQLを一つにまとめることで、スクリプトの管理もシンプルになります。

WITH ADMIN OPTIONの使い方と注意点について

特定のユーザに「他のユーザへ同じ権限を付与できる権限」を持たせたいというような場合は、WITH ADMIN OPTION をつけます。

GRANT CREATE USER TO ADMIN_USER WITH ADMIN OPTION;

このようにすると、ADMIN_USER 自身が他のユーザに CREATE USER 権限を与えられるようになります。

WITH ADMIN OPTION は誤用すると権限がどんどん広がるため、実務では原則として管理者(DBA)だけが使うようにしましょう。

付与した権限を確認する方法

付与済みの権限は、以下のビューで確認できます。

-- システム権限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'TEST_USER';

-- オブジェクト権限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'TEST_USER';

もし権限が不足している場合は、ORA-01031: 権限がありません というエラーが出るため、
このビューで確認する習慣をつけておくと便利です。

権限を取り消す(REVOKE文の使い方)

誤って与えすぎた権限や、不要になった権限を削除するには、REVOKE(リヴォーク)文を使います。基本的には、権限を付与するGRANT とは反対の操作になります。

REVOKE文の基本構文

REVOKE 権限名 FROM ユーザ名;

たとえば、TEST_USER からテーブル作成権限を取り消したい場合は次のように書きます。

REVOKE CREATE TABLE FROM TEST_USER;

これで、TEST_USER は新しいテーブルを作成できなくなります。

複数の権限をまとめて取り消す

GRANT と同様に、複数の権限を一括で取り消すことも可能です。

REVOKE CREATE TABLE, CREATE VIEW FROM TEST_USER;

特に開発段階で、一時的に付与した権限を整理する際に便利です。

オブジェクト権限を取り消す

テーブルやビューなど、オブジェクトに対する権限を取り消す場合もREVOKE 文を使います。

REVOKE SELECT, INSERT ON HR.EMPLOYEES FROM TEST_USER;

このコマンドにより、TEST_USERHR.EMPLOYEES テーブルにアクセスできなくなります。誤操作や情報漏えいのリスクを減らすため、不要なオブジェクト権限は定期的に見直しましょう。

ロール(ROLE)を使った権限管理

ユーザが増えると、個別に GRANT / REVOKE を繰り返すのは非常に手間ですよね。
そんなときに役立つのが、ロール(ROLE) という仕組みです。

ロールを使うと、複数の権限をまとめて管理でき、ユーザ管理がぐっと楽になります。

ロールとは?

ロールとは、権限の束(グループ)のようなものです。
たとえば「開発者用ロール」「参照専用ロール」といった形で、用途ごとに権限をまとめられます。

イメージとしてはこんな感じです↓

DEV_ROLE : 開発者用のロール
┌────────────────────┐
│ ROLE:DEV_ROLE.    |
│  ├─ CREATE SESSION │
│  ├─ CREATE TABLE   │
│  ├─ CREATE VIEW    │
└────────────────────┘

        ↓ まとめて付与!

GRANT DEV_ROLE TO TEST_USER;

このように、複数の権限をロールにまとめておけば、
ユーザに対して一括で管理・付与できるようになります。

ロールの作成方法

まずは、ロールを作成しましょう。

CREATE ROLE DEV_ROLE;

このコマンドで、新しいロール DEV_ROLE が作成されます。

ロールに権限を付与する

続いて、そのロールに権限を付与します。

GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO DEV_ROLE;

これで DEV_ROLE は、接続・テーブル作成・ビュー作成の権限を持つロールになります。

ロールをユーザに付与する

次に、作成したロールをユーザに割り当てます。

GRANT DEV_ROLE TO TEST_USER;

これで、TEST_USERDEV_ROLE に含まれるすべての権限を自動的に取得します。

将来的に別のユーザ(例:TEST_USER2)にも同じロールを与えれば、同一権限を簡単に共有できます。

ロールの取り消し

ロールを取り消すには、次のようにします。

REVOKE DEV_ROLE FROM TEST_USER;

これで、TEST_USERDEV_ROLE の権限をすべて失います。

ロールの付与状況を確認する

下記のSQLを実行することで、ロールの付与状況を確認できます。

-- ロールの一覧を確認
SELECT * FROM DBA_ROLES;

-- 各ロールに付与された権限を確認
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'DEV_ROLE';

-- ユーザに付与されているロールを確認
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'TEST_USER';

これらのビューを活用すれば、権限やロールの関係を一目で把握できます。

まとめ

ここまで、Oracleでユーザ権限を設定・管理する方法を解説してきました。

Oracleの権限管理は、一見ややこしく見えますが、
構造を理解すればとてもシンプルです。

スクロールできます
区分内容代表的なコマンド
システム権限データベース全体に関わる権限CREATE SESSION, CREATE TABLE
オブジェクト権限テーブルやビューなど個別オブジェクトに対する権限SELECT, INSERT, UPDATE
ロール(ROLE)権限をまとめて管理する仕組みCREATE ROLE, GRANT ROLE TO ユーザ

Oracleの権限管理は、
「安全性」と「効率性」を両立させるための重要スキルです。

  • 小規模環境では手動での GRANT / REVOKE
  • 大規模環境ではロール設計による一元管理

この2つを使い分けながら、セキュリティを守りつつ生産性の高い運用を目指しましょう。

学習に役立つおすすめの書籍

Oracleを効率的に学べるおすすめ書籍を紹介します。

図解入門よくわかる 最新Oracleデータベースの基本と仕組み

図解で解説されている箇所が多く、初心者が全体像を理解するのに最適です。

Oracleの現場を効率化する100の技

初心者からベテランまで、経験レベルを問わず活用できる一冊で、Oracle Databaseユーザー必携の実践書 といえます。
忙しい現場でも、効率的に学びながら実践できる点が魅力。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次