com.microsoft.sqlserver.jdbc.SQLServerException:MSI 令牌失败:无法从 MSI 端点获取令牌

2023-12-26

我想使用应用服务 API(Java) 和 MSI(托管服务身份)身份验证来访问 Azure SQL 数据库。

我试图找出如何从适用于 Java 的 Azure 应用服务将 Azure sql 与 MSI 连接。

这是我正在使用的连接字符串。

jdbc:sqlserver://mysqldb.database.windows.net:1433;database=TestDB;Authentication=ActiveDirectoryMsi;加密=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;

这是我使用的步骤:

  1. 创建AAD组
  2. 将 Azure Web 应用程序的 MI(托管身份)添加到此 AAD 组
  3. 将此组作为 Active Directory 管理员添加到 Azure SQL Server
  4. 创建用户并为该组分配角色。

    CREATE USER [myAADgroup] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [myAADgroup];
    ALTER ROLE db_datawriter ADD MEMBER [myAADgroup];
    ALTER ROLE db_ddladmin ADD MEMBER [myAADgroup];
    
  5. JDBC 驱动程序的连接字符串。


我在本地测试了一下,成功了。以下是我的步骤供大家参考:

1. 为您的 Web 应用、函数应用或 VM 启用托管标识

在这里,我将使用函数应用程序。

然后将状态设置为打开并保存。您将获得一个对象 ID。

2.创建Azure AD组,并添加身份为成员

3. 在门户上配置 Azure SQL Server

4. 连接数据库

在这里,我将我的应用程序部署到函数应用程序。例子:

