0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Oracle Database入門】ユーザーとスキーマの違いを「人とカバン」で理解する

0
Last updated at Posted at 2026-07-17

はじめに

Oracle Database を学び始めた際に、多くの人が最初に混同するのが 「ユーザー」と「スキーマ」 です。

他のRDBMS(MySQL / PostgreSQL / SQL Server など)とは扱いが異なるため、書籍や公式ドキュメントを読んでも「結局どっちも同じでは?」とモヤモヤしがちなテーマです。

本記事では、両者の違いを 「人とカバン」のイメージで整理します。設計・運用の前提として、チーム内での共通認識づくりにご活用ください。


結論(1行でいうと)

  • ユーザー = ログインするための「アカウント」
  • スキーマ = そのユーザーが所有する「オブジェクトの集合」

Oracle では、ユーザーを作成すると同名のスキーマが自動的に作成される 仕様のため、実務上は「ユーザー ≒ スキーマ」として扱われる場面が多いものの、概念としては別物です。


それぞれの位置づけ

ユーザー(USER)

  • データベースに接続するためのアカウント
  • 認証(誰がアクセスしているか)と 認可(何が許可されているか)の主体
  • 作成したオブジェクトの 所有者 となる
  • CREATE USER で作成し、DEFAULT TABLESPACE / TEMPORARY TABLESPACE を指定して領域を割り当てる
CREATE USER KATO IDENTIFIED BY "your_password"
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp;

GRANT CREATE SESSION TO KATO;

💡 ポイント
DEFAULT TABLESPACE を省略するとデータベースのデフォルトの表領域に格納されます。運用環境では意図しない表領域にオブジェクトが作成されることを防ぐため、明示的に指定することが推奨されます。

スキーマ(SCHEMA)

  • ユーザーが所有するデータベース・オブジェクトの集合体
  • ユーザー作成と同時に、同名で自動生成される
  • スキーマ名は 常にユーザー名と一致
  • 名前空間 として機能し、別スキーマであれば同名テーブルの共存が可能
  • ユーザー削除時には、所有するスキーマ内のオブジェクトもまとめて削除される

イメージで整理:人とカバンの関係

言葉だけだと分かりにくいので、よく使われる例えで整理します。

役割 たとえ Oracle 用語
アカウント ユーザー
カバン 持ち物入れ スキーマ
ノート・ペン 中身 テーブル・ビュー・索引 など
  • 人(ユーザー)は、生まれた時にカバン(スキーマ)を1つだけ与えられる
  • カバンの中に、ノートやペン(テーブル等)を入れていく
  • カバンを増やしたり、別の人と共有することはできない(1人 = 1カバン)
  • カバンの中身の 持ち主(所有者)は常に1人 ですが、権限を付与すれば他のユーザーも中身を参照・操作できる

この 「ユーザーと同名のスキーマが自動で1つだけ作成される」 という性質がポイントです。


ユーザーとスキーマの違い

観点 ユーザー スキーマ
性質 ログイン用アカウント オブジェクトの集合(名前空間)
目的 認証・認可 オブジェクトの所有・整理
作成方法 CREATE USER で明示的に作成 ユーザー作成時に自動生成
名前 任意 ユーザー名と必ず同一
削除方法 DROP USER [CASCADE]で明示的に削除 ユーザー削除と同時に消える

実際に確認してみる

DBA_USERS ビューを参照すると、ユーザー情報を確認できます。

-- ユーザー一覧
SELECT username, default_tablespace, temporary_tablespace
FROM   dba_users;

作成したオブジェクトの所有者(=スキーマ)は DBA_OBJECTS で確認できます。

-- KATO スキーマが所有するオブジェクト一覧
SELECT owner, object_name, object_type
FROM   dba_objects
WHERE  owner = 'KATO';

別スキーマのオブジェクトへアクセスする際は、完全修飾名 を使います(要権限)。

-- 自分のスキーマのテーブルを参照
SELECT * FROM EMP;

-- 別スキーマ(SCOTT)のテーブルを参照
SELECT * FROM SCOTT.EMP;

紛らわしい点:CREATE SCHEMA の正体

Oracle には CREATE SCHEMA という構文がありますが、これは 新しいスキーマを作成するものではありません

CREATE SCHEMA は、1トランザクション内で、複数のテーブル/ビューの作成と権限付与をまとめて行うための文

スキーマ自体は CREATE USER の時点で自動生成されているため、CREATE SCHEMA既存スキーマに対する一括DDL投入用 と覚えておくと混乱が減ります。

-- 例:hr スキーマにテーブル・ビュー・権限をまとめて定義
CREATE SCHEMA AUTHORIZATION hr
  CREATE TABLE test1 (col1 VARCHAR2(10) PRIMARY KEY, col2 NUMBER)
  CREATE VIEW  test2 AS SELECT col1 FROM test1 WHERE col2 = 3
  GRANT SELECT ON test2 TO other_user;

「ユーザー ≠ スキーマ」となる代表的なケース

通常は「ユーザー ≒ スキーマ」で支障ありませんが、両者が一致しない動作になる場面もあります。代表例は CURRENT_SCHEMA の切り替え です。

-- ログインは APP_USER のまま、参照先スキーマだけを切り替える
ALTER SESSION SET CURRENT_SCHEMA = OWNER_SCHEMA;

-- 以降、修飾なしのオブジェクトは OWNER_SCHEMA のものが解決される
SELECT * FROM CUSTOMERS;  -- 実際は OWNER_SCHEMA.CUSTOMERS を参照

このケースでは以下のように動作します。

  • 権限 は接続中のログインユーザー(APP_USER
  • オブジェクトの解決先CURRENT_SCHEMAOWNER_SCHEMA

オブジェクト所有ユーザー(スキーマオーナー) と、接続用ユーザー(アプリ用アカウント) を分離する設計などで利用されます。


まとめ

  • ユーザー = アカウント(認証・認可の主体)
  • スキーマ = そのユーザーが所有するオブジェクトの集合
  • Oracle ではユーザー作成と同時に 同名スキーマが自動生成 される
  • 実務的には「ユーザー ≒ スキーマ」で扱って問題ないが、CURRENT_SCHEMA 切り替え時など 両者が一致しないケース もあるため、概念としては区別しておくと安心
  • CREATE SCHEMA は新規スキーマ作成ではなく、複数DDLを1トランザクションでまとめる文

「人とカバンの関係」をイメージできれば、権限設計・オブジェクト参照・運用設計の理解がスムーズになります。


参考

📌 参考マニュアルのバージョンについて
本記事で紹介する参考リンクは、執筆時点で最新の Oracle AI Database 26ai(日本語版) を参照しています。
ご利用の環境が異なるバージョン(19c / 21c / 23ai など)の場合、機能や構文が一部異なる可能性があります。
該当バージョンのマニュアルは、以下のドキュメントポータルからご確認ください。

Oracle公式マニュアル(日本語版・26ai)


BIPROGYグループの技術への取り組み

We Are Hiring!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?