在 Oracle WebLogic Server 上設定 Java 應用程式的無密碼資料庫連線

本文說明如何使用 Azure 入口網站,在 Oracle WebLogic Server 上設定 Java 應用程式的無密碼資料庫連線。

在本指南中,您會完成下列工作:

  • 使用 Azure CLI 布建資料庫資源。
  • 在資料庫中啟用Microsoft Entra 系統管理員。
  • 布建使用者指派的受控識別,併為它建立資料庫使用者。
  • 使用 Azure 入口網站 在 Oracle WebLogic 供應項目中設定無密碼資料庫連線。
  • 驗證資料庫連接。

提供支援 PostgreSQL、MySQL 和 Azure SQL 資料庫的無密碼連線。

必要條件

建立資源群組

使用 az group create 來建立資源群組。 因為資源群組在訂用帳戶內必須是唯一的,所以請挑選唯一的名稱。 擁有唯一名稱的簡單方式是使用您的姓名縮寫、今天日期與一些識別碼的組合。 例如, abc1228rg。 此範例會在位置中eastus建立名為 abc1228rg 的資源群組:

export RESOURCE_GROUP_NAME="abc1228rg"
az group create \
    --name ${RESOURCE_GROUP_NAME} \
    --location eastus

建立資料庫伺服器和資料庫

使用 az mysql flexible-server create 命令建立彈性伺服器。 此範例會使用系統管理員使用者azureuser和系統管理員密碼Secret123456,建立名為 mysql20221201 的彈性伺服器。 將密碼取代為您的密碼。 如需詳細資訊,請參閱使用 Azure CLI 建立 適用於 MySQL 的 Azure 資料庫 彈性伺服器。

export MYSQL_NAME="mysql20221201"
export MYSQL_ADMIN_USER="azureuser"
export MYSQL_ADMIN_PASSWORD="Secret123456"

az mysql flexible-server create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_NAME \
    --location eastus \
    --admin-user $MYSQL_ADMIN_USER \
    --admin-password $MYSQL_ADMIN_PASSWORD \
    --public-access 0.0.0.0 \
    --tier Burstable \
    --sku-name Standard_B1ms

使用 az mysql flexible-server db create 建立資料庫。

export DATABASE_NAME="contoso"

# create mysql database
az mysql flexible-server db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $MYSQL_NAME \
    --database-name $DATABASE_NAME

當命令完成時,您應該會看到類似下列範例的輸出:

Creating database with utf8 charset and utf8_general_ci collation
{
  "charset": "utf8",
  "collation": "utf8_general_ci",
  "id": "/subscriptions/contoso-hashcode/resourceGroups/abc1228rg/providers/Microsoft.DBforMySQL/flexibleServers/mysql20221201/databases/contoso",
  "name": "contoso",
  "resourceGroup": "abc1228rg",
  "systemData": null,
  "type": "Microsoft.DBforMySQL/flexibleServers/databases"
}

設定資料庫Microsoft Entra 系統管理員

既然您已建立資料庫,您必須準備好支持無密碼連線。 無密碼連線需要 Azure 資源和Microsoft Entra 驗證的受控識別組合。 如需 Azure 資源的受控識別概觀,請參閱 什麼是 Azure 資源的受控識別?

如需 MySQL 彈性伺服器如何與受控識別互動的資訊,請參閱 使用 Microsoft Entra ID 搭配 MySQL 進行驗證。

下列範例會將目前的 Azure CLI 使用者設定為 Microsoft Entra 系統管理員帳戶。 若要啟用 Azure 驗證,必須將身分識別指派給 MySQL 彈性伺服器。

首先,使用 az identity create 建立受控識別,並使用 az mysql flexible-server identity assign 將身分識別指派給 MySQL 伺服器

export MYSQL_UMI_NAME="id-mysql-aad-20221205"

# create a User Assigned Managed Identity for MySQL to be used for AAD authentication
az identity create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_UMI_NAME

## assign the identity to the MySQL server
az mysql flexible-server identity assign \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $MYSQL_NAME \
    --identity $MYSQL_UMI_NAME