public class Function {

    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage run(@HttpTrigger(name = "req", methods = {
            HttpMethod.GET }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {

        String result = "";

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("jacksqldemo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("sqldemo"); // Replace with your database name
        ds.setAuthentication("ActiveDirectoryMSI");

        try (Connection connection = ds.getConnection(); 
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                String s = rs.getString(1);
                context.getLogger().info("You have successfully logged on as: " + s);
                result += "You have successfully logged on as: " + s;
            }
        }catch(Exception e){
            context.getLogger().log(Level.WARNING, e.getMessage(),e);
        }
        return request.createResponseBuilder(HttpStatus.OK).body(result).build();
    }
}

最后,我可以连接到 Azure SQL:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

com.microsoft.sqlserver.jdbc.SQLServerException:MSI 令牌失败:无法从 MSI 端点获取令牌 的相关文章

  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 如何使用 Java 引用释放 Java Unsafe 内存?

    Java Unsafe 类允许您按如下方式为对象分配内存 但是使用此方法在完成后如何释放分配的内存 因为它不提供内存地址 Field f Unsafe class getDeclaredField theUnsafe Internal re
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • Mysql获取特定表的最后一个id

    我必须从特定的插入表中获取最后的插入 ID 可以说我有这个代码 INSERT INTO blahblah test1 test 2 VALUES test1 test2 INSERT INTO blahblah2 test1 test 2
  • 在java程序中使用c++ Dll

    我正在尝试使用System LoadLibrary 使用我用 C 编写的一个简单的 dll UseDllInJava java import com sun jna Library import com sun jna Native imp
  • 按每月时间为用户标记标签

    数据源 User ID Visit Date 1 2020 01 01 12 29 15 1 2020 01 02 12 30 11 1 2020 04 01 12 31 01 2 2020 05 01 12 31 14 Problem 我
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • 选定的非聚合值必须是关联组的一部分

    我在 Teradata 中有两个表 Table A 和 Table B 它们之间是 LEFT JOIN 之后我将创建 SELECT 语句 其中包含两个表中的属性 SELECT attribute 1 attribute 2 attribut
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • 设置 TreeSet 的大小

    有没有办法像数组一样对 Java 集合中的 TreeSet 进行大小限制 例如我们在数组中 anArray new int 10 数组具有固定长度 在创建数组时必须指定该长度 A TreeSet当您向其中添加元素时会自动增长 您无法设置其大

随机推荐

  • C++“内存屏障”示例[重复]

    这个问题在这里已经有答案了 我正在阅读有关 volatile 关键字的问题的答案 https stackoverflow com a 2485177 997112 https stackoverflow com a 2485177 9971
  • C# 中任意等级数组的索引

    我需要迭代任意排名的数组 这是为了阅读和写作 所以GetEnumerator不管用 Array SetValue object int 不适用于多维数组 Array SetValue object params int 需要过多的算术来迭代
  • 在 git bash 中创建一个新文件

    我已经运行了 Windows 版 Git 但我不确定它是否应该充当文本编辑器 我想我是用 Vim 编辑器安装的 但是在 Git Bash shell 中如何创建文件 例如网页 html git add webpage html 返回为 fa
  • Flutter:如何在手势检测器中禁用 onTap 一段时间?

    我有一个GestureDetector在自定义无状态视图中 什么时候onTap触发后 我显示了一个显示一些信息的小吃店 当用户快速多次单击时 它会永远显示小吃栏 源代码 https github com ammaratef45 zold f
  • Ivy,主配置是什么,为什么它不拉动jvyaml?

    我有以下常春藤文件
  • go 例程未从通道收集所有对象

    我有一个go routine将对象添加到通道中 然后我有 4 个go routines处理通道对象 处理只不过是将对象添加到数组中 但有时 最终数组中会丢失对象 所以我假设在某个时刻通道停止收集对象 我有以下代码 package main
  • SonarQube 抱怨:要么记录或重新抛出此异常

    在将代码与 Maven 集成后 我正在运行 SonarQube 5 进行代码质量检查 声纳抱怨我应该 记录或重新抛出此异常 在下面的代码中 public static Date convertStringtoDate String stri
  • 使用 Spring AOP 时,在单个连接点上绑定参数的多个 around 建议会导致错误

    我在一个方法上写了 2 个注释 并写了 2 个周围建议来处理每个注释值 连接点方法是这样的 CacheFetch cacheName CacheManager CACHE DATASOURCE INFO TenantAware method
  • 如何从 SQL 注入攻击中删除帖子中的脚本?

    我有一个插件 使我的 WordPress 网站容易受到 SQL 注入攻击 此后我锁定了我的网站并删除了所有 Wordpress 文件 然后重新安装了 Wordpress 该插件也已被删除 不幸的是 我现在所有 2503 个帖子都安装了以下示
  • 当输入列表为空时删除 JXLS 中的模板行

    我正在使用 JXLS 填充 Excel 电子表格模板 有时 一个输入 列表 是空的 发生这种情况时 使用此列表的模板字段将以完整的 JXLS 标志显示在填充的电子表格中 例如 someList someValue 有问题的字段都在一行中 扩
  • 角度 2 中的指令执行顺序

    如果我有一个带有单击处理程序和自定义属性指令的简单按钮 如下所示
  • 如何使用所需信息呈现表单字段

    有没有什么聪明的方法可以让 django 表单在所需字段后渲染带有星号的字段 或者提供一些其他聪明的方法来标记必填字段 如果我已经按照表单中的要求设置了字段 我不想在模板中再次执行此操作 从 Django 1 2 开始 如果您的表单有一个名
  • Xcode 链接器错误:对于架构 x86_64 文件太小

    我正在 Xcode 中开发一个应用程序 当我尝试构建时 出现此错误 ld in Users theodore Library Developer Xcode DerivedData Tower bkpdifuqssebjdgurzmtirb
  • 如何处理java中“死存储到局部变量”的错误?

    我写了一个简单的测试代码 这是一个圆圈 我想大多数人都能想象到什么是圆类 所以我就不贴了 在测试代 码中 我尝试使用无效点测试圆构造函数 并假设抛出异常 但出现了一个错误 上网查了一下 还是不知道如何解决 有人可以帮助我吗 谢谢 代码信息
  • 日期时间值不正确:“2012-07-14 23:00:00”

    我在使用 Python MySQL 处理日期时间格式时遇到一些问题 我使用以下脚本 由 Python 字典提供 计算日期时间 tempDate str eachday get date get year zfill 4 str eachda
  • #include 导致很多语法错误

    我的程序使用 Qt 和 OpenGL 它在 Linux 和 Mac 下都能正确编译 在Windows上编译时 我需要 include windows h才能使用OpenGL 代码如下 if defined WIN32 defined WIN
  • 不能需要全局 npm 模块

    我有以下问题 我安装 uuidnpm install g uuid 当我尝试运行以下代码时 var uuid require uuid console log uuid v1 抛出异常 module js 339 throw err Err
  • std::vector 和 C 风格数组

    我正在尝试OpenCL http www khronos org opencl 提高我们软件的速度 我们经常使用映射 为了简化 将映射表示为 std vector OpenCL API 采用原始 C 风格指针作为参数 例如上述情况中的 in
  • 如何设置PowerShell的默认目录?

    有没有办法更改 PowerShell 默认位置 如何设置PowerShell的默认工作目录 创建一个PowerShell 简介 https learn microsoft com en us powershell module micros
  • com.microsoft.sqlserver.jdbc.SQLServerException:MSI 令牌失败:无法从 MSI 端点获取令牌

    我想使用应用服务 API Java 和 MSI 托管服务身份 身份验证来访问 Azure SQL 数据库 我试图找出如何从适用于 Java 的 Azure 应用服务将 Azure sql 与 MSI 连接 这是我正在使用的连接字符串 jdb