在 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 命令。
- 如果使用的是本地安装,请通过 Azure CLI 使用 az login 命令登录。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
- 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
- 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
确保用于登录并完成本文的 Azure 标识具有当前订阅中的所有者角色,或当前订阅中的参与者和 用户访问管理员角色。 有关 Azure 角色的概述,请参阅什么是 Azure 基于角色的访问控制 (Azure RBAC)?。有关 Oracle WebLogic 市场产品/服务所需特定角色的详细信息,请参阅 Azure 内置角色。
创建资源组
使用 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 市场产品/服务配置无密码数据源连接。
首先,开始部署产品/服务的过程。 以下产品/服务支持无密码数据库连接:
- Azure Kubernetes 服务上的 Oracle WebLogic Server
- 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: