CDB/PDB環境で共通ユーザー作成と各コンテナへの接続権限付与方法まとめ

CDB/PDB(マルチテナント)

~CONTAINER句の使い分けも完全解説~

Oracle 12c以降のマルチテナントアーキテクチャでは、1つのCDB(コンテナ・データベース)に複数のPDB(プラガブル・データベース)が含まれます。
この構成下では、共通ユーザー(common user)を使ってCDB全体を効率よく管理できますが、PDBに接続するためには接続権限の付与が必要です。

本記事では、次の3パターンに分けて、共通ユーザーの接続権限付与手順を解説します。

  • CONTAINER=ALL:すべてのコンテナに権限を一括付与(既存のPDBのみ対象)
  • CONTAINER=CURRENT:現在のコンテナ(CDB$ROOTやPDB)にのみ付与
  • PDB単位:各PDBに接続し、個別に付与

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


■ 共通ユーザーとは?

特徴内容
ユーザー名C##で始まる(例:C##ADMIN
作成場所CDB$ROOT(親コンテナ)
存在場所CDB$ROOT+全PDB(論理的に同じ名前で存在)
権限管理各コンテナ単位に行う必要あり(ALL, CURRENT, PDB個別)

■ 構成イメージ

+------------------------------+
| CDB$ROOT |
| 共通ユーザー: C##ADMIN |
| CREATE SESSION(あり) |
| |
| +------------------------+ |
| | PDB01 | |
| | C##ADMIN → CREATE SESSION |
| +------------------------+ |
| | PDB02 | |
| | C##ADMIN → なし |
| +------------------------+ |
+------------------------------+

■ 手順①:共通ユーザーをCDB$ROOTで作成

-- CDB$ROOTに接続していることを確認
SQL> SHOW CON_NAME;
CDB$ROOT

-- 共通ユーザー作成(全コンテナに論理的に作成される)
SQL> CREATE USER c##admin IDENTIFIED BY oracle;

■ 手順②:接続権限の付与方法まとめ

✅ 方法1:CDB$ROOTから全コンテナへ一括付与(CONTAINER=ALL)

SQL> GRANT CREATE SESSION TO c##admin CONTAINER=ALL;
  • CDB$ROOTとすでに存在するすべてのPDBCREATE SESSIONを一括付与
  • 今後新しく作成されるPDBには反映されないので注意

✅ 方法2:CDB$ROOTのみに付与(CONTAINER=CURRENT)

SQL> GRANT CREATE SESSION TO c##admin CONTAINER=CURRENT;
  • CDB$ROOTでのみ有効
  • PDBには付与されない
  • 管理者がCDB$ROOTにログインして操作するだけならこの設定で十分
[oracle@v19single ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 月 4月 14 11:54:48 2025
Version 19.21.0.0.0

Copyright (c) 1982, 2022, Oracle. All rights reserved.



Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> CREATE USER c##admin IDENTIFIED BY oracle; ★共通ユーザー作成

ユーザーが作成されました。

SQL> connect c##admin/oracle ★権限付与していないためエラー
ERROR:
ORA-01045: user C##ADMIN lacks CREATE SESSION privilege; logon denied


警告: Oracleにはもう接続されていません。
SQL> connect / as sysdba
接続されました。
SQL> GRANT CREATE SESSION TO c##admin CONTAINER=CURRENT; ★CDB$ROOT に権限付与

権限付与が成功しました。

SQL> connect c##admin/oracle
接続されました。
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT ★CDB$ROOT に接続できている
SQL> connect c##admin/oracle@pdb01 ★PDB に接続しようとしてもエラー
ERROR:
ORA-01045: user C##ADMIN lacks CREATE SESSION privilege; logon denied


警告: Oracleにはもう接続されていません。
SQL> connect / as sysdba
接続されました。
SQL> GRANT CREATE SESSION TO c##admin CONTAINER=ALL; ★すべてのコンテナに権限付与

権限付与が成功しました。

SQL> connect c##admin/oracle@pdb01
接続されました。
SQL> show con_name

CON_NAME
------------------------------
PDB01 ★PDB に接続できている

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


✅ 方法3:各PDBに切り替えて個別に付与

-- PDB01に切り替え
SQL> ALTER SESSION SET CONTAINER = PDB01;
SQL> GRANT CREATE SESSION TO c##admin;

-- PDB02に切り替え
SQL> ALTER SESSION SET CONTAINER = PDB02;
SQL> GRANT CREATE SESSION TO c##admin;
  • PDB単位で権限を柔軟に管理可能
  • 新しく作成したPDBにもこの対応が必要

■ PDB接続に必要なtnsnames.ora設定(例)

PDB01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = pdb01.localdomain)
)
)

■ 共通ユーザーでPDBに接続する

$ sqlplus c##admin/oracle@PDB01

エラーになる場合は、対象PDBに CREATE SESSION 権限がない可能性があります。


■ よくあるエラーと対処

❌ エラー例

ORA-01045: ユーザー C##ADMIN は CREATE SESSION 権限を持っていません。

✅ 対処法

対象のPDBで以下を実行:

SQL> ALTER SESSION SET CONTAINER = PDB01;
SQL> GRANT CREATE SESSION TO c##admin;

■ まとめ表

方法実行場所コマンド例対象範囲
CONTAINER=ALLCDB$ROOTGRANT CREATE SESSION TO c##admin CONTAINER=ALL;すべての既存コンテナ
CONTAINER=CURRENTCDB$ROOTGRANT CREATE SESSION TO c##admin CONTAINER=CURRENT;CDB$ROOTのみ
PDB個別付与各PDBGRANT CREATE SESSION TO c##admin;指定したPDBのみ

■ まとめ

  • 共通ユーザーはCDB$ROOTとすべてのPDBに存在しますが、接続権限はコンテナごとに管理が必要です。
  • CONTAINER=ALLを使えば一括で接続権限を付与できますが、CONTAINER=CURRENTPDB単位での細かい制御も可能です。
  • 必要に応じて適切なCONTAINER句を選び、セキュアかつ効率的なユーザー管理を行いましょう。


[参考]
4 CDBの作成および構成

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました