在 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)
为托管标识创建数据库用户
首先,需要创建防火墙规则才能从 CLI 客户端访问数据库服务器。 运行以下命令,以获取当前的 IP 地址:
export MY_IP=$(curl http://whatismyip.akamai.com)
如果使用的是启用了 VPN 的适用于 Linux 的 Windows 子系统 (WSL),则以下命令可能会返回错误的 IPv4 地址。 获取 IPv4 地址的一种方法是访问 whatismyipaddress.com。 将环境变量 MY_IP
设置为要从中连接到数据库的 IPv4 地址。 稍后请使用此 IP 地址配置数据库防火墙。
以 Microsoft Entra 管理员用户身份连接到 MySQL 数据库,并为托管标识创建 MySQL 用户。
使用 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 或预期值。
- 对于“数据源连接字符串”,输入在上一节中获取的连接字符串。
- 对于数据库用户名,输入托管标识的数据库用户名(
${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: