この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: ユーザー(USER)
SEOタイトル: Oracle ユーザー(USER)完全ガイド|CREATE USER / GRANT / ロール・スキーマとの関係

この記事の要点
  • Oracle のユーザー (USER)データベースに接続できるアカウント。同時にスキーマ(そのユーザー所有のオブジェクト群)の名前空間も意味する
  • 作成は CREATE USER ユーザー名 IDENTIFIED BY パスワード;、接続権限は GRANT CREATE SESSION TO ユーザー名; が必要
  • システム権限は GRANT、オブジェクト権限は GRANT SELECT/INSERT/... ON 表 TO ユーザー で付与。剥奪は REVOKE
  • 権限をロール (ROLE) にまとめてユーザーに割り当てると管理が楽。CONNECT / RESOURCE / DBA が代表的な事前定義ロール
  • 現在ログイン中のユーザーは USER 疑似列または SELECT USER FROM DUAL; で取得

Oracle のユーザーとは

Oracle Database におけるユーザー (USER) は、データベースに接続するためのアカウントであると同時に、スキーマ (SCHEMA) =そのユーザーが所有するテーブル・ビュー・プロシージャ等の名前空間でもあります。

Oracle では「1 ユーザー = 1 スキーマ」が原則で、ユーザー名がそのままスキーマ名になります。たとえば SCOTT ユーザーが作ったテーブル EMP は、外部からは SCOTT.EMP として参照できます。

ユーザー作成 (CREATE USER)

基本構文

CREATE USER ユーザー名 IDENTIFIED BY パスワード
  [DEFAULT TABLESPACE 表領域名]
  [TEMPORARY TABLESPACE 一時表領域名]
  [QUOTA <サイズ> ON 表領域名]
  [PROFILE プロファイル名]
  [ACCOUNT LOCK | UNLOCK]
  [PASSWORD EXPIRE];

実例

-- 最小構成
CREATE USER app_user IDENTIFIED BY "S3cret#Pass!";

-- 表領域とクォータ指定
CREATE USER app_user IDENTIFIED BY "S3cret#Pass!"
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp
  QUOTA 500M ON users;

接続権限の付与

ユーザーを作っただけではログインできません。最低限 CREATE SESSION 権限が必要です。

-- ログイン可能にする
GRANT CREATE SESSION TO app_user;

-- 表領域に書き込みできるようにする (QUOTA UNLIMITED で無制限)
ALTER USER app_user QUOTA UNLIMITED ON users;

権限 (PRIVILEGE) の種類

分類付与構文
システム権限CREATE SESSION / CREATE TABLE / CREATE VIEWGRANT 権限 TO ユーザー;
オブジェクト権限SELECT / INSERT / UPDATE / DELETE / EXECUTEGRANT 権限 ON 表名 TO ユーザー;
ロールCONNECT / RESOURCE / DBAGRANT ロール TO ユーザー;

システム権限の例

GRANT CREATE TABLE     TO app_user;
GRANT CREATE VIEW      TO app_user;
GRANT CREATE PROCEDURE TO app_user;
GRANT CREATE SEQUENCE  TO app_user;

オブジェクト権限の例

-- 別ユーザーのテーブルに対する SELECT 権限
GRANT SELECT ON scott.emp TO app_user;

-- 複数権限まとめて
GRANT SELECT, INSERT, UPDATE ON scott.emp TO app_user;

-- WITH GRANT OPTION = さらに他者に再付与可能
GRANT SELECT ON scott.emp TO app_user WITH GRANT OPTION;

ロール (ROLE)

権限を毎回個別に付与するのは煩雑なので、ロールでまとめて管理します。Oracle には事前定義ロールが多数あります。

ロール主な権限
CONNECTCREATE SESSION(接続のみ)
RESOURCECREATE TABLE / PROCEDURE / TRIGGER / SEQUENCE 等
DBA管理者権限のフル付与
-- 自作ロール
CREATE ROLE app_role;
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_role;
GRANT SELECT, INSERT, UPDATE ON scott.emp TO app_role;

-- ユーザーに付与
GRANT app_role TO app_user;

権限の剥奪 (REVOKE)

REVOKE CREATE TABLE FROM app_user;
REVOKE SELECT ON scott.emp FROM app_user;
REVOKE app_role FROM app_user;

ユーザー情報の確認

1. 現在のユーザー

SELECT USER FROM DUAL;
-- 例) APP_USER

2. 全ユーザー一覧

SELECT username, account_status, default_tablespace, created
FROM dba_users
ORDER BY created DESC;

3. 付与されている権限

-- システム権限
SELECT * FROM dba_sys_privs WHERE grantee = 'APP_USER';

-- オブジェクト権限
SELECT * FROM dba_tab_privs WHERE grantee = 'APP_USER';

-- ロール
SELECT * FROM dba_role_privs WHERE grantee = 'APP_USER';

パスワード変更・ロック

-- パスワード変更
ALTER USER app_user IDENTIFIED BY "NewS3cret#Pass!";

-- アカウントロック / 解除
ALTER USER app_user ACCOUNT LOCK;
ALTER USER app_user ACCOUNT UNLOCK;

-- 次回ログイン時パスワード変更を強制
ALTER USER app_user PASSWORD EXPIRE;

ユーザー削除 (DROP USER)

-- ユーザー削除(空でない場合エラー)
DROP USER app_user;

-- 所有スキーマ内のオブジェクトごと削除
DROP USER app_user CASCADE;

運用上の注意

  • SYS / SYSTEM は管理用。アプリ接続には絶対に使わない
  • 本番では最小権限の原則に従い、RESOURCE / DBA のような強いロールを安易に付与しない
  • PROFILE でパスワード有効期限・ログイン失敗回数を制限
  • パスワード文字列は大文字・小文字・記号を混在させ、引用符 ("...") で囲んで大文字小文字を保持
  • Oracle 12c 以降のマルチテナント (CDB / PDB) ではローカルユーザーは C## 等のプレフィックスが必要なケースあり

関連