SSJ Tech Lab - Oracle Database テクニカルラボ

PDBごとに共通ユーザーの接続を制御する(CREATE SESSION)

対応バージョン

Oracle Database 12.1.0

2016-07-04記事公開

12cより導入されたCDB(コンテナ・データベース)では、共通ユーザーという各PDB(プラガブル・データベース)で同じ名前のユーザー(スキーマ)を管理できる概念があります。ここでは共通ユーザーを使用した場合にPDBログイン時のセキュリティについて記載します。

共通ユーザーとは

まずは共通ユーザーのPDB接続時のセキュリティを説明するにあたり、以下について知る必要があります。

  • ・ユーザーが作成する全ての共通ユーザーには接頭辞"C##"(又は"c##")が付与されている。(Oracleが内部で作成するものはこの限りではありません)
  • ・共通ユーザーの作成は、ルート・コンテナ(CDB$ROOT)のみで作成できる。
  • ・共通ユーザーは各PDBで作成できず、C##を頭に指定してCREATE USER を実行した場合エラーとなる。(ORA-65094: invalid local user or role name)
  • ・共通ユーザーのパスワードはルート・コンテナと各PDBで同じものを使用する。

PDBごとの共通ユーザー接続制御

各PDBのコンテナ変更の制御

一度CDBにログインした後に、alter session set container= による変更の許可方法を記載します。
PDB名はPDBORCL、テストするユーザはC##SHAREDUSERとします。

上記の内容で、セッションの変更によるローカルからのログインが出来るようになりました。

各PDBのリモートログインの制御

上記までの設定内容では、リモートからの接続は出来ません。
以下の設定により、リモート接続を可能にします。

全PDBに対して実施したい場合

全てのPDBに対して共通ユーザを利用可能としたい場合、ルート・コンテナ(CDB$ROOT)にてgrant時にcontainer=ALLを指定することで、全てのPDBへ権限を付与することが出来ます。
各PDBで実行すると、エラーとなります。(ORA-65050: Common DDLs only allowed in CDB$ROOT)

参考資料
https://docs.oracle.com/cd/E49329_01/server.121/b71299/cdblogic.htm#CIHFIAAA
Oracle Database概要
12cリリース1 (12.1)
B71299-02
CDBでの権限およびロール付与の概要

関連記事

関連記事が存在しません