我正在尝试使用我的 AD 帐户通过 Java 8、JDBC 驱动程序和我的 accessToken 连接到 Azure SQL。
当我使用 AD 帐户使用 Data Studio 时,我可以成功连接到 Azure SQL DB。
但是当我使用我的 Java 程序时,它给了我这个错误:
请求处理失败;嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException: 用户 '' 登录失败
我的代码摘要:
SQLServerDataSource ds = new SQLServerDataSource();
ds.setServerName("NAME.database.windows.net");
ds.setDatabaseName("db-name");
ds.setAccessToken(accessToken);
ds.setEncrypt(true);
ds.setTrustServerCertificate(true);
try (Connection connection = ds.getConnection();
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
if (rs.next()) {
System.out.println("dbResults => You have successfully logged on as: " + rs.getString(1));
res = rs.getString(1);
}
}
经过评论中的讨论,我们发现我们需要更改获取访问令牌时使用的范围。
指定了“User.Read.All”,这是缩写形式"https://graph.microsoft.com/User.Read.All"
。
这意味着将返回 Microsoft Graph API 访问令牌,该令牌不适用于 Azure SQL DB。
将范围更改为"https://database.windows.net/.default"
解决了问题。
这将获取 Azure SQL DB 的访问令牌,以及应用程序注册在 Azure SQL DB 上拥有的静态权限。
文档:https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)