はじめに
Autonomous AI Databaseで、マルチファクタ認証(MFA)がサポートされ、ユーザー・パスワードに加えて追加の検証ファクタを必要とすることで、データベース・アクセスのセキュリティを強化できます。MFAは、データベース・ログイン、保護されたSQL文の実行、またはその両方に対して構成できます。
この記事では、データベース・ログイン時にマルチファクタ認証(Login-Time MFA)を追加してみました。
パスワード(第1要素)によるログイン後、登録済みのモバイルアプリにプッシュ通知が届き、ユーザーが承認することで初めてセッションが確立します。パスワードが漏洩しても、スマートフォンの承認なしにはログインできません。
Login-Time MFAに対応している認証チャネルは以下の2つです。
| 認証チャネル | 概要 |
|---|---|
| Oracle Mobile Authenticator (OMA) | Oracle が提供するモバイル認証アプリ |
| Cisco Duo | Cisco が提供するエンタープライズ向け MFA サービス |
今回は OMA を使った Login-Time MFA を試しました。
設定完了後のログインフローは以下のとおりです。
① 通常のパスワードで DB に接続を試みる
② 登録済みモバイルデバイス(OMA アプリ)にプッシュ通知が届く
③ アプリで承認操作を行う
④ ログイン完了・セッション確立
ログイン時の認証のみ MFA を使用し、SQL 実行前の追加操作は不要な構成です。
事前準備
- Oracle Autonomous AI Database(Serverless)がプロビジョニング済みであること
- 2026年3月時点では、 Oracle database release 19cのみ対応しております。
- データベースに ADMIN ユーザーでの接続が可能であること
- Identity Domainsの ドメインの操作が可能であること
- OMA の API エンドポイント(Identity Domains URL)と認証情報が必要
- スマートフォン(iOS / Android)に Oracle Mobile Authenticator アプリがインストール済みであること
- App Store / Google Play から無料でインストール可能
手順
Step 1:OMA 通知チャネルの設定
1-1. OCI IAM Identity Domains で OAuth アプリを登録し Client ID / Secret を取得
DBMS_CLOUD.CREATE_CREDENTIAL に設定する username と password は、OCI IAM Identity Domains で作成した OAuth クライアントアプリの Client ID / Secret です。
以下の手順で取得します。
-
OCI コンソール → 「Identity & Security」→「Identity」→「Domains」
-
対象の Identity Domain を選択し、ドメインURL をメモ(これが後述の
api_endpointになる)
-
クライアント構成 セクションで以下を設定:
-
同じ編集画面をスクロールして下部の「アプリケーション・ロール」セクションへ移動
-
- 保存後、「OAuth構成」タブの クライアント構成 セクション に クライアントID と クライアント・シークレットが表示されます。
注意: クライアント・シークレットは、この画面でのみ表示され、以後は確認できません。このタイミングでコピーして安全な場所に保存してください。
1-2. OMA 認証情報を Credential として登録
Autonomous Databaseに ADMINユーザで接続し、各SQLを実行します。
| 発行される値 | DB 設定での対応 |
|---|---|
| クライアント ID | username => '<client_id>' |
| クライアント・シークレット | password => '<client_secret>' |
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OMA_CRED',
username => 'ef0d38a9ffdb46c09fd3a88b7b21fb02', -- Client ID
password => '<Client Secret>' -- Client Secret
);
END;
/
1-3. OMA 通知チャネルの設定
BEGIN
DBMS_MFA_ADMIN.CONFIGURE_NOTIFICATION(
notification_type => 'OMA',
attributes => JSON_OBJECT(
'credential_name' VALUE 'OMA_CRED',
'api_endpoint' VALUE 'https://idcs-xxxxxxxxxx.identity.oraclecloud.com' -- Step 1-1 でメモした ドメインURL
)
);
END;
/
Step 2:MFA 対象ユーザーの作成
検証用のユーザーを作成し、必要な権限を付与します。
-- テストユーザー作成
CREATE USER login_mfa_test IDENTIFIED BY "<パスワード>";
GRANT CREATE SESSION TO login_mfa_test;
Step 3:ユーザーを Login-Time MFA に登録
ADMIN ユーザーで DBMS_MFA_ADMIN.REGISTER_USER を実行します。type => 'LOGON' を指定することが Login-Time MFA の登録に必要なポイントです。
BEGIN
DBMS_MFA_ADMIN.REGISTER_USER(
username => 'LOGIN_MFA_TEST',
type => 'LOGON',
email => 'login_mfa_test@example.com', -- 登録メール送信先
attributes => JSON_OBJECT(
'auth_method' VALUE 'oma_push' -- OMA プッシュ通知を使用
)
);
END;
/
登録完了メール
ユーザーの email に登録案内メールが届きます。メール内のリンクまたは QR コードから OMA アプリへのデバイス登録を完了させます。
Step 4:OMA アプリへのデバイス登録
-
スマートフォンで Oracle Mobile Authenticator アプリを開く
Step 5:Login-Time MFA 動作確認
5-1. データベースに接続
CONNECT login_mfa_test/<パスワード>@<接続文字列>
パスワード認証が成功すると、OMA アプリにプッシュ通知が届きます。
プッシュ通知のスクリーンショット
5-2. アプリで承認
OMA アプリの通知を開き、「承認」 をタップします。
5-3. ログイン完了・SQL 実行
承認後、セッションが確立され、SQL が実行できます。
SELECT COUNT(*) FROM user_tables;
Step 6:ユーザー登録解除(クリーンアップ)
Autonomous Databaseに ADMINユーザで接続し、各SQLを実行します。
BEGIN
DBMS_MFA_ADMIN.DEREGISTER_USER(
username => 'LOGIN_MFA_TEST',
type => 'LOGON',
email => 'login_mfa_test@example.com'
);
END;
/
SQL Access Token MFA との比較
| 項目 | Login-Time MFA | SQL Access Token MFA |
|---|---|---|
| 認証タイミング | DB ログイン時 | SQL 実行前 |
| 認証チャネル | OMA / Cisco Duo | Email / Slack / OMA |
| 追加操作 | なし(ログイン時のみ) | セッションごとに OTP 入力が必要 |
| DB Actions | 利用可能 | 利用不可 |
| 向いているユース | 一般的な DB ユーザー | 高セキュリティ要件・外部アクセス |
おわりに
Autonomous AI Database の Login-Time MFA(OMA)を試した結果、以下の点が確認できました。
- ログイン時だけ承認操作が必要: SQL Access Token MFA と異なり、いったんログインすれば SQL 実行に追加操作は不要
- スマートフォン必須: OMA アプリのインストールとデバイス登録が前提になる
- Identity Domains 連携が必要: OMA の API エンドポイント設定に必要
一般的な DB ユーザー向けのセキュリティ強化には Login-Time MFA、API アクセスや外部連携など高セキュリティ要件には SQL Access Token MFA と、用途に応じて使い分けるのがよいでしょう。


















