Autonomous Databaseの機能として、データベースに接続するときにOCI IAMのユーザーが使えるようになっています。
AskTOMのOffice Hourの以下のトピックで、製品マネージャが説明をしています。
Autonomous Database Authentication and Authorization - Integrating ADB-S with OCI IAM
マニュアルの記載は以下です。
https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/authenticating-and-authorizing-iam-users-oracle-autonomous-databases.html
APEXの管理者ユーザーと開発者ユーザーはデータベースのユーザーなので、この構成を行えばOCI IAMユーザーでAPEXの管理者ユーザーと開発者ユーザーを作れるか、と考えたのですがそれはできませんでした。
残念な結果でしたが、それとは別に、OCI IAMを使うために行った作業を記録しておきます。
作業はAlways FreeのAutonomous Transaction Processingで行なっています。作成直後の状態から始めます。
リソース・プリンシパルの有効化
Autonomous Databaseのリソース・プリンシパルを有効にします。
データベース・アクションのSQLの画面を開きます。ビューDBA_CREDENTIALSを検索し、OCI$RESOURCE_PRINCIPALがないことを確認します。
select * from dba_credentials;
プロシージャ
DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPALを実行し、リソース・プリンシパルを有効にします。
BEGIN
dbms_cloud_admin.enable_resource_principal;
END;
再度、ビューDBA_CREDENTIALSを検索します。
credential_nameとして
OCI$RESOURCE_PRINCIPAL、
enabledが
TRUEになっていることを確認します。
OCI IAMを使った外部認証の有効化
OCI IAMを使った外部認証を有効にします。
初期化パラメータのidentity_provider_typeがOCI_IAMになっていることを、以下のSQL文を実行して確認します。
select name, value from v$parameter where name = 'identity_provider_type';
データベース接続ができるIAMユーザーの作成
データベース接続を行うIAMユーザーを、DBA_Debraとして作成します。
OCIコンソールのアイデンティティのユーザーを開きます。
ユーザーの作成をクリックします。
ユーザー・タイプの選択として
IAMユーザーを選びます。
名前は
DBA_Debra、
説明は必須項目なので、何か記述します。
作成をクリックします。
ユーザーDBA_Debraが作成されます。
リソースのデータベース・パスワードを開き、データベース・パスワードの作成を実行します。
説明とパスワードとなる文字列を2回入力し、データベース・パスワードの作成をクリックします。
以上でIAMユーザーの作成は完了です。
データベースのユーザーとロールに対応するグループの作成
データベース側に作成するグローバル・ユーザーおよびグローバル・ロールに対応するグループを作成します。
グローバル・ユーザーに対応するグループはAll_DB_Users、グローバル・ロールに対応するグループはDB_Adminとします。
OCIコンソールのアイデンティティのグループを開きます。
グループの作成をクリックします。
名前はAll_DB_Users、説明は必須項目なので何か記述し、作成をクリックします。
グループAll_DB_Usersが作成されます。
ユーザーをグループに追加をクリックし、ユーザーDBA_Debraを追加します。
ユーザーに
DBA_Debraを選択し、
追加をクリックします。
同じ手順でグループDB_Adminを作成します。
グループAll_DB_UsersおよびDB_Adminが作成され、両方にユーザーDBA_Debraが所属していれば、OCI IAMの設定は完了です。
グローバル・ユーザーとグローバル・ロールの作成
データベース・アクションのSQLより、グローバル・ユーザーUSER_SHAREDとグローバル・ロールSR_DBA_ROLEを作成します。
以下のCREATE USER文を実行し、グローバル・ユーザーUSER_SHAREDを作成します。
create user user_shared identified globally as 'IAM_GROUP_NAME=All_DB_Users';
続いて、グローバル・ロールSR_DBA_ROLEを作成します。以下のCREATE ROLE文を実行します。
create role sr_dba_role identified globally as 'IAM_GROUP_NAME=DB_Admin';
データベースへ接続できるようにユーザーUSER_SHAREDにCREATE SESSION権限を与えます。
grant create session to user_shared;
グローバル・ロールSR_DBA_ROLEには、DBAとして必要な権限が与えられることが想定されていますが、今回の作業からは割愛します。
以上で、ユーザーDBA_Debraにて、データベースに接続できるようになりました。
接続の確認
SQLclとAutonomous Databaseのウォレットを使って接続確認を行います。
Autonomous Databaseの画面より、DB接続を開いてウォレットをダウンロードします。
インスタンス名をAPEXDEV2とした場合、以下で接続します。
sql -cloudconfig Wallet_APEXDEV2.zip DBA_Debra@apexdev2_low
IAMユーザーの
データベース・パスワードとして設定したパスワードを正しく入力すると、データベースに接続できます。
% sql -cloudconfig Wallet_APEXDEV2.zip DBA_Debra@apexdev2_low
SQLcl: 金 2月 18 16:23:39 2022のリリース21.4 Production
Copyright (c) 1982, 2022, Oracle. All rights reserved.
パスワード (**********?) ***********
接続先:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.1.0
SQL>
接続に使ったユーザーはDBA_Debraですが、CURRENT_USERはUSER_SHAREDになります。
SQL> select sys_context('USERENV','CURRENT_USER') from dual;
SYS_CONTEXT('USERENV','CURRENT_USER')
________________________________________
USER_SHARED
SQL>
ビューSESSION_ROLESを確認すると、ロールとしてSR_DBA_ROLEが割り当たっていることが確認できます。
SQL> select * from session_roles;
ROLE
______________
SR_DBA_ROLE
SQL>
以上でOCI IAMユーザーにてAutonomous Databaseに接続できることが確認できました。
完