Skip to content

2. Databaseのセットアップ

実施内容

  • サンプルスキーマの作成
  • 外部認証の有効化
  • グローバルユーザーの作成
  • グローバルロールの作成

このセクションでは、Oracle Database(Autonomous Database)を OCI IAM と連携させるために必要な Database 側の設定を行います。
本手順を始める前に、前提条件(特に ADB の準備と Wallet のダウンロード)が満たされていることを確認してください。

チュートリアルの動作確認用として、HR スキーマとサンプル表を作成します。すでに存在する場合は省略できます。

まず、Walletを使用してログインします。

sql -cloudconfig <ダウンロードしたWalletへのパス> admin/<Password>@<ConnectString>
Terminal window
$ 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;

IAM ユーザーによる接続を許可するために、Database の外部認証を OCI IAM と連携するように設定します。
有効化手順は DB プラットフォーム(ADB / 非ADB)で異なるため、詳細は公式ドキュメントも参照してください。

ADBの場合、 DBMS_CLOUD_ADMIN パッケージを使用してOCI IAM 認証を有効化します。

BEGIN
DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
type => 'OCI_IAM' );
END;
/

非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_IAM

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;

グローバルロールを 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パスワード)を使って実際にログインし、グループに応じた権限でアクセスできることを確認します。