ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときに、これらの値をクラウド環境に固有の値に置き換えます。
Microsoft Entra IDを使用したOracle Database 23aiの認証
イントロダクション
Oracle DatabaseをMicrosoft Entra ID (旧Microsoft Azure Active Directory)と統合すると、データベースへのセキュアでパスワードなしのアクセスが可能になります。この設定により、ユーザーおよびサービスは、シングル・サインオン(SSO)を介してMicrosoft Entra ID資格証明を使用してデータベースに接続できます。
認証は、Microsoft Entra IDによって発行されたOAuth2アクセス・トークンを介して処理されます。このトークン(ユーザーのアイデンティティおよびアクセスの詳細を含む)は、Oracle Databaseに渡されます。データベース・クライアントは、アクセスを許可する前にトークンの形式と有効期限を検証し、安全で合理化された接続プロセスを保証します。
なぜこれが必要なのか。
セキュリティの優先順位がますます高まる中、機密データへのアクセスの管理が重要になります。Oracle Databaseは、Microsoft Entra IDと連携して、パスワードなしでセキュアな認証を実現し、最新のID管理システムを活用してシームレスでスケーラブルかつ堅牢なアクセス制御を実現します。この統合は、Oracle Autonomous Database、Oracle Exadata、Oracle Base Database Serviceなど、幅広いOracleデプロイメントをサポートし、さまざまな環境間で一貫性のある安全なアクセスを実現します。
データベース・クライアントおよびツール
Microsoft Entra IDトークンをサポートするアプリケーションおよびツールは、Microsoft Entra IDを介してユーザーを直接認証し、クライアントAPIを介してデータベース・アクセス・トークンをOracle Databaseインスタンスに渡すことができます。SQL*Plus
などの既存のデータベース・ツールは、ファイルに格納されているMicrosoft Entra IDトークンを使用するように構成できます。トークンは、Microsoft PowerShell、Azure CLIなどのヘルパー・ツール、またはMicrosoft Authentication Library (MSAL)などのライブラリを使用して取得し、指定したファイルの場所に保存できます。後で、SQL*Plusはこのトークンを参照して接続を確立します。
ノート:このチュートリアルでは、MSALを利用したPythonスクリプトを使用してセキュリティ・トークンを取得します。詳細は、Microsoft Authentication Library (MSAL)の概要を参照してください。
このチュートリアルでは、TLS設定を含むOracle Base Database 23aiのMicrosoft Entra ID認証の構成について説明します。データベース・タイプに固有のドキュメント(オンプレミス、Exadata、DBaaSまたはAutonomous)を参照してください。TLSはAutonomous Database用に事前構成されているため、そのステップをスキップできます。
対象読者
Oracle Database管理者およびOracle Cloud Infrastructure Identity and Access Management (OCI IAM)管理者。
目的
-
データベースのTransport Layer Security (TLS)を設定します。
-
データベース・サーバーをMicrosoft Azureに登録します。
-
データベース・クライアントをMicrosoft Azureに登録します。
-
Database for Microsoft Azure統合を構成します。
-
ヘルパー・スクリプトを使用してクライアントを構成します。
-
SQL*Plusを使用して接続をテストします。
前提条件
-
管理権限を持つMicrosoft Azureアカウント。
-
Oracle Base Databaseサービス上のOracle Database 23ai。
-
ネットワーク設定:
-
Oracle Databaseサーバーは、Microsoft Entra ID公開キーをリクエストして、発行されたトークンの信頼性と妥当性を検証し、信頼できる機関によって発行されたことを確認できる必要があります。
-
ネットワーク接続の設定に応じて、適切なルーティングおよびセキュリティ・ルールを構成する必要があります。NATゲートウェイを使用してアウトバウンド・トラフィックのルーティングが可能で、エグレス・ルールはポート443を介してMicrosoft AzureパブリックIP範囲のみに制限する必要があります。
-
-
TLS構成:
- データベース・クライアントからデータベース・サーバーにMicrosoft Entra IDトークンを送信する場合は、TLS接続を確立する必要があります。このチュートリアルでは、一方向TLS (自己署名ルート証明書でTLSを構成)を設定し、サーバーのみがクライアントに証明書を提供して自己認証を行います。クライアントは、サーバーに対して自身を認証するために個別のクライアント証明書を持つ必要はありません。
-
Oracle Linuxで実行されているOracleクライアント・ソフトウェア23aiを設定します。
-
Python 3.6以降をMSALモジュールとともにインストールします。Python 3.6は動作しますが、推奨バージョンは
3.7+
です。pip
を使用して、必要なモジュールをインストールします。
タスク1: Oracle Database 23aiのTLSの設定
タスク1.1: TLS構成のためのオペレーティング・システム(OS)の準備
-
データベース・サーバーにログインし、
root
ユーザーに切り替えてディレクトリを設定します。[opc@db23aigrid ~]$ sudo su - [root@db23aigrid ~]# mkdir -p /etc/ORACLE/WALLETS/oracle [root@db23aigrid ~]# cd /etc/ [root@db23aigrid etc]# chown -R oracle:oinstall ORACLE/
-
oracle
ユーザーとしてホスト名を取得します。[root@db23aigrid etc]# su - oracle [oracle@db23aigrid admin]$ hostname -f
サンプル出力:
db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com
-
データベースへの接続
[oracle@db23aigrid admin]$ sqlplus "/as sysdba"
-
ウォレットのルート・ディレクトリを確認します。
SQL> show parameter wallet_root;
サンプル出力:
NAME TYPE VALUE ---------- ------ ---------------------------------------------------- wallet_root string /opt/oracle/dcs/commonstore/wallets/DB23GRID_w54_iad
-
プラガブル・データベース(PDB)名およびGUIDを確認します。
SQL> show pdbs;
サンプル出力:
CON_ID CON_NAME OPEN MODE RESTRICTED ----- -------- --------- ---------- 2 PDB$SEED READ ONLY NO 3 DB23GRIDPDB READ WRITE NO
SQL> select guid from v$containers where name = 'DB23GRIDPDB';
サンプル出力:
GUID -- ----------------------------- 32435DD0A1EC55xxx0639400000A7225
-
ウォレットおよび証明書のローカル・ディレクトリを作成します。
[oracle@db23aigrid ~]$ mkdir -p /home/oracle/wallet_tls/certificates/rootCA [oracle@db23aigrid ~]$ mkdir -p /home/oracle/wallet_tls/certificates/db_wallet
-
PDB GUIDを使用して、ウォレット・ルート・パスの下にデータベースTLSディレクトリを作成します。
[oracle@db23aigrid ~]$ mkdir -p /opt/oracle/dcs/commonstore/wallets/DB23GRID_w54_iad/32435DDxxxxxx7E0639400000A7225/tls
-
TLS関連の環境変数で
.bashrc
を更新します。[oracle@db23aigrid ~]$ vi ~/.bashrc
次の項目を追加して、環境に応じて値を調整します。
export DBUSR_SYSTEM=system export DBUSR_PWD=QAZxswedc123## # Wallet and Database Administrator (sys) password export ORA_TLS_DIR=/etc/ORACLE/WALLETS/oracle export TLS_DIR=/opt/oracle/dcs/commonstore/wallets/DB23GRID_w54_iad/32435DD0A1EC55E7E0639400000A7225/tls export ROOT_TLS_DIR=/home/oracle/wallet_tls/certificates/rootCA export DB_TLS_DIR=/home/oracle/wallet_tls/certificates/db_wallet export TLS_DN=CN=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com,O=oracle,L=Austin,ST=Texas,C=US export TLS_SAN=DNS:db23aigrid,DNS:db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com, IPV4Address:143.47.117.99
-
変更の適用
[oracle@db23aigrid ~]$ . ~/.bashrc
タスク1.2: TLS Walletおよび証明書の構成
-
ルート・ウォレットを作成および構成します。
-
ルート・ウォレットを作成します。
[oracle@db23aigrid ~]$ orapki wallet create -wallet ${ROOT_TLS_DIR} -pwd ${DBUSR_PWD} -auto_login
-
ウォレットの内容を空白で表示します。
[oracle@db23aigrid ~]$ orapki wallet display -wallet ${ROOT_TLS_DIR}
-
ルートCAウォレット用の自己署名証明書を作成します。
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${ROOT_TLS_DIR} -dn $TLS_DN -keysize 2048 -sign_alg sha256 -self_signed -validity 3652 -pwd ${DBUSR_PWD} -addext_san $TLS_SAN
-
ディレクトリには、
cwallet.sso
およびewallet.p12
ファイルが必要です。ls -l ${ROOT_TLS_DIR}
-
ウォレットの内容(ユーザーと信頼できる証明書)を表示します。
orapki wallet display -wallet ${ROOT_TLS_DIR}
-
データベース・ウォレットの作成に使用するルートCAの信頼できる証明書をエクスポートします。
[oracle@db23aigrid ~]$ orapki wallet export -wallet ${ROOT_TLS_DIR} -dn $TLS_DN -cert ${ROOT_TLS_DIR}/rootCA.crt -pwd ${DBUSR_PWD}
-
rootCA.crt
ファイルの内容を表示します。cat ${ROOT_TLS_DIR}/rootCA.crt
-
-
サーバー(データベース)・ウォレットを作成および構成します。
-
データベース・ウォレットを作成します。
[oracle@db23aigrid ~]$ orapki wallet create -wallet ${DB_TLS_DIR} -pwd ${DBUSR_PWD} -auto_login
-
信頼できるルート証明書をウォレットに追加します(これは証明書管理者から取得)。
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${DB_TLS_DIR} -trusted_cert -cert ${ROOT_TLS_DIR}/rootCA.crt -pwd ${DBUSR_PWD}
-
ウォレットに秘密キーおよび証明書リクエストを作成します。
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${DB_TLS_DIR} -keysize 2048 -dn $TLS_DN -pwd ${DBUSR_PWD}-addext_san $TLS_SAN
-
証明書リクエストをエクスポートして、署名を受けます。
[oracle@db23aigrid ~]$ orapki wallet export -wallet ${DB_TLS_DIR} -dn $TLS_DN -request ${DB_TLS_DIR}/db23gridpdb.csr -pwd ${DBUSR_PWD}
-
ウォレットの内容を表示します。「リクエストされた証明書」の下にエントリがあります。
orapki wallet display -wallet ${DB_TLS_DIR}
-
証明書署名リクエスト(CSR)ファイルの内容を表示します。
cat ${DB_TLS_DIR}/db23gridpdb.csr
-
-
サーバー証明書に署名してインポートします。
-
自己署名ルート・ウォレットを使用してCSRに署名します。
[oracle@db23aigrid ~]$ orapki cert create -wallet ${ROOT_TLS_DIR} -request ${DB_TLS_DIR}/db23gridpdb.csr -cert ${DB_TLS_DIR}/db23gridpdb-signed.crt -validity 3652 -sign_alg sha256 -pwd ${DBUSR_PWD}
-
署名付きサーバーユーザー証明書を表示します。
cat ${DB_TLS_DIR}/db23gridpdb-signed.crt
-
署名されたデータベース・サーバー・ユーザー証明書をデータベース・ウォレットにインポートします。
[oracle@db23aigrid ~]$ orapki wallet add -wallet ${DB_TLS_DIR} -user_cert -cert ${DB_TLS_DIR}/db23gridpdb-signed.crt -pwd ${DBUSR_PWD}
-
ウォレットの内容を表示し、データベース・サーバー・ユーザー証明書が「ユーザー証明書」の下に表示されていることを確認します。データベース・サーバーおよびリスナーに使用するウォレットは、使用のためにデプロイする準備ができました。
orapki wallet display -wallet ${DB_TLS_DIR}
-
-
ウォレット・ファイルをデプロイします。
-
データベース・サーバー・ウォレット・ファイルをコピーします。
[oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/ewallet.p12 ${TLS_DIR} [oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/cwallet.sso ${TLS_DIR} [oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/ewallet.p12 ${ORA_TLS_DIR} [oracle@db23aigrid ~]$ cp -v ${DB_TLS_DIR}/cwallet.sso ${ORA_TLS_DIR}
-
証明書をエクスポート
[oracle@db23aigrid ~]$ orapki wallet export -wallet ${ROOT_TLS_DIR} -dn $TLS_DN -cert ${ROOT_TLS_DIR}/rootCA.crt -pwd ${DBUSR_PWD}
-
-
root
ユーザーとして、ルートCAのシステム全体を信頼します。-
[root@db23ailvm etc]# cp -v /home/oracle/wallet_tls/certificates/rootCA/rootCA.crt /etc/pki/catrust/source/anchors/
コマンドを実行します。 -
[root@db23ailvm etc]# update-ca-trust extract
コマンドを実行します。 -
適切なファイルアクセス権を設定します。
cd /etc/ORACLE/WALLETS/ chmod -R 755 oracle/
-
タスク1.3: TLS通信のためのOracleの構成
-
一方向TLSの
sqlnet.ora
を編集し、次の行を追加します。[oracle@db23aigrid ~]$ cd $ORACLE_HOME/network/admin [oracle@db23aigrid ~]$ vi sqlnet.ora
SSL_CLIENT_AUTHENTICATION = FALSE
-
tnsnames.ora
を編集し、TCPとTCPSの両方のエントリがPDBデータベースに追加されていることを確認します。環境に応じて値を調整します。
[oracle@db23aigrid ~]$ cd $ORACLE_HOME/network/admin [oracle@db23aigrid ~]$ vi tnsnames.ora
DB23GRIDPDB=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=db23aigrid)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com))) DB23GRIDPDB_TLS=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCPS)(HOST=db23aigrid)(PORT=1522))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com)))
タスク1.4: TLSを使用したリスナーの構成
-
Oracle Grid Infrastructureを使用している場合は、次のステップを実行します。
-
次のコマンドを実行します。
sudo su - grid srvctl stop listener srvctl modify listener -p "TCP:1521/TCPS:1522" srvctl config listener | grep "End points"
-
listener.ora
ファイルを編集します。$ vi listener.ora LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)) (ADDRESS=(PROTOCOL=TCP)(HOST=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)(PORT=1521)) (ADDRESS=(PROTOCOL=TCPS)(HOST=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)(PORT=1522)) ) ) SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION=(SOURCE=(METHOD=file) (METHOD_DATA=(DIRECTORY=/etc/ORACLE/WALLETS/oracle))) TRACE_LEVEL_LISTENER = support
-
リスナーを再起動します。
``` $ srvctl start listener ```
または
-
-
Oracle Linux Volume Managerを使用している場合は、次のステップを実行します。
-
次のコマンドを実行します
cd $ORACLE_HOME/network/admin lsnrctl stop
-
listener.ora
を編集します。$ vi listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =db23ailvm.sub10121249210.dbsecvcn.oraclevcn.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = db23ailvm.sub10121249210.dbsecvcn.oraclevcn.com)(PORT = 1522)) (SECURITY=(WALLET_LOCATION=/home/oracle/wallet_tls/certificates/rootCA)) ) ) SSL_CLIENT_AUTHENTICATION = FALSE ADR_BASE_LISTENER = /u01/app/oracle/product/23.0.0
-
リスナーを再起動します。
lsnrctl start
-
タスク1.5: TLS接続の検証
-
TCP (非TLS)をテストします。
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcp
-
TCPS (TLS有効)のテスト
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB_TLS SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcps
タスク1.6: TLSのクライアント・ホストの構成
ノート:このタスクの前提条件。
Oracle Linux 8を実行しているOCI Computeインスタンス。
Oracle Databaseクライアント23ai for Linux。詳細は、Oracle 23ai client installationを参照してください。
データベース・サーバーから証明書ファイルをコピーします。
ステップに従って、クライアント・ホストを構成します。
-
データベース・サーバーから証明書およびウォレット・ファイルをコピーします。任意の優先ファイル転送ツールを使用して、これらのファイルをデータベース・サーバーからクライアントに移動できます。
cd /home/oracle/wallet_tls/certificates/ tar -cvf rootCA.tar rootCA chmod 755 rootCA.tar cp rootCA.tar /tmp/
-
クライアント・ディレクトリを設定します。
[opc@bastion-server8-8 ~]$ sudo su - oracle [oracle@bastion-server8-8 ~]$ mkdir wallet_db23aigrid_tls [oracle@bastion-server8-8 ~]$ mkdir -p network/admin [oracle@bastion-server8-8 ~]$ export TNS_ADMIN=/home/oracle/network/admin
-
証明書およびウォレット・ファイルをデータベース・サーバーからクライアント・インスタンスに転送します。
[oracle@bastion-server8-8 ~]$ cp rootCA.tar wallet_db23aigrid_tls / [oracle@bastion-server8-8 ~]$ cd wallet_db23aigrid_tls / [oracle@linuxclient23:~/wallet_db23aigrid_tls]$ cp /tmp/rootCA.tar
-
証明書ファイルを抽出します。
[oracle@linuxclient23:~/wallet_db23aigrid_tls]$ tar -xvf rootCA.tar
-
tnsnames.ora
を構成します。[oracle@bastion-server8-8 ~]$ cd ~/network/admin [oracle@linuxclient23:~/instantclient_23_7/network/admin]$ vi tnsnames.ora DB23GRIDPDB= (DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=143.47.117.99)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com))) DB23GRIDPDB_TLS=(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3) (ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCPS)(HOST=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)(PORT= 1522))) (CONNECT_DATA=(SERVICE_NAME=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com)) (SECURITY = (SSL_SERVER_DN_MATCH=TRUE)))
-
sqlnet.ora
を構成します。[oracle@linuxclient23:~/instantclient_23_7/network/admin]$ vi sqlnet.ora SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE =(METHOD = FILE) (METHOD_DATA =(DIRECTORY =/home/oracle/wallet_db23aigrid_tls/rootCA)))
タスク1.7: クライアント・インスタンスからの接続のテスト
-
TCP (非TLS)をテストします。
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcp
-
TCPS (TLS有効)をテストします。
$ sqlplus system/QAZxswedc123##@DB23GRIDPDB_TLS SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual; NETWORK_PROTOCOL Tcps
タスク2: Microsoft Azureとデータベース統合の設定
タスク2.1: Microsoft Azureへのデータベース・サーバーの登録
-
アプリケーションを登録するためのMicrosoft Entra ID権限を持つ管理者としてMicrosoft Azureポータルにログインします。
-
「Azure Active directory admin center」ページで、「Microsoft Entra ID」を選択します。
-
「アプリケーション登録」および「新規登録」をクリックします。
-
次の情報を入力します
-
名前:
BaseDB-Server
と入力します。 -
このアプリケーションを使用したり、このAPIにアクセスできるユーザー: 「この組織ディレクトリ内のアカウントのみ」を選択します。
-
-
「登録」をクリックします。
-
「登録済アプリケーション」で、「APIの公開」をクリックします。
-
「アプリケーションID URI」の横にある「追加」をクリックし、「保存」をクリックします。他の値はデフォルトのままにします。
-
「スコープの追加」をクリックして、次の情報を入力します。
-
スコープ名:
session:scope:connect
と入力します。 -
誰が同意できますか?: 「Admins and users」と入力します。
-
管理同意表示名: 「データベースに接続」を選択します。
-
管理者の同意の説明: 「データベースに接続」を選択します。
-
ユーザー同意表示名: 「データベースに接続」を選択します。
-
ユーザー承諾の説明: 「データベースに接続」を選択します。
-
状態: 「有効」を選択します。
「スコープの追加」をクリックします。追加したら、「スコープ」の値を必ずコピーします。
-
-
「トークン構成」で、「トークン・タイプ」が「アクセス」である「請求」を「upn」として追加します。
ノート:これは、Microsoft Entra ID v2トークンの有効化の一部として必要です。v2トークンの詳細は、「Microsoft Entra ID v2アクセス・トークンの有効化」を参照してください。
v2トークンを取得するために、Microsoft Entra IDでアプリケーションのマニフェストを変更する必要がある場合もあります。
-
「アプリケーション・ロール」で、次のアプリケーション・ロールを追加します。
-
「概要」で、「アプリケーションID URI」、「ディレクトリ(テナント) ID」および「アプリケーション(クライアント) ID」をコピーします。
-
「ホーム」、「エンタープライズ・アプリケーション」、BaseDB「サーバー」にナビゲートし、「ユーザー/グループの追加」をクリックしてユーザーを割り当てます。
-
「ユーザー」で、ユーザーを選択します。アクセス・トークンの生成中に、この割り当てられたユーザーがシングル・サインオンに使用されます。
-
「ロールの選択」で、pdb.usersを選択し、「選択」および「割当て」をクリックします。
-
同じユーザーに対してステップ13と14を繰り返し、dba.roleを割り当てます。
タスク2.2: Microsoft Azureでのデータベース・クライアントの登録
-
データベース・クライアント・アプリケーションを次の情報で登録します。
-
名前:
BaseDB-Client
と入力します。 -
サポートされている勘定科目のタイプ: 「この組織ディレクトリ内の勘定科目のみ」を選択します。
-
リダイレクトURI: パブリック・クライアント/ネイティブ-
<http://localhost>
と入力します。
-
-
「管理」で、「API権限」および「権限の追加」をクリックします。「組織が使用するAPI」、「BaseDBサーバー」、「委任権限」、「権限」を「session:scope:connect」として選択し、「権限の追加」をクリックします。
-
「概要」で、「アプリケーションID URI」および「ディレクトリ(テナント)」IDをコピーします。
タスク2.3: Microsoft Azureのデータベース・サーバーの構成
次の問合せを実行して、Microsoft Azure ADをアイデンティティ・プロバイダとして構成し、データベース・グローバル・ユーザーおよびロールを作成します。
-
PDBデータベースの現在のアイデンティティ・プロバイダを確認します。
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
-
Microsoft Azureをアイデンティティ・プロバイダとして設定します。
ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE=AZURE_AD SCOPE=BOTH;
-
更新されたアイデンティティ・プロバイダを検証します。
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
-
アイデンティティ・プロバイダ構成を設定します。
application_id_uri
、tenant_id
およびapp_id
を、タスク2.1.11でコピーした値に置き換えます。ALTER SYSTEM SET IDENTITY_PROVIDER_CONFIG = '{ "application_id_uri": "api://b7ae5060-667c-47b7-83f8-71283df2a2f6" , "tenant_id": "ef2b4271-9238-4dcd-8c56-d3e915e37c6f", "app_id": "b7ae5060-667c-47b7-83f8-71283df2a2f6" }' SCOPE=BOTH;
-
データベースにグローバル・ユーザーおよびロールを作成します。
CREATE USER allusers IDENTIFIED GLOBALLY AS 'AZURE_ROLE=pdb.users'; CREATE USER hrapp IDENTIFIED GLOBALLY AS 'AZURE_ROLE=hr.app'; CREATE ROLE dba_azure IDENTIFIED GLOBALLY AS 'AZURE_ROLE=dba.role';
-
ユーザーおよびロールに権限を付与します。
GRANT CREATE SESSION TO allusers; GRANT CREATE SESSION TO hrapp; GRANT pdb_dba TO dba_azure;
タスク2.4: Microsoft Azureアクセス・トークンを生成するためのヘルパー・ユーティリティの構成
このタスクでは、Pythonユーティリティを使用して、ファイルに保存され、後でSQL*Plusによって参照されるアクセス・トークンを生成します。このユーティリティーを実行するには、MSALモジュールが必要です。
-
Get-Token.pyからPythonユーティリティを保存します。
-
次のPythonコードで、
scope
の値をタスク2.1.8でコピーした値に置き換えます。同様に、client_id
およびtenant_id
の値をタスク2.2.3の値で更新します。 -
次のコマンドを使用してPythonコードを実行します。
python ./get-token.py
-
すべてが正しく構成されている場合は、ユーザー認証のためにMicrosoft Azureポータルへのブラウザ・リダイレクトがトリガーされます。認証時に、アクセス・トークンを含むPythonコマンドが実行されたディレクトリにトークン・ファイルが生成されます。「アクセス・トークン」および「リフレッシュ・トークン」も端末ウィンドウに出力されます。
-
(オプション)、生成されたトークンを検証するには、jwt.ioに移動して、トークン文字列を「エンコード済」フィールドに貼り付けます。「デコード済」フィールドには、トークン文字列に関する情報が表示されます。
タスク2.5: SQL*PLUSを使用したログイン
-
SQL*PLUSを使用してMicrosoft Azureトークン・ログインをテストします。
sqlplus /nolog
conn /@(description= (retry_count=20) (retry_delay=3) (address= (protocol=tcps) (port=1522) (host=db23aigrid.sub10121249210.dbsecvcn.oraclevcn.com)) (connect_data=(service_name=DB23GRIDPDB.sub10121249210.dbsecvcn.oraclevcn.com))(security=(SSL_SERVER_DN_MATCH=TRUE)(TOKEN_AUTH=OAUTH)(TOKEN_LOCATION=/home/oracle)))
-
ログイン・ユーザーを確認します。
ノート:ログイン後、次の問合せを実行してユーザーのセッション固有の情報を取得できます。
- CURRENT_USER変数は、アクティブな現在のユーザーを返します。
- ALLUSERSは、Microsoft Entra IDアプリケーション・ロールを介して割り当てられた共有スキーマ・ユーザーです。
- AUTHENTICATED_IDENTITYは、Microsoft Entra IDからの認証済ユーザーを表します。
- ENTERPRISE_IDENTITYは、Microsoft Entra IDから認証されたユーザーのGUIDを返します。
- SESSION_ROLESは、ローカルに付与され、Microsoft Entra IDアプリケーション・ロールを介してグローバル・マッピングを介して付与されるロールの結合リストを返します。
-
次の問合せを実行して、現在のユーザーを確認します。
SELECT SYS_CONTEXT ('USERENV','CURRENT_USER') FROM DUAL;
出力:
SYS_CONTEXT('USERENV','CURRENT_USER') ALLUSERS
-
次の問合せを実行して、認証済ユーザーを確認します。
SELECT SYS_CONTEXT ('USERENV','AUTHENTICATED_IDENTITY') FROM DUAL;
出力:
SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY') <anujtrip.ai@gmail.com>
-
次の問合せを実行して、認証済ユーザーのGUIDを確認します。
SELECT SYS_CONTEXT ('USERENV','ENTERPRISE_IDENTITY') FROM DUAL;
出力:
SYS_CONTEXT('USERENV','ENTERPRISE_IDENTITY') 7eb35b90-dcxxx5-bc0b-48789368e9cf
-
次の問合せを実行して、アプリケーション・ロールを確認します。
SELECT * FROM SESSION_ROLES;
出力:
ROLE DBA_AZURE PDB_DBA CONNECT
次のステップ
Microsoft Entra IDベースの認証を正常に実装すると、一元化されたアイデンティティ・ガバナンスを通じてユーザー・ロールとアクセス・ポリシーを連携させることができます。共有スキーマのユーザーおよびロールにグローバル・マッピングを利用することで、アクセス制御を合理化し、管理の複雑さを軽減できます。さらに、セキュリティを強化し、組織ポリシーへのコンプライアンスを確保するために、ユーザー・セッションとアクセス・パターンを監視することが不可欠です。また、この統合を他のデータベースまたはアプリケーションに拡張して、企業全体で一貫したアイデンティティ管理を維持することも検討する必要があります。
関連リンク
承認
- 著者 - Anuj Tripathi (NAソリューション・エンジニアリング担当プリンシパル・クラウド・アーキテクト)、Alex Kovuru (NAソリューション・エンジニアリング担当プリンシパル・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Authenticate Oracle Database 23ai with Microsoft Entra ID
G33292-02
Copyright ©2025, Oracle and/or its affiliates.