OCIが提供するマネージド・データベースサービス Autonomous AI Database(以下,ADB)では,2026年2月にリリースされた新機能として,多要素認証(MFA)を構成できるようになりました。1
この記事では,ADB で MFA を利用するための構成手順を紹介します。
今回は以下の2パターンを取り上げます。
- OMA を利用した ログイン時MFA
- OMA / Email を利用した SQLアクセス時MFA
0. 概要
ADB で利用できる MFA には,次の2種類があります。
- ログイン時 MFA(Login-Time MFA)
- SQLアクセス時 MFA(SQL Access Token MFA)
ログイン時 MFA は,その名の通り ADB へのログイン時に MFA を要求する方式です。
一方,SQLアクセス時 MFA は SQL 実行前に追加認証を行う方式で,厳密には「多要素認証」というより,再認証に近い使い方です。
認証要素としては,専用アプリによるプッシュ通知や,電子メールなどによるワンタイムパスワード(以下OTP)を利用できます。形式ごとの対応状況は以下の通りです。
| 認証要素 | チャンネル | ログイン時 MFA | SQLアクセス時 MFA |
|---|---|---|---|
| OTP | 電子メール | ✕ | ○ |
| OTP | Slack | ✕ | ○ |
| プッシュ通知 | Oracle Mobile Authenticator (OMA) | ○ | ○ |
| プッシュ通知 | Cisco Duo Mobile app | ○ | ✕ |
Oracle Mobile Authenticator (以下OMA) では OTP も生成できますが,ADB の MFA 構成ではプッシュ通知のみサポートされているようです。
本記事では,OMA と電子メールを認証要素として使用した MFA の構成方法を確認します。
1. 前提準備
まず,検証対象のデータベース・ユーザーとして MFA_USER を作成しておきます。
ADB なので,ユーザー作成自体は簡単に行えるはずです。
続いて,MFA_USER に以下の権限を付与します。
GRANT EXECUTE ON DBMS_MFA TO MFA_USER;
また,接続クライアントには SQLcl を使用します。事前に SQLcl をインストールし,ADB 接続用のクライアント・ウォレットをダウンロードしておきます。
2. 通知チャネルの設定
MFA の通知チャネルとして「OMA プッシュ通知」と「電子メール」を構成します。使用する要素のみの設定で問題ありません。
OMA プッシュ通知の設定
Oracle Mobile Authenticator(以下OMA)を利用するには,OCI が提供する IDaaS である Identity Domains のセットアップが必要です。
Identity Domain の作成方法については,以下の資料を参照してください。Defaultドメインを使用してもいいかと思います。
ここでは domain-db という名前の Domain を作成しています。
ドメイン・タイプは Oracle Apps Premium にしていますが,FREE でも問題ありません。
使用する Domain の詳細画面から,ドメインURLを控えておきます。
続いて,Domain 詳細画面の「統合アプリケーション」タブを開き,「アプリケーションの追加」をクリックします。
次に「OAuth構成」タブから「OAuth構成の編集」をクリックし,「このアプリケーションをクライアントとして今すぐ構成します」を選択します。
さらに「クライアント資格証明」にチェックを入れます。

設定画面下部のアプリケーション・ロールには,以下の2つを追加します。
MFA ClientUser Administorator
その後,「送信」で確定します。
アプリケーションの詳細画面から,「クライアントID」と「クライアント・シークレット」を控えておきます。

