マルチテナントのユーザ・ロール管理

CDB、PDB 環境では、接頭辞「C##」の共通ユーザ、ロールが登場している。
作成コマンド自体はさほど従来のものと変わらないが、
「ローカルなのか、共通なのか」混合せずに、対象を意識して作成を。



ユーザ作成

ローカルユーザ

ローカルユーザは、従来のユーザと考えて良い。
CDB (コンテナデータベース)、各 PDB(プラガブルデータベース)に作成が可能。

共通ユーザ

すべてのコンテナに作成されるユーザを、共通ユーザといい、
接頭辞が C## がつく。 例: C##hoge

SQLコマンド

SQL> create user C##hoge identified by パスワード container=ALL;

container 句のデフォルト

  • ローカルユーザ:CURRENT
  • 共通ユーザ:ALL
  • ローカルユーザか共通ユーザかを見分ける方法

    SQL> select * from dba_users;

    common列

  • YES:共通ユーザ
  • NO:ローカルユーザ
  • ロール作成

    ローカルロールと共通ロールが存在する。
    それぞれの定義は、上記ユーザと同じ考え方になる。

    共通ロールなら、接頭辞が C## がつく。 例: C##hogerole

    ローカルロール

    共通ユーザに付与

    SQL> grant C##hogerole to C##hoge;

    ローカルユーザと共通ユーザに付与

    SQL> grant C##hogerole to hoge, C##hoge;

    全コンテナの共通ユーザに付与

    SQL> alter session set container=CDB$ROOT;
    SQL> grant C##hogerole to C##hoge container=all;

    付与権限の確認

    SQL> select * from cdb_role_privs;
    common列

  • YES:共通で付与
  • NO:ローカルで付与
  • 権限の取り消し

    SQL> revoke C##hogerole from C##hoge container=current;

    「grant C##hogerole to C##hoge container=all;」で付与したなら、
    container=all; で取り消す。currentだと ORA-01951 が発生する。

  • ORA-01951 ロール’string’は’string’に権限付与されていません