1.

Oracleのユーザー作成SQL|PDB・CREATE SESSIONと権限の違い

▶

この記事はOracle Databaseのユーザー作成SQLです。元の記事の対象に戻し、MySQLのuser@hostやmysql_native_passwordとは区別します。ユーザーを作る操作、ログインの許可、表への権限は別です。

OracleのPDB確認、ユーザー作成、CREATE SESSIONと表の権限を分ける

作成前に対象PDBと作業権限を確認する

以下は新しいローカル隔離PDBだけで行う教材です。本番への一括実行、既存ユーザーの作り直しやパスワード変更はしません。CREATE USERにはそのシステム権限、CREATE SESSIONの付与にも付与可能な管理権限が必要です。一般ユーザーがこの文だけで自分へ権限を増やす例ではありません。

CDBのrootとPDBを確認し、意図したPDBのサービスへ接続してから実行します。ローカルユーザーと共通ユーザーは用途/影響範囲が異なります。rootでの名前エラーを消すためにC##を足したり、隠しパラメータを変更したりしません。対象版と既存の運用方針を確認してください。

1. ユーザーを作成する

次は接続済みのPDBで管理者が実行するSQLです。CWIKI_LEARNと公開パスワードは隔離検体専用で、実運用の秘密値として使ってはいけません。新規名であることを先に確認し、同名がある場合は中止して権限/所有物を調べます。CONTAINER=CURRENTも、接続先をPDBへ自動変更する命令ではありません。

-- Scratch PDB only: run as an authorized administrator in the intended PDB.
-- This published password is a fixture, NEVER a production credential.
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS container_name FROM dual;
CREATE USER CWIKI_LEARN IDENTIFIED BY "Cwiki_fixture_42!" CONTAINER=CURRENT;

作成直後に一般ユーザーとしてログインできるとは限りません。今回の隔離PDBでは、CREATE SESSIONをまだ与えていない接続がORA-01045になりました。失敗を理由にDBAや広範囲の権限を一括付与しません。

2. ログインの許可を分けて付与する

-- Same scratch PDB and authorized administrator as oracle-create.sql.
GRANT CREATE SESSION TO CWIKI_LEARN;

次は新規ユーザーで同じPDBサービスへ接続した後の読取りSQLです。接続時の実パスワードをコマンド引数/公開ファイル/ログへ残さず、利用するクライアントの秘密入力機能や既存の認証管理を使います。

-- Run after logging in as CWIKI_LEARN to the same PDB service.
SELECT USER, SYS_CONTEXT('USERENV', 'CON_NAME') AS container_name FROM dual;
SELECT privilege FROM user_sys_privs ORDER BY privilege;

CREATE SESSIONはログインの権限で、CREATE TABLEや他スキーマの表へのSELECT/INSERTを含みません。隔離検証でも、ログイン後のCREATE TABLEはORA-01031でした。既存表を読む用途では、所有者等が必要な表にSELECTだけを付与する設計を別に確認します。CREATE ANY TABLEやDBAを通常の接続確認用には使いません。

オプションと権限の役割

項目確認すること
DEFAULT TABLESPACE通常のオブジェクト配置先。指定だけで表作成権限や容量は与えない
QUOTA指定表領域への割当上限。無制限を既定の解決策にしない
TEMPORARY TABLESPACE一時処理用。通常表の保存先と区別
PROFILE組織のパスワード/資源制限方針に合わせる。ポリシーを無効化して通さない
ACCOUNT LOCK / UNLOCKアカウント状態。作成と利用開始のタイミングを分ける場合もある
CREATE SESSION / オブジェクト権限接続とデータ操作は別の許可

表の作成/データ領域確保には必要な権限と表領域quota等も関係します。今回の新例は表作成ユーザーの設計ではなく、接続だけから始める限定例です。DDLは通常のデータ更新のようにROLLBACKで全部戻せると考えず、承認された新規検体以外では実行しません。

元の構文・例

元v5のOracleという目的と構文を保持します。[オプション]や日本語の「ユーザ名」「パスワード」は説明用で、そのままSQLへ渡す値ではありません。元例のaaaは弱い公開値で、実運用の秘密値に使わないでください。元の作成例だけではCREATE SESSIONの付与やPDB確認が不足しています。

Oracleのユーザーを作成するSQLの記事です。

 

【構文】

CREATE USER ユーザ名

IDENTIFIED BY パスワード

[オプション]

;

 

元例の注意:aaaは公開された弱い値です。この作成例だけではログイン/表の操作権限が与えられず、対象PDBも確認していません。

【例】

CREATE USER test_user

      IDENTIFIED BY aaa

;

 

オプションと権限の役割は上の表に補っています。記載例は学習用で、そのまま本番へ実行しません。

確認範囲と関連情報

2026年10月26日確認。元のOracleという目的を修復し、誤製品のMySQL本文はv6に保持しています。ローカルOracle AI Database 26ai Free 23.26.3.0.0の隔離PDBで作成前後/CREATE SESSION/表の権限を検査しました。PDBのローカルユーザーがrootには存在しないことも確認しましたが、検体のcommon_user_prefixは空であり、標準prefixでの名前拒否を実測したとは扱いません。この検体設定を推奨するものでもありません。既存本番DB/認証設定は変更していません。全Oracle版/外部認証/本番運用や全権限の保証ではありません。

ユーザー関連の親ページから子ページを選択できます。祖先のDDLとSQLの階層は変更しません。

公式資料:Oracle CREATE USER、Oracle GRANTとシステム/オブジェクト権限。

子ページ

子ページはありません

同階層のページ
  1. ユーザー作成
  2. ユーザー定義変更
  3. ユーザー削除

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