ADB 側に Identity Domain の資格情報を登録するため,以下を実行します。
username と password には,先ほど控えたクライアントIDとクライアント・シークレットを指定します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name => 'OMA_CRED',
username => '<client_id>',
password => '<client_secret>'
);
END;
/
次に,作成した資格情報と Domain の API エンドポイントを紐付けます。
api_endpoint には,先ほど控えたドメインURLを指定します。
BEGIN
DBMS_MFA_ADMIN.CONFIGURE_NOTIFICATION(
notification_type => 'OMA',
attributes => JSON_OBJECT(
'credential_name' VALUE 'OMA_CRED',
'api_endpoint' VALUE '<domain_url>'
)
);
END;
/
Email の設定
電子メールを通知チャネルとして設定します。
前提として,OCI Email Delivery サービスで「承認済送信者」として,送信元のドメインおよびメールアドレスをあらかじめ設定しておく必要があります。
Email Delivery サービスは,OCI コンソールの [開発者サービス] → [アプリケーション統合] → [電子メール配信] からアクセスできます。
また,メール配信にはSMTP資格証明が必要です。Identity Domain の適当なユーザーから SMTP資格証明を生成し,ユーザー名とパスワードを取得しておきます。
取得したユーザー名とパスワードを使って,ADB に資格情報を作成します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'EMAIL_CRED',
username => '<username>',
password => '<password>'
);
END;
/
次に,アクセス制御リスト(ACL)を更新し,データベースにSMTPホストへの接続権限を付与し,メールを送信できるようにします。
ドメインとポート番号は電子メール配信画面の「構成」メニューから確認することができます。
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => 'smtp.email.<region>.oci.oraclecloud.com',
lower_port => 587,
upper_port => 587,
ace => xs$ace_type(
privilege_list => xs$name_list('SMTP'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db
)
);
END;
/
その後,作成した認証情報を使って,OTPを配信するためのメール通知チャネルを設定します。
BEGIN
DBMS_MFA_ADMIN.CONFIGURE_NOTIFICATION(
notification_type => 'EMAIL',
attributes => JSON_OBJECT(
'credential_name' VALUE 'EMAIL_CRED',
'smtp_host' VALUE 'smtp.email.<region>.oci.oraclecloud.com',
'smtp_port' VALUE 587,
'sender' VALUE '<mfa_alert_address>',
'sender_email_display_name' VALUE 'DB MFA ALERTS'
)
);
END;
/
3. OMAで ログイン時MFA を有効化する
まず,対象ユーザーを MFA に登録します。
ここでは DBユーザーとして MFA_USER を指定します。
BEGIN
DBMS_MFA_ADMIN.REGISTER_USER(
username => '<db_user>',
type => 'LOGON',
email => '<mail_address>',
attributes => JSON_OBJECT('auth_method' VALUE 'oma_push')
);
END;
/
指定した email のユーザーが Identity Domain 側にまだ存在しない場合,以下のエラーが発生することがあります。
ORA-28470: Failure to enroll the user for Oracle Mobile Authenticator (OMA) Push Notification
ORA-06512: "SYS.DBMS_MFA_ADMIN", 行574
ORA-06512: "SYS.DBMS_MFA_ADMIN", 行1394
ORA-06512: 行2
https://docs.oracle.com/error-help/db/ora-28470/
Error at Line: 1 Column: 1
この場合,Domain 側には新規ユーザーが作成され,登録用のメールが送信されます。メールに従って OMA のセットアップを完了したあと,再度 REGISTER_USER を実行してください。
では,実際に接続して動作を確認します。
❯ ./sqlcl/bin/sql /nolog
SQLcl: Release 25.1 Production on Sat Mar 07 17:56:56 2026
Copyright (c) 1982, 2026, Oracle. All rights reserved.
SQL> set cloudconfig tns_files/adb_wallet/Wallet_ADBTPNRTDEV.zip
SQL> connect mfa_user@adbtpnrtdev_medium
Password? (**********?) ******************
<<<<< プッシュ通知が届いたら「許可」を選択 >>>>>
Connected.
このように,パスワード入力後に OMA のプッシュ通知による承認が入り,承認後に接続が完了します。
4. OMA で SQLアクセス時MFA を設定する
OMA を使った SQLアクセス時MFA を設定します。
BEGIN
DBMS_MFA_ADMIN.REGISTER_USER (
username => '<db_user>',
type => 'SQL ACCESS',
email => '<mail_address>',
attributes => JSON_OBJECT(
'scope' VALUE 'USER',
'duration_min' VALUE 5,
'idle_timeout_min' VALUE 2,
'auth_method' VALUE 'OMA_PUSH'
)
);
END;
/
この例では,対象ユーザーを SQLアクセス時MFA に登録し,以下のように設定しています。
- トークンの有効期間: 5 分
- 無操作タイムアウト: 2 分
- 認証方式: OMA プッシュ通知
同じユーザーを同じメールアドレスで別タイプ(LOGON/SQL ACCESS)として登録することで,ログイン時MFA と SQLアクセス時MFA の両方を併用できます。
では,実際に動作を確認します。
❯ ./sqlcl/bin/sql /nolog
SQLcl: Release 25.1 Production on Sat Mar 07 18:27:08 2026
Copyright (c) 1982, 2026, Oracle. All rights reserved.
SQL> set cloudconfig tns_files/adb_wallet/Wallet_ADBTPNRTDEV.zip
SQL> connect mfa_user@adbtpnrtdev_medium
Password? (**********?) ******************
Connected.
SQL> select count(*) from sh.sales;
Error starting at line : 1 in command -
select count(*) from sh.sales
Error at Command Line : 1 Column : 1
Error report -
SQL Error: ORA-64660: Token Authorization is not complete for the user or the session.
https://docs.oracle.com/error-help/db/ora-64660/
More Details :
https://docs.oracle.com/error-help/db/ora-64660/
この時点では追加認証が完了していないため,ORA-64660 が返ってきます。
続いて,セッションを初期化して OTP を要求します。
通知チャネルの設定に応じて,この操作により プッシュ通知(または OTP)が送信されます。
BEGIN
DBMS_MFA.INITIALIZE_SESSION (
email => '<mail_address>'
);
END;
/
SQL> BEGIN
2 DBMS_MFA.INITIALIZE_SESSION (
3 email => 'xxxxxx@xxxxxx.com'
4 );
5 END;
6* /
<<<<< プッシュ通知が届いたら「許可」を選択 >>>>>
PL/SQL procedure successfully completed.
SQL> select count(*) from sh.sales;
COUNT(*)
___________
918843
承認後は,通常どおり SQL を実行できるようになります。
5. Email で SQLアクセス時MFA を設定する
最後に,電子メールによる OTP を使って SQLアクセス時MFA を構成します。
まず,対象ユーザーが SMTPホストへ接続できるように ACL を設定します。
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => 'smtp.email.<region>.oci.oraclecloud.com',
lower_port => 587,
upper_port => 587,
ace => xs$ace_type(
privilege_list => xs$name_list('SMTP'),
principal_name => '<db_user>',
principal_type => xs_acl.ptype_db
)
);
END;
/
続いて,Email を認証方式としてユーザーを登録します。
BEGIN
DBMS_MFA_ADMIN.REGISTER_USER(
username => '<db_user>',
type => 'SQL ACCESS',
email => '<mail_address>',
attributes => JSON_OBJECT(
'auth_method' VALUE 'EMAIL'
'duration_min' VALUE 60,
'scope' VALUE 'SESSION',
'idle_timeout_min' VALUE 15
)
);
END;
/
では,実際に動作を確認します。
❯ ./sqlcl/bin/sql /nolog
SQLcl: Release 25.1 Production on Sun Mar 08 21:09:40 2026
Copyright (c) 1982, 2026, Oracle. All rights reserved.
SQL> set cloudconfig tns_files/adb_wallet/Wallet_ADBTPNRTDEV.zip
SQL> connect mfa_user@adbtpnrtdev_medium
Password? (**********?) ******************
Connected.
SQL> select count(*) from sh.sales;
Error starting at line : 1 in command -
select count(*) from sh.sales
Error at Command Line : 1 Column : 1
Error report -
SQL Error: ORA-64660: Token Authorization is not complete for the user or the session.
https://docs.oracle.com/error-help/db/ora-64660/
More Details :
https://docs.oracle.com/error-help/db/ora-64660/
OMA の場合と同様に,まずはトークン未承認のためORA-64660エラーになります。
ここで OTP を発行してもらいます。
BEGIN
DBMS_MFA.INITIALIZE_SESSION(
email => '<mail_address>'
);
END;
/
すると,指定したメールアドレス宛てに OTP が送られてきます。

OTP: 60498892
Use the OTP above for SQL access. The OTP is valid for 60 minutes.
受信した OTP をSET_TOKEN で設定します。
BEGIN
DBMS_MFA.SET_TOKEN(
token => '<otp>'
);
END;
/
SQL> BEGIN
2 DBMS_MFA.SET_TOKEN(
3 token => '60498892'
4 );
5 END;
6* /
PL/SQL procedure successfully completed.
SQL> select count(*) from sh.sales;
COUNT(*)
___________
918843
これで SQLアクセス時MFA の認証が完了し,SQL を実行できるようになります。
6. ユーザーの MFA 登録解除
ユーザーに設定された認証要素を解除するには,以下を実行します。
BEGIN
DBMS_MFA_ADMIN.DEREGISTER_USER(
username => '<db_user>',
type => '<type>', -- [LOGON]か[SQL ACCESS]から選択
email => '<mail_address>'
);
END;
/
7. 参考リンク
DBMS_MFA_ADMINパッケージ
https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/dbms-mfa-admin-package.html
DBMS_MFAパッケージ
https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/dbms-mfa-package.html













