首页 > 解决方案 > 如何使用 JDBC 配置通过 AD 密码连接到 Azure SQL DB?

问题描述

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

我按照使用 Azure AD Auth 进行连接的步骤进行操作。但是,我登录失败。

我假设这是因为没有在 JDBC url 中设置 'authentication' 属性,它只是直接对数据库进行身份验证(使用 CREATE USER <> FROM EXTERNAL PROVIDER 从指令创建的用户)?

有没有办法配置 spring 数据源/jdbc 库以在连接时使用正确的 Azure AD 身份验证(adal4j-1.6.3)?该示例在代码中执行此操作,但我无法找到正确的配置。

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

spring.datasource.url="jdbc:sqlserver://myServer.database.windows.net:1433;database=myDB;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;applicationName =我的应用程序;"

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

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

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

标签: springjdbcazure-active-directoryadal4j

解决方案


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

我没有使用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

pom.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>

推荐阅读