在 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 创建 Azure Database for MySQL 灵活服务器

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 命令将标识的客户端 ID 存储在 shell 变量中。

# 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 的适用于 Linux 的 Windows 子系统 (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

使用用户名 identity-contoso 进行身份验证时,托管标识 myManagedIdentity 现在有权访问数据库。

如果不再希望从该 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 市场产品/服务配置无密码数据源连接。

首先,开始部署产品/服务的过程。 以下产品/服务支持无密码数据库连接:

如果要启用这些功能,请填写基本信息窗格和其他窗格中所需的信息。 到达数据库窗格时,请按照以下步骤填写无密码配置。

  1. 对于连接到数据库?,请选择
  2. 连接设置下,对于选择数据库类型,打开下拉菜单,然后选择 MySQL(支持无密码连接)
  3. 对于 JNDI 名称,输入 testpasswordless 或预期值。
  4. 对于数据源连接字符串,输入在上一节中获取的连接字符串。
  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: