2. Databaseのセットアップ
実施内容
- サンプルスキーマの作成
- 外部認証の有効化
- グローバルユーザーの作成
- グローバルロールの作成
このセクションでは、Oracle Database(Autonomous Database)を OCI IAM と連携させるために必要な Database 側の設定を行います。
本手順を始める前に、前提条件(特に ADB の準備と Wallet のダウンロード)が満たされていることを確認してください。
2-1. サンプルスキーマの作成
Section titled “2-1. サンプルスキーマの作成”チュートリアルの動作確認用として、HR スキーマとサンプル表を作成します。すでに存在する場合は省略できます。
まず、Walletを使用してログインします。
sql -cloudconfig <ダウンロードしたWalletへのパス> admin/<Password>@<ConnectString> $ sql -cloudconfig ./adb-wallet/Wallet_UQG5XBZV5LIND8ZF.zip /nolog
SQL> conn admin@uqg5xbzv5lind8zf_medium Password? (**********?) ****************** Connected.
SQL> sho user con_name USER is "ADMIN" CON_NAME ------------------------------ G884BFFDDED7D8C_UQG5XBZV5LIND8ZFここでは最小構成として、HRユーザー作成、セッション権限付与、表作成、データ投入を行います。
-- ユーザー作成(必要に応じてパスワードも設定する) create user HR quota unlimited on data;
-- サンプル表を作成 create table HR.DEPARTMENTS ( DEPT_ID number primary key, DEPT_NAME varchar2(50) not null, LOCATION varchar2(50) );
-- サンプルデータを挿入 insert into hr.departments (dept_id, dept_name, location) values (10, 'Accounting', 'Tokyo'); insert into hr.departments (dept_id, dept_name, location) values (20, 'Reserch', 'Osaka'); insert into hr.departments (dept_id, dept_name, location) values (30, 'Sales', 'Nagoya'); insert into hr.departments (dept_id, dept_name, location) values (40, 'HR', 'Fukuoka');
commit;2-2. 外部認証の有効化
Section titled “2-2. 外部認証の有効化”IAM ユーザーによる接続を許可するために、Database の外部認証を OCI IAM と連携するように設定します。
有効化手順は DB プラットフォーム(ADB / 非ADB)で異なるため、詳細は公式ドキュメントも参照してください。
- ADB-S:https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/enable-iam-authentication.html
- 非ADB:https://docs.oracle.com/cd/F19136_01/dbseg/authenticating-and-authorizing-iam-users-oracle-dbaas-databases.html#GUID-4149CF38-FE2E-4682-806E-8100CB7A9835
Autonomous Database(ADB)の場合
Section titled “Autonomous Database(ADB)の場合”ADBの場合、 DBMS_CLOUD_ADMIN パッケージを使用してOCI IAM 認証を有効化します。
BEGIN DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION( type => 'OCI_IAM' );END;/非ADBの場合
Section titled “非ADBの場合”非ADBの場合は、 IDENTITY_PROVIDER_TYPE パラメータを設定します。
ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=OCI_IAM SCOPE=BOTH;設定が正しく反映されたか、状態を確認します。
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
-- または以下のコマンドでも可SHOW PARAMETER identity_provider_type;SQL> select name, value from v$parameter where name='identity_provider_type';
NAME VALUE______________________ _______identity_provider_type OCI_IAM2-3. グローバルユーザーの作成
Section titled “2-3. グローバルユーザーの作成”OCI IAMユーザーがDatabaseに接続する際のマッピング先となるグローバルユーザーを作成します。
本手順では、IAMのグループ (domain-db/iamgroup-connect) に属するすべてのユーザーが、Database上では単一のユーザー DBUSER_IAM として接続するように設定します。
そのため、作成するグローバルユーザーは以下の1ユーザーのみとします。
DBUSER_IAM
管理者権限を持つユーザーでDBに接続し、グローバルユーザーを作成します。
create user DBUSER_IAM identified globally as 'IAM_GROUP_NAME=domain-db/iamgroup-connect';これで、 iamgroup-connect グループに属するユーザーは、DBでは DBUSER_IAM ユーザーとして扱われることになります。
また、接続するための権限を DBUSER_IAM ユーザー自体に直接付与しておきます。
grant create session to DBUSER_IAM;2-4. グローバルロールの作成
Section titled “2-4. グローバルロールの作成”グローバルロールを IAM グループにマッピングし、グループ別に権限を分離します。作成するロールは次の 2 つです。
GLROLE_HR_ADMIN(iamgroup-hr-admin グループと対応付け。admin(管理)用の権限を与える)GLROLE_HR_DEV(iamgroup-hr-dev グループと対応付け。dev(参照)用の権限を与える)
GLROLE_HR_ADMIN ロールには、HRスキーマのすべての管理権限を付与します。
create role GLROLE_HR_ADMIN identified globally as 'IAM_GROUP_NAME=domain-db/iamgroup-hr-admin';
grant all privileges on schema hr to GLROLE_HR_ADMIN;GLROLE_HR_DEV ロールへは参照権限のみ付与します。
create role GLROLE_HR_DEV identified globally as 'IAM_GROUP_NAME=domain-db/iamgroup-hr-dev';
grant select on hr.departments to GLROLE_HR_DEV;次のセクションでは、IAM データベース・パスワード(DBパスワード)を使って実際にログインし、グループに応じた権限でアクセスできることを確認します。