附註:
- 此教學課程需要存取 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) 整合,以啟用對資料庫的安全無密碼存取。透過此設定,使用者和服務可以透過 Single Sign-On (SSO) 使用其 Microsoft Entra ID 證明資料連線至資料庫。
認證會透過 Microsoft Entra ID 所發出的 OAuth2 存取權杖進行處理。此權杖 (包括使用者的識別和存取詳細資訊) 會傳送至 Oracle Database。資料庫從屬端會先驗證權杖的格式和過期後,再允許存取,確保連線程序安全且精簡。
我們為什麼需要這個?
隨著組織越來越重視安全性,管理對敏感資料的存取變得至關重要。Oracle Database 與 Microsoft Entra ID 合作,允許不使用密碼進行安全驗證,從而利用現代化的身分識別管理系統實現無縫、可擴展和強大的存取控制。此整合支援廣泛的 Oracle 部署,包括 Oracle Autonomous Database、Oracle Exadata 和 Oracle Base Database Service,可確保在不同環境中一致且安全的存取。
資料庫從屬端和工具
支援 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 認證程式庫簡介 (MSAL) 。
本教學課程將引導您完成設定 Oracle Base Database 23ai (包括 TLS 設定) 的 Microsoft Entra ID 認證。請參閱內部部署、Exadata、DBaaS 或自治式資料庫類型的特定文件。請注意,已為 Autonomous Database 預先設定 TLS,因此您可以略過該步驟。
適用對象
Oracle Database 管理員和 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 管理員。
目標
-
設定資料庫的「傳輸層安全 (TLS)」。
-
向 Microsoft Azure 註冊資料庫伺服器。
-
向 Microsoft Azure 註冊資料庫用戶端。
-
設定 Microsoft Azure 整合的資料庫。
-
使用協助程式命令檔設定從屬端。
-
使用 SQL*Plus 測試連線。
必要條件
-
具有管理權限的 Microsoft Azure 帳戶。
-
Oracle Base Database 服務上的 Oracle Database 23ai。
-
網路設定值:
-
Oracle Database 伺服器必須能夠要求 Microsoft Entra ID 公開金鑰,以驗證已發出之記號的真實性和有效性,並確認它們是由信任的授權機構所發出。
-
視網路連線設定而定,必須設定適當的路由和安全規則。NAT 閘道可用於路由輸出流量,輸出規則應限制為只有 Microsoft Azure 公用 IP 範圍 (超過連接埠 443)。
-
-
TLS 組態:
- 將 Microsoft Entra ID 記號從資料庫從屬端傳送至資料庫伺服器時,必須建立 TLS 連線。在本教學課程中,我們將設定單向 TLS (使用自行簽署的根憑證設定 TLS),其中只有伺服器會提供憑證給用戶端以進行自我認證。用戶端不需要有不同的用戶端憑證來向伺服器進行自我驗證。
-
設定在 Oracle Linux 上執行的 Oracle 從屬端軟體 23ai。
-
使用 MSAL 模組安裝 Python 3。6 或更新版本。雖然 Python 3。6 仍可運作,但建議的版本是
3.7+
。使用pip
來安裝必要的模組。
作業 1:設定 Oracle Database 23ai 的 TLS
作業 1.1:準備作業系統 (OS) 以進行 TLS 組態
-
登入資料庫伺服器並切換至
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 公事包和憑證
-
建立並設定根公事包。
-
建立公事包根目錄。
[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:設定 Oracle 的 TLS 通訊
-
編輯單向 TLS 的
sqlnet.ora
並附加下列行。[oracle@db23aigrid ~]$ cd $ORACLE_HOME/network/admin [oracle@db23aigrid ~]$ vi sqlnet.ora
SSL_CLIENT_AUTHENTICATION = FALSE
-
編輯
tnsnames.ora
,並確定已為 PDB 資料庫新增 TCP 與 TCPS 的項目。根據您的環境調整值:
[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 install 。
從資料庫伺服器複製憑證檔案。
請依照下列步驟設定用戶端主機:
-
從資料庫伺服器複製憑證和公事包檔案。您可以使用任何偏好的檔案傳輸工具,將這些檔案從資料庫伺服器移至用戶端。
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 目錄管理中心頁面中,選取 Microsoft Entra ID 。
-
按一下應用程式註冊和新註冊。
-
請輸入下列資訊。
-
名稱:輸入
BaseDB-Server
。 -
誰可以使用此應用程式或存取此 API?:選取僅限此組織目錄中的帳戶。
-
-
按一下註冊。
-
在已註冊的應用程式底下,按一下顯示 API 。
-
按一下應用程式 ID URI 和儲存旁邊的新增。保留其他值作為預設值。
-
按一下新增範圍,然後輸入下列資訊。
-
範圍名稱:輸入
session:scope:connect
。 -
誰可以同意?: 輸入管理員和使用者。
-
管理許可顯示名稱:選取連線至資料庫。
-
管理許可描述:選取連線至資料庫。
-
使用者同意顯示名稱:選取連線至資料庫。
-
使用者同意描述:選取連線至資料庫。
-
狀態:選取已啟用。
按一下新增範圍。新增之後,請務必複製範圍的值。
-
-
在記號組態底下,將宣告新增為具有記號類型的 upn 作為存取。
注意:啟用 Microsoft Entra ID v2 記號時必須提供此資訊。如需有關 v2 記號的詳細資訊,請參閱啟用 Microsoft Entra ID v2 存取記號。
您可能也需要變更 Microsoft Entra ID 中的應用程式資訊清單,才能取得 v2 權杖。
-
在應用程式角色底下,新增下列應用程式角色。
-
在概觀中,複製應用程式 ID URI 、目錄 (租用戶) ID 及應用程式 (從屬端) ID 。
-
瀏覽至首頁、企業應用程式、BaseDB 伺服器,然後按一下新增使用者 / 群組來指派使用者。
-
在使用者下,選取您的使用者。產生存取權杖時,此指定的使用者將用於單一登入。
-
在選取角色下,選取 pdb.users ,按一下選取與指派。
-
為相同使用者重複步驟 13 與 14,並指派 dba.role 。
作業 2.2:在 Microsoft Azure 中註冊資料庫從屬端
-
請以下列資訊註冊資料庫從屬端 App。
-
名稱:輸入
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 模組。
-
從此處儲存 Python 公用程式: Get-Token.py 。
-
在下列 Python 程式碼中,以「工作 2.1.8」中複製的值取代
scope
的值。同樣地,使用工作 2.2.3 的值更新client_id
和tenant_id
的值。 -
使用下列指令執行 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
-
執行下列查詢以驗證 App 角色。
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
G33296-02
Copyright ©2025, Oracle and/or its affiliates.