当前位置: 首页 > 知识库问答 >
问题:

如何使用JDBC配置使用AD密码连接到AzureSQLDB?

楚俊杰
2023-03-14

我正在尝试使用Azure AD(应用程序作为DB用户)从Spring Boot(2.0.1)Web应用程序连接到Azure SQL DB,但似乎无法连接点。

我遵循了使用Azure AD Auth进行连接的步骤。然而,我得到一个失败的登录。

我假设这是因为没有在JDBC url中设置“身份验证”属性,它只是直接对数据库进行身份验证(用户使用CREATE USER创建

有没有办法在连接时配置spring数据源/jdbc库以使用正确的Azure AD身份验证(adal4j-1.6.3)?该示例在代码中实现了这一点,但我在找到正确的配置时遇到了困难。

我尝试使用“authentication=ActiveDirectoryPassword”,但不断收到“AADSTS50034:目录中不存在用户帐户”错误。

Spring数据源。url=“jdbc:sqlserver://myServer.database.windows.net:1433;数据库=myDB;加密=真;trustServerCertificate=false;hostNameInCertificate=*。数据库窗户。网loginTimeout=30;applicationName=myApp;"

spring.datasource.username: <user>
spring.datasource.accessToken: <key>

更大的目标是保护我对特定应用程序的数据库访问。我在服务器上添加了我的应用程序作为阅读器,理想情况下,我会作为该应用程序进行身份验证,以跟踪该应用程序的使用情况/分析/等。

如果这太离谱了,我很抱歉,我是Azure和Oauth的新手。谢谢

共有3个答案

申高卓
2023-03-14

对我来说,以下属性和依赖项有效:

而不是使用adal4j我已经使用msal4j(微软推荐)

spring:
  datasource:
    url: jdbc:sqlserver://<Azure SQL Server Name>.database.windows.net:1433;databaseName=<DB Name>;encrypt=true;loginTimeout=30
    username: <UserName>
    password: <Password>
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    hikari:
      data-source-properties:
        authentication: ActiveDirectoryPassword

波姆。xml

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>9.2.1.jre8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.microsoft.azure/msal4j -->
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.9.1</version>
</dependency>
洪英豪
2023-03-14

包括以下配置的依赖adal4j会有所帮助

spring.datasource.username=\<your AD username\>
spring.datasource.password=\<your AD password\>
spring.datasource.hikari.data-source-properties.authentication=ActiveDirectoryPassword
漆雕稳
2023-03-14

无法将Spring配置为在连接到AzureSQLDB时使用Azure AD中的应用程序ID密钥代替用户名/密码。我找到的唯一方法是修改代码并创建一个@Bean方法,该方法返回一个SQLServerDataSource,在那里我手动检索客户端凭据访问令牌并将其传递到数据源。

使用访问令牌连接-演示如何检索令牌并在数据源上设置

创建自定义数据源-演示如何使用Spring创建和使用自定义数据源

还要注意令牌管理(见我的另一个问题)。

 类似资料:
  • 几天前我租了一个VPS,和它乱搞了一段时间。有一件事我真的很纠结:获得一个简单的文件交换系统,最终我想要建立的网站。理想情况下,我只想在我的MacBook上有一个文件夹,我可以用Aptana Studio3(我真的很喜欢他们的IDE)与Linux服务器(最好是/var/www/)上的一个相同的文件夹直接链接。 到目前为止,我的主要问题是我无法(通过Aptana或其他文件系统,如FileZilla)

  • 在通常的场景中,连接字符串包含纯文本的密码,但这可以被Wireshark捕获,因此我想在一个连接字符串中使用加密的密码。我从Postgres文档中找到了以下摘录:

  • 问题内容: 文件包含和及其说明(+ )。 是否可以依靠上述文件建立连接?(仅提供数据库名称即可): 为了找到该文件,我必须知道默认的Oracle主目录,我需要在Windows注册表中检入然后具有所有文件,然后检查哪个文件首先出现在上。有没有办法在客户端计算机上自动找到此文件? 问题答案: 我什至不知道可以在瘦驱动程序中使用tnsnames,但是显然它是在版本10中添加的: http://docs.

  • 问题内容: 我正在尝试使用JDBC连接到SQL Server 2008。我的SQL Server 2008带有Windows身份验证。 我的代码是 我最终得到ClassNotFoundException。 堆栈跟踪为 问题答案: ClassNotFoundException可能意味着您的类路径中没有可用的SQL * Server驱动程序

  • 我在Spring JDBC中使用Spring Boot 1.5.4。 使用Spring JDBC的Spring Boot微服务在尝试执行HTTP PUT时(在一群用户尝试执行HTTP PUT后)会出现以下问题,该问题会逐渐进入Spring JDBC调用: pom.xml: 我猜我需要设置一个JDBC连接池... 在我的application.properties设置中,(我有两个不同的数据库——一