为 Oracle WebLogic Server 上的 Java 应用配置无密码数据库连接
本文介绍如何使用 Azure 门户在 Oracle WebLogic Server 产品/服务上为 Java 应用配置无密码数据库连接。
在本指南中,你将完成以下任务:
- 使用 Azure CLI 预配数据库资源。
- 在数据库中启用 Microsoft Entra 管理员。
- 预配用户分配的托管标识,并为其创建数据库用户。
- 使用 Azure 门户在 Oracle WebLogic 产品/服务中配置无密码数据库连接。
- 验证数据库连接。
产品/服务支持 PostgreSQL、MySQL 和 Azure SQL 数据库的无密码连接。
先决条件
在 Bash 环境中使用 Azure Cloud Shell。 确保 Azure CLI 版本为 2.43.0 或更高版本。
如果需要,请安装 Azure CLI 2.43.0 或更高版本,以运行 Azure CLI 命令。
- 如果使用本地安装,请使用
az login
命令通过 Azure CLI 登录。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。 - 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
- 运行
az version
以查找已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade
。
- 如果使用本地安装,请使用
确保用于登录并完成本文的 Azure 标识具有当前订阅中的所有者角色,或当前订阅中的参与者和 用户访问管理员角色。 有关 Azure 角色的概述,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)?。有关 Oracle WebLogic 市场产品/服务所需特定角色的详细信息,请参阅 Azure 内置角色。
创建资源组
使用 az group create
创建资源组。 由于资源组在订阅中必须是唯一的,因此请选择一个唯一名称。 拥有唯一名称的一种简单方法是使用首字母缩写、今天的日期和一些标识符的组合,例如 abc1228rg
。 此示例在 abc1228rg
位置创建一个名为 eastus
的资源组:
export RESOURCE_GROUP_NAME="abc1228rg"
az group create \
--name ${RESOURCE_GROUP_NAME} \
--location eastus
创建数据库服务器和数据库
使用 az mysql flexible-server create
命令创建灵活服务器。 此示例使用管理员用户 mysql20221201
和管理员密码 azureuser
创建一个名为 Secret123456
的灵活服务器。 将密码替换为你的密码。 有关详细信息,请参阅使用 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 灵活服务器如何与托管标识交互的信息,请参阅 Azure Database for 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
使用用户名 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 市场产品/服务配置无密码数据源连接。
首先,开始部署产品/服务的过程。 以下产品/服务支持无密码数据库连接:
- Azure Kubernetes 服务 上的 Oracle WebLogic Server (AKS)
- VM 上的 Oracle WebLogic Server 群集
- VM 上带有管理服务器的 Oracle WebLogic Server
- VM 上的 Oracle WebLogic Server 动态群集
如果要启用这些功能,请在 基本信息 窗格和其他窗格中输入所需的信息。 到达数据库窗格时,请按照以下步骤输入无密码配置:
- 对于连接到数据库?,请选择是。
- 在连接设置中,对于选择数据库类型,从下拉菜单中选择MySQL(支持无密码连接)。
- 对于 JNDI 名称,输入 testpasswordless 或预期值。
- 对于 DataSource 连接字符串,请输入在上一节中获取的连接字符串。
- 对于数据库用户名,输入托管标识的数据库用户名(
${IDENTITY_LOGIN_NAME}
的值)。 在此示例中,该值是 identity-contoso。 - 选择使用无密码数据源连接。
- 对于用户分配的托管标识,选择之前创建的托管标识。 在此示例中,其名称 myManagedIdentity。
连接设置部分应如以下屏幕截图所示,其中以 VM 上的 Oracle WebLogic Server 群集为例。
你已完成配置无密码连接。 可以继续填写以下窗格,或选择查看 + 创建,然后选择创建以部署产品/服务。
验证数据库连接
如果产品/服务部署无错误地完成,则数据库连接配置成功。
继续以 VM 上的 Oracle WebLogic Server 群集为例,部署完成后,在 Azure 门户中按照以下步骤查找管理控制台 URL。
- 找到在其中部署了 WLS 的资源组。
- 选择“设置”下面的“部署”。
- 选择持续时间最长的部署。 此部署应位于列表底部。
- 选择“输出”。
- WebLogic 管理控制台的 URL 是 adminConsoleUrl 输出的值。
- 复制 adminConsoleUrl
输出变量的值。 - 将该值粘贴到浏览器地址栏中,然后按 Enter 打开 WebLogic 管理控制台的登录页面。
使用以下步骤验证数据库连接:
使用基本信息窗格中提供的用户名和密码登录到 WebLogic 管理控制台。
在域结构下,选择服务、数据源,然后选择 testpasswordless。
选择监视选项卡,其中数据源的状态为正在运行,如以下屏幕截图所示:
选择测试选项卡,然后选择所需服务器旁边的单选按钮。
选择“测试数据源” 。 应会看到一条消息,指示测试成功,如以下屏幕截图所示:
清理资源
如果不需要这些资源,可以使用以下命令将其删除:
az group delete --name ${RESOURCE_GROUP_NAME}
az group delete --name <resource-group-name-that-deploys-the-offer>
后续步骤
通过以下链接详细了解如何运行 AKS 或虚拟机上的 WLS: