Java 代码使用 Azure AD 集成身份验证连接 Azure SQL Server
2024-03-01 02:31:25
使用 Azure AD 集成身份验证从 Java 代码连接 Azure SQL Server
在当今云计算时代,安全地访问数据库至关重要。Azure SQL Server 作为一种流行的云数据库服务,提供了多种身份验证方法。其中,Azure AD 集成身份验证因其安全性和易用性而备受青睐。本文将深入探讨如何利用 Azure AD 集成身份验证,从 Java 代码连接到 Azure SQL Server。
Azure AD 集成身份验证:安全便捷的选择
Azure AD 集成身份验证允许应用程序使用 Azure AD 账户或服务主体进行身份验证,从而访问 Azure SQL Server。这种方法无需在应用程序中存储数据库凭据,降低了安全风险,也简化了身份管理。
实现步骤详解
为了实现 Azure AD 集成身份验证,我们需要完成以下几个关键步骤:
1. 创建 Azure AD 应用程序
首先,我们需要在 Azure AD 中创建一个应用程序,并为其分配访问 Azure SQL Server 的权限。这可以通过 Azure 门户或 Azure CLI 完成。在创建应用程序时,需要记录应用程序 ID 和租户 ID,以便后续使用。
2. 授予应用程序访问 Azure SQL Server 的权限
创建应用程序后,我们需要授予它访问 Azure SQL Server 的权限。这可以通过在 SQL Server 中创建一个包含应用程序 ID 的登录名,并将其添加到适当的数据库角色来完成。例如,我们可以将应用程序添加到 db_datareader 角色,以便它能够读取数据库中的数据。
3. 配置 Java 应用程序
接下来,我们需要配置 Java 应用程序,使其能够使用 Azure AD 集成身份验证连接到 Azure SQL Server。这可以通过以下步骤完成:
a. 添加 Azure Identity 库依赖项
首先,我们需要在 Java 项目中添加 Azure Identity 库的依赖项。这可以通过 Maven 或 Gradle 等构建工具完成。例如,在 Maven 项目中,我们可以将以下依赖项添加到 pom.xml 文件中:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.5.2</version>
</dependency>
b. 获取访问令牌
在 Java 代码中,我们需要使用 Azure Identity 库获取访问令牌。这可以通过以下代码完成:
// 替换为您的应用程序 ID 和租户 ID
String clientId = "your_application_id";
String tenantId = "your_tenant_id";
// 创建 DefaultAzureCredential 对象
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
.clientId(clientId)
.tenantId(tenantId)
.build();
// 获取访问令牌
AccessToken accessToken = credential.getToken(new String[] {"https://database.windows.net/.default"}).block();
c. 连接到 Azure SQL Server
获取访问令牌后,我们可以使用它连接到 Azure SQL Server。这可以通过以下代码完成:
// 替换为您的 SQL Server 名称和数据库名称
String serverName = "your_server_name.database.windows.net";
String databaseName = "your_database_name";
// 创建连接字符串
String connectionUrl = String.format("jdbc:sqlserver://%s:1433;databaseName=%s;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;", serverName, databaseName);
// 创建 SQLServerDataSource 对象
SQLServerDataSource dataSource = new SQLServerDataSource();
dataSource.setURL(connectionUrl);
dataSource.setAccessToken(accessToken.getToken());
// 获取连接
Connection connection = dataSource.getConnection();
d. 执行 SQL 查询
连接到 Azure SQL Server 后,我们可以执行 SQL 查询来访问数据库中的数据。例如,我们可以使用以下代码查询名为 "users" 的表:
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " " + resultSet.getString("name"));
}
常见问题解答
1. 我无法获取访问令牌。
这可能是由于以下原因导致的:
- 应用程序 ID 或租户 ID 不正确。
- 应用程序没有访问 Azure SQL Server 的权限。
- Azure Identity 库配置不正确。
2. 我收到 "登录失败" 错误。
这可能是由于以下原因导致的:
- SQL Server 登录名不存在或密码不正确。
- 登录名没有访问数据库的权限。
- 网络连接问题。
3. 如何刷新访问令牌?
Azure Identity 库会自动刷新访问令牌。您无需手动刷新令牌。
4. 如何禁用 Azure AD 集成身份验证?
您可以通过在 SQL Server 中删除应用程序登录名或将其从数据库角色中移除来禁用 Azure AD 集成身份验证。
5. 我应该使用哪种 Azure Identity 库版本?
建议使用最新版本的 Azure Identity 库,以获得最新的功能和安全更新。
通过本文的介绍,我们了解了如何使用 Azure AD 集成身份验证从 Java 代码连接到 Azure SQL Server。这种方法不仅安全可靠,而且易于配置和使用。希望本文能帮助您更好地保护您的云数据库。