Oracleのマルチテナント構成(CDB + PDB)では、ユーザーの管理方法が従来の構成とは大きく異なります。
「共通ユーザー(common user)」と「ローカルユーザー(local user)」という2つの概念を理解することは、セキュアで柔軟なDB運用の第一歩です。
この記事では、ユーザーの種類・作成方法・接続方法の違いに加えて、COMMON_USER_PREFIX による共通ユーザー名のルールについてもわかりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. CDB構成におけるユーザーの種類
| ユーザー種別 | 説明 |
|---|---|
| 共通ユーザー(common user) | CDB$ROOTで作成され、すべてのPDBに存在。CDB全体に対する管理用途にも使用される。 |
| ローカルユーザー(local user) | 特定のPDB内でのみ使用できるユーザー。PDB単位で作成・運用される。 |
2. 図解:CDB構成とユーザーの所属イメージ
【図1】CDB構成におけるユーザーの構造
+------------------------------+
| CDB(cdb1) |
+------------------------------+
| CDB$ROOT |
| |- C##DBA(共通ユーザー) |
| |
| PDB1 |
| |- C##DBA(共通ユーザー) |
| |- HR(ローカルユーザー) |
| |
| PDB2 |
| |- C##DBA(共通ユーザー) |
| |- SALES(ローカルユーザー)|
+------------------------------+
3. 共通ユーザー作成ルールと COMMON_USER_PREFIX
共通ユーザーは、作成時に ユーザー名に特定のプレフィックスが必要です。このプレフィックスは、初期化パラメータ COMMON_USER_PREFIX によって定義されています。
🔸 現在の設定を確認するSQL
SHOW PARAMETER common_user_prefix
通常、初期値は以下の通りです:
NAME TYPE VALUE
-------------------- ----------- ----------
common_user_prefix string C##
🔸 この設定が意味すること
- 共通ユーザーは必ず
C##(またはc##)で始まる名前でなければならない COMMON_USER_PREFIXは変更不可(データベース作成時に決定され、以降固定)
4. 共通ユーザーの作成方法(CDB$ROOT)
-- CDB$ROOT に接続して実行
CREATE USER C##COMMONUSER IDENTIFIED BY password
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users
CONTAINER=ALL;
GRANT CONNECT, CREATE SESSION TO C##COMMONUSER CONTAINER=ALL;
✅ CONTAINER=ALL により、CDB全体(ROOTと全PDB)で使用可能な共通ユーザーになります。
5. 共通ユーザーの接続先と動作
共通ユーザーは、権限を与えていれば以下のように接続可能です:
| 接続先 | 接続方法例 |
|---|---|
| CDB$ROOT | sqlplus C##COMMONUSER/password@//localhost:1521/cdb1 |
| PDB1など | sqlplus C##COMMONUSER/password@pdb1 |
🔸 接続先によって使用できるオブジェクトや操作範囲が変わるため、管理用途では明確に使い分けることが重要です。
6. ローカルユーザーの作成方法(PDB)
ローカルユーザーは、接頭辞なしの通常名で作成し、特定のPDB内でのみ使用されます。
-- PDBに接続して実行
CREATE USER hr IDENTIFIED BY hrpass
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users;
GRANT CONNECT, RESOURCE TO hr;
✅ 接頭辞 C## をつけてはいけません。つけるとエラーになります。
7. ユーザー種別の確認SQL(CDB環境)
SELECT username, common, con_id
FROM cdb_users
ORDER BY con_id, username;
| 項目 | 説明 |
|---|---|
USERNAME | ユーザー名 |
COMMON | YES:共通ユーザー、NO:ローカル |
CON_ID | 所属コンテナID(ROOT/PDB) |
8. 共通ユーザー vs ローカルユーザー:違いまとめ
| 比較項目 | 共通ユーザー | ローカルユーザー |
|---|---|---|
| 作成場所 | CDB$ROOT | PDB |
| 接頭辞 | C## が必須(COMMON_USER_PREFIX に従う) | 不要(禁止) |
| 接続可能な範囲 | CDB$ROOT + 任意のPDB | 作成したPDBのみ |
| 権限付与 | CONTAINER=ALL で全体に有効 | 標準の GRANT でPDB内に限定 |
| 代表的用途 | 管理者ユーザー、CDB全体操作 | 業務アプリ用ユーザー |
まとめ
- CDB構成では、ユーザーは共通ユーザーとローカルユーザーに分かれる。
- 共通ユーザーは
COMMON_USER_PREFIX(デフォルトはC##)が名前に必要で、CDB全体で有効。 - ローカルユーザーは特定PDB内のみで使用され、アプリケーションユーザーとして適切。
- 接続時は接続先(CDB or PDB)に応じてユーザーを使い分ける必要がある。
[参考]
4 CDBの作成および構成




コメント