spring - 如何使用 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 的新手。谢谢。
解决方案
对我来说,以下属性和依赖项有效:
我没有使用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>
推荐阅读
- django - 如何使用django将choicefiled的值存储在数据库中
- postgresql - PostgreSQL:一个索引快,另一个索引慢
- c# - 将接口转换为泛型类(继承)
- spring - 使用 Spring Sleuth Zipkin 配置基本身份验证
- python - 弹跳球不会回来pygame
- java - 是否可以在不将通量转换为流的情况下从通量中获取第一个元素?
- c - 为结构数组中的结构成员分配内存后写入无效
- python - python 在 perl 程序中触发时给出 ImportError: No module named ""
- java - 带有 Spring Boot 和 PostgreSql 的 GORM
- python - 允许 API 调用在 Python 中的 EC2 实例上运行代码的最佳方法是什么?