最新のOracle Databaseのアップデートでは、ローカル・ユーザーの多要素認証(MFA)の機能がサポートされました。これは、通常のユーザー・パスワードに加えて、モバイル・オーセンティケータでプッシュ通知を受け取って、許可を押すことでログインできるようになるMFA機能で認証強化することができます。
まずは、こちらのスライドをご覧ください。
設定するデータベースは、対応するバージョンまでアップグレードが必要、また、OCI IAMのドメインURLに対してアクセスできる必要があります。詳細な設定手順は、こちらが分かりすいと思います。ただ、この手順で設定しているSMTPについてですが、MFA自体の動作には必須の要件ではありません。なので、ここではより簡単に試すことができる最小限の手順を紹介したいと思います。
アイデンティティ・ドメインの設定
アイデンティティ・ドメインは、Defaultまたは作成済みのものでOK。詳細タグからドメインURLをコピーしておく。※データベースは、このURLにアクセスできることが必要

統合アプリケーション -> アプリケーションの追加をクリック

作成後に、OAuth構成 -> OAuth構成の編集をクリック

クライアントIDとシークレットは、後で使用するのでコピーしておく

Oracle DatabaseのMFA設定
SYSDBA権限でPDBに接続し、パラメータを追加
alter system set MFA_OMA_IAM_DOMAIN_URL = 'アイデンティティ・ドメインのURL';
ex)
alter system set MFA_OMA_IAM_DOMAIN_URL = 'https://idcs-b69af6ff925d44xxxxxxxx.identity.oraclecloud.com:443';
//ウォレットの場所を確認しておく
show parameter wallet_root;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
wallet_root string /opt/oracle/dcs/commonstore/wa
llets/DB1031_sys
新たにWalletを作成し、コピーしておいたクライアントIDとシークレット情報を格納する。配置する場所は以下。mfaのディレクトリ名は新たに作成する
- CDBは、{WALLET_ROOT}/mfa
- PDBは、{WALLET_ROOT}/{PDB's guid}/mfa
//PDB用のウォレットを作成。{WALLET_ROOT}/{PDB's guid}/mfaのディレクトリから実行
$ pwd
/opt/oracle/dcs/commonstore/wallets/DB1031_sys/40BA6EE05F8027C2E063B501F40ABC91/mfa
orapki wallet create -wallet ./ -pwd "password" -auto_login -compat_v12
orapki secretstore create_entry -wallet ./ -pwd "password" -alias oracle.security.mfa.oma.clientid -secret クライアントID
orapki secretstore create_entry -wallet ./ -pwd "password" -alias oracle.security.mfa.oma.clientsecret -secret シークレット
ex)
orapki wallet create -wallet ./ -pwd "xxxxxxxxxxx" -auto_login -compat_v12
orapki secretstore create_entry -wallet ./ -pwd "xxxxxxxxxxx" -alias oracle.security.mfa.oma.clientid -secret 0d35509a70f846cebff0697c37630cbc
orapki secretstore create_entry -wallet ./ -pwd xxxxxxxxxxx" -alias oracle.security.mfa.oma.clientsecret -secret idcscs-b8bfe262-fedd-4356-xxxx-xxxxxxxxxxx
MFAの動作確認
まず、新しいデータベース・ユーザーを作成する場合を想定して試してみる
IAMに存在していないユーザー(メールアドレス)を指定して、CREATE USERを実行する。ここでは、エラーになってSQLは失敗する
CREATE USER ユーザ名 IDENTIFIED BY "パスワード" AND FACTOR 'OMA_PUSH' AS 'メールアドレス';
ex)
CREATE USER test IDENTIFIED BY "xxxxxxxx" AND FACTOR 'OMA_PUSH' AS 'xxxx.xxxx@oracle.com';
*
ERROR at line 1:
ORA-28470: Failure to enroll the user for Oracle Mobile Authenticator (OMA)
Push Notification
Help: https://docs.oracle.com/error-help/db/ora-28470/
SQLが失敗するとすぐに、アイデンティティ・ドメインにユーザーが作成され、下記のアクティベーションのメールが指定したメールアドレスに送信される。リンクに従って、アカウントをアクティベーションをする。※アイデンティティ・ドメインでMFAを強制している場合は、ログイン時にMFAの設定を行う。ならない場合は、ログイン後に自身のマイ・プロファイルからMFAの設定を追加すること

※マイ・プロファイルから2ステップ検証でモバイルアプリケーションが設定済みであればOK

アクティベーション完了後、再度同じCREATE USERを実行する。今度は、ユーザー作成が成功
SQL> CREATE USER test IDENTIFIED BY "xxxxxxxx" AND FACTOR 'OMA_PUSH' AS 'xxxx.xxxx@oracle.com';
grant create session test;
User created.
ユーザー、パスワードで指定して接続すると、OMAのアプリケーションに通知が配信される
sqlplus test/xxxxxx@xxx.xxx.xxx.oraclevcn.com:1521/xxx_pdb1.xxx.demovcn.oraclevcn.com
SQL*Plus: Release 23.26.0.0.0 - for Oracle Cloud and Engineered Systems on Sat Nov 1 02:59:39 2025
Version 23.26.0.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
接続が成功
Connected to:
Oracle AI Database 26ai EE High Perf Release 23.26.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.26.0.0.0
SQL>
既存のIAMユーザを指定した場合、MFAの設定がされてないければ、同様に下記のようなエラーになる。MFAがされていれば、エラーにならずユーザー作成が成功する
CREATE USER ユーザ名 IDENTIFIED BY "パスワード" AND FACTOR 'OMA_PUSH' AS 'メールアドレス';
ex)
CREATE USER test IDENTIFIED BY "xxxxxxxx" AND FACTOR 'OMA_PUSH' AS 'xxxx.xxxx@oracle.com';
*
ERROR at line 1:
ORA-28470: Failure to enroll the user for Oracle Mobile Authenticator (OMA)
Push Notification
Help: https://docs.oracle.com/error-help/db/ora-28470/
既存のDBユーザーへのMFAの追加は、ALTER USERを使用する
ALTER USER ユーザ名 ADD FACTOR 'OMA_PUSH' AS 'xxxx.xxxx@xxxx.xxx';
設定は以上です。必要なのは、アイデンティティ・ドメインの機密アプリケーションとその機密アプリケーションにアクセスするためのクライアント情報をデータベース側に設定するだけで使用できます。SMTPは、データベース側からMFAの登録を促すバーコードを配信するだけなので、無くてもMFA自体の動作には問題ありません。
データベースを対応バージョンまでアップグレードする必要がありますが、設定自体は簡単にセキュリティ強化できる機能ですので試して頂ければと思います。
また、IAMとのトークン認証を使用すれば、MFAだけでなくユーザーID連携などの様々な要件にも対応できるようになります。





