マルチテナントのユーザ・ロール管理
CDB、PDB 環境では、接頭辞「C##」の共通ユーザ、ロールが登場している。
作成コマンド自体はさほど従来のものと変わらないが、
「ローカルなのか、共通なのか」混合せずに、対象を意識して作成を。
ユーザ作成
ローカルユーザ
ローカルユーザは、従来のユーザと考えて良い。
CDB (コンテナデータベース)、各 PDB(プラガブルデータベース)に作成が可能。
共通ユーザ
すべてのコンテナに作成されるユーザを、共通ユーザといい、
接頭辞が C## がつく。 例: C##hoge
SQLコマンド
SQL> create user C##hoge identified by パスワード container=ALL;
container 句のデフォルト
ローカルユーザか共通ユーザかを見分ける方法
SQL> select * from dba_users;
common列
ロール作成
ローカルロールと共通ロールが存在する。
それぞれの定義は、上記ユーザと同じ考え方になる。
共通ロールなら、接頭辞が 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列
権限の取り消し
SQL> revoke C##hogerole from C##hoge container=current;
「grant C##hogerole to C##hoge container=all;」で付与したなら、
container=all; で取り消す。currentだと ORA-01951 が発生する。