11.

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## 等のプレフィックスが必要なケースあり

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 表(テーブル)
  2. 索引(インデックス)
  3. ビュー
  4. 制約
  5. 順序(シーケンス)
  6. シノニム
  7. トリガー
  8. パッケージ
  9. ストアド・ファンクション
  10. ストアド・プロシージャ
  11. ユーザー(USER)

最近更新/作成されたページ