然後,使用 az mysql flexible-server ad-admin create,將目前的 Azure CLI 用戶設定為 Microsoft Entra 系統管理員帳戶。

export CURRENT_USER=$(az account show --query user.name --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)

az mysql flexible-server ad-admin create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $MYSQL_NAME \
    --object-id $CURRENT_USER_OBJECTID \
    --display-name $CURRENT_USER \
    --identity $MYSQL_UMI_NAME

建立使用者指派的受控識別

接下來,在 Azure CLI 中,使用 az identity create 命令在您的訂用帳戶中建立 身分識別。 您可以使用此受控識別來連線到您的資料庫。

az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name myManagedIdentity

若要在下列步驟中設定身分識別,請使用 az identity show 命令,將身分識別的用戶端標識元儲存在殼層變數中。

# Get client ID of the user-assigned identity
export CLIENT_ID=$(az identity show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name myManagedIdentity \
    --query clientId \
    --output tsv)

為您的受控識別建立資料庫使用者

現在,以 Microsoft Entra 系統管理員使用者身分連線到 MySQL 資料庫,併為受控識別建立 MySQL 使用者。

首先,您必須建立防火牆規則,才能從 CLI 用戶端存取 MySQL 伺服器。 執行下列命令以取得您目前的IP位址。

export MY_IP=$(curl http://whatismyip.akamai.com)

如果您正在使用已啟用 VPN 的 Windows 子系統 Linux 版 (WSL),下列命令可能會傳回不正確的 IPv4 位址。 取得 IPv4 位址的其中一種方式是流覽 whatismyipaddress.com。 在任何情況下,請將環境變數 MY_IP 設定為您要從中聯機到資料庫的IPv4位址。

使用 az mysql flexible-server firewall-rule create 建立暫存防火牆規則。

az mysql flexible-server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_NAME \
    --rule-name AllowCurrentMachineToConnect \
    --start-ip-address ${MY_IP} \
    --end-ip-address ${MY_IP}

然後,準備 .sql 檔案,為受控識別建立資料庫使用者。 下列範例會新增具有登入名稱 identity-contoso 的使用者,並授與使用者存取資料庫 contoso的許可權。

export IDENTITY_LOGIN_NAME="identity-contoso"

cat <<EOF >createuser.sql
SET aad_auth_validate_oids_in_tenant = OFF;
DROP USER IF EXISTS '${IDENTITY_LOGIN_NAME}'@'%';
CREATE AADUSER '${IDENTITY_LOGIN_NAME}' IDENTIFIED BY '${CLIENT_ID}';
GRANT ALL PRIVILEGES ON ${DATABASE_NAME}.* TO '${IDENTITY_LOGIN_NAME}'@'%';
FLUSH privileges;
EOF

使用 az mysql flexible-server execute 命令執行.sql檔案。 您可以使用 az account get-access-token 命令取得存取令牌。

export RDBMS_ACCESS_TOKEN=$(az account get-access-token \
    --resource-type oss-rdbms \
    --query accessToken \
    --output tsv) 

az mysql flexible-server execute \
    --name ${MYSQL_NAME} \
    --admin-user ${CURRENT_USER} \
    --admin-password ${RDBMS_ACCESS_TOKEN} \
    --file-path "createuser.sql"

系統可能會提示您安裝 rdbms-connect 擴充功能,如下列輸出所示。 按 y 以繼續。 如果您未與使用者合作 root ,則需要輸入用戶密碼。

The command requires the extension rdbms-connect. Do you want to install it now? The command will continue to run after the extension is installed. (Y/n): y
Run 'az config set extension.use_dynamic_install=yes_without_prompt' to allow installing extensions without prompt.
This extension depends on gcc, libpq-dev, python3-dev and they will be installed first.
[sudo] password for user:

如果.sql檔案執行成功,您就會找到類似下列範例的輸出:

Running *.sql* file 'createuser.sql'...
Successfully executed the file.
Closed the connection to mysql20221201

使用使用者名稱 進行驗證時,受控識別 myManagedIdentity 現在具有資料庫的存取權 identity-contoso

如果您不想再從這個IP位址存取伺服器,您可以使用下列命令來移除防火牆規則。

az mysql flexible-server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_NAME \
    --rule-name AllowCurrentMachineToConnect \
    --yes

最後,使用下列命令來取得您在下一節中使用的 連接字串。

export CONNECTION_STRING="jdbc:mysql://${MYSQL_NAME}.mysql.database.azure.com:3306/${DATABASE_NAME}?useSSL=true"
echo ${CONNECTION_STRING}

在 Azure VM 上設定 Oracle WebLogic Server 的無密碼資料庫連線

本節說明如何使用 Oracle WebLogic Server 的 Azure Marketplace 供應項目來設定無密碼數據源連線。

首先,開始部署供應項目的程式。 下列提供支援無密碼資料庫連線:

如果您想要啟用功能,請在 [基本] 窗格和其他窗格中填入必要資訊。 當您到達 [ 資料庫] 窗格時,請填入無密碼設定,如下列步驟所示。

  1. 針對 [ 連線到資料庫?],選取 [ ]。
  2. 在 [連線設定] 底下,針對 [選擇資料庫類型],開啟下拉功能表,然後選取 [MySQL](支持無密碼連線)。
  3. 針對 JNDI 名稱,輸入 testpasswordless 或您的預期值。
  4. 針對 DataSource 連接字串,輸入您在上一節中取得的 連接字串。
  5. 針對 [ 資料庫使用者名稱],輸入受控識別的資料庫用戶名稱(值 ${IDENTITY_LOGIN_NAME})。 在這裡範例中,值為 identity-contoso
  6. 選取 [ 使用無密碼數據源連線]。
  7. 針對 [ 使用者指派的受控識別],選取您先前建立的受控識別。 在這裡範例中,其名稱為 myManagedIdentity

[連線設定] 區段看起來應該類似下列螢幕快照,其使用 VM 上的 Oracle WebLogic Server 叢集作為範例。

Azure 入口網站 的螢幕快照,其中顯示 [在 VM 上建立 Oracle WebLogic Server] 頁面上的 [設定資料庫] 窗格。

您現在已完成設定無密碼連線。 您可以繼續填寫下列窗格,或選取 [檢閱 + 建立],然後選取 [建立] 來部署供應專案。

確認資料庫連線

如果供應專案部署完成且沒有錯誤,資料庫連線就會成功設定。

繼續以 VM 上的 Oracle WebLogic Server 叢集為例,部署完成之後,請依照 Azure 入口網站 中的下列步驟來尋找管理控制台 URL。

  1. 尋找您部署 WLS 的資源群組。
  2. 在 [設定] 下方,選取 [部署]。
  3. 選取持續時間最長的部署。 此部署應該位於清單底部。
  4. 選取 [輸出]
  5. WebLogic 管理控制台的 URL 是 adminConsoleUrl 輸出的值
  6. 複製輸出變數 adminConsoleUrl的值。
  7. 將值貼到瀏覽器網址列中,然後按 Enter 以開啟 WebLogic 管理主控台的登入頁面。

使用下列步驟來驗證資料庫連線。

  1. 使用您在 [基本] 窗格上提供的使用者名稱和密碼登入 WebLogic 管理控制台。

  2. 在 [定義域結構] 底下,選取 [服務]、[數據源],然後選取 [testpasswordless]。

  3. 選取 [ 監視] 索引標籤,其中數據源的狀態為 [正在執行],如下列螢幕快照所示。

  4. 選取 [ 測試] 索引標籤,然後選取所需伺服器旁邊的單選按鈕。

  5. 選取 [ 測試數據源]。 您應該會看到訊息,指出測試成功,如下列螢幕快照所示。

    WebLogic 控制台入口網站的螢幕快照,其中顯示數據源的成功測試。

清除資源

如果您不需要這些資源,您可以執行下列命令來刪除這些資源:

az group delete --name ${RESOURCE_GROUP_NAME}
az group delete --name <resource-group-name-that-deploys-the-offer>

下一步

遵循下列連結,以深入了解如何在 AKS 或虛擬機器上執行 WLS: