在 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和管理员密码Secret123456mysql20221201灵活服务器。 将密码替换为你的密码。 有关详细信息,请参阅 使用 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. 对于 DataSource 连接ion String,输入在上一节中获取的连接字符串。
  5. 对于 数据库用户名,输入托管标识的数据库用户名(值 ${IDENTITY_LOGIN_NAME})。 在此示例中,值为 identity-contoso
  6. 选择“ 使用无密码数据源连接”。
  7. 对于 用户分配的托管标识,请选择之前创建的托管标识。 在此示例中,其名称为 myManagedIdentity.

连接设置部分应如以下屏幕截图所示,该屏幕截图使用 VM 上的 Oracle WebLogic Server 群集作为示例。

显示 VM 上“创建 Oracle WebLogic Server”页的“配置数据库”窗格的Azure 门户屏幕截图。

现已完成无密码连接配置。 可以继续填写以下窗格,或选择“查看 + 创建”,然后选择创建”以部署产品/服务。

验证数据库连接

如果产品/服务部署完成且没有错误,则成功配置数据库连接。

继续以 VM 上的 Oracle WebLogic Server 群集为例,部署完成后,请按照Azure 门户中的以下步骤查找管理员控制台 URL。

  1. 查找在其中部署 WLS 的资源组。
  2. 选择“设置”下面的“部署”。
  3. 选择持续时间最长的部署。 此部署应位于列表底部。
  4. 选择“输出”。
  5. WebLogic 管理员istration 控制台的 URL 是 adminConsoleUrl 输出的值
  6. 复制输出变量 adminConsoleUrl的值。
  7. 将该值粘贴到浏览器地址栏中,然后按 Enter 打开 WebLogic 管理员istration 控制台的登录页。

使用以下步骤验证数据库连接。

  1. 使用“基本信息”窗格中提供的用户名和密码登录到 WebLogic 管理员istration 控制台。

  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: