使用纯云 Azure Active Directory 进行 SQL Azure 集成身份验证失败

2023-11-24

我已经创建了 Azure 租赁并配置了以下内容:

Azure AD 具有:

  • 简单的自定义域名(少于 15 个字符)。 DNS 验证等一切都很好。
  • 用户和管理员组
  • 两个组中的用户
  • VNET、DNS 和 IP 地址
  • 启用设备管理
  • 启用域服务并连接到 VNET

请注意,本地没有任何东西,这一切都在云中。我的物理笔记本电脑实际上被用作跳线盒。

SQL Azure 数据库和服务器具有:

  • 防火墙规则对所有必要的传入连接开放
  • Active Directory 管理员设置为我在 Azure AD 中创建的管理员组
  • AD 用户全部在 SQL Azure 中使用 CREATE USER FROM EXTERNAL PROVIDER 创建;

我可以使用 Active Directory 通用身份验证或 Active Directory 密码身份验证从笔记本电脑上的 SSMS 良好地连接到 SQL Azure 数据库。对于这两个问题,我都会像预期的那样受到用户名和密码的质疑。

客观的:我希望能够使用集成身份验证,以便能够从 a) 计算机、b) ASP.NET MVC 站点无缝传输身份。我还没有尝试过场景 b 是的,所以让我们把它搁置一下。对于场景a,我做了以下操作。

配置 Azure VM:

  • 标准 D2 - Windows 10 已完全修补
  • 连接到与域相同的 VNET
  • 已安装 SQL Server Management Server 2016 (SSMS)(最新且已修补 - 13.0.15700.28)
  • 安装了 ODBC 13.1(尽管我认为这不相关)
  • ADAL
  • 面向 IT 专业人员 RTW 的 Microsoft 在线服务登录助手

简而言之,我的完整“环境”由 Azure AD、SQL Azure DB 和客户端 VM 组成。

Problem:我使用目录服务将 VM 添加到我的 Azure Active Directory,注销并以有效域用户身份登录(在 AD 和 SQL Azure 中有效,具有适当的登录名和权限)。当我打开 SSMS 时,我可以使用 Active Directory 通用身份验证或 Active Directory 密码身份验证正常连接,但当我尝试使用 Active Directory 身份验证安全连接时,出现以下错误。如果我将 VM 直接加入到 Azure AD,也会发生这种情况。我的部署是 100% 云,因此没有适当的联合。

所以我有两个问题:

  • 我的配置或方法中是否遗漏了某些内容,或者是否有解决方法?这可能是一个现有问题 - 请参阅此处
  • 如果使用 C# 在 .net 4.6.2 中进行编码并部署在云中,这种连接(直通)是否有效?可能使用 ODBC 13.1 驱动程序?

Thanks

=====================================

无法连接到 .database.windows.net。

=====================================

无法验证活动中的用户 NT Authority\Anonymous Logon 目录(身份验证=ActiveDirectoryIntegrated)。错误代码 0xCAA9001F;仅支持状态 10 集成 Windows 身份验证 在联邦流程中。 (.Net SqlClient 数据提供程序)

------------------------------ 如需帮助,请点击:

------------------------------ 服务器名称:.database.windows.net 错误编号:0 严重性:11 状态:0 过程:ADALGetAccessToken

------------------------------ 节目地点:

在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份、SqlConnectionString 连接选项、SqlCredential 凭证、对象提供者信息、字符串新密码、安全字符串 newSecurePassword、布尔重定向UserInstance、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、 DbConnectionPool 池、字符串 accessToken、布尔值 应用瞬态故障处理) System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项、DbConnectionPoolKey poolKey、对象 poolGroupProviderInfo、 DbConnectionPool池,DbConnection owningConnection, DbConnectionOptions userOptions)位于 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection、DbConnectionPoolGroup poolGroup、DbConnectionOptions 用户选项)位于 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection 拥有连接、任务完成源1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection 外部连接、DbConnectionFactory 连接工厂、 任务完成源1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 重试)于 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 重试)在 System.Data.SqlClient.SqlConnection.Open() 处 Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci,IServerType 服务器)位于 Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()


从 Azure 支持获得更新:

它不起作用,因为:

  1. 要使用 Active Directory 集成身份验证,必须联合 Azure Active Directory。这是因为需要 Kerberos 来完成此操作(登录计算机时生成的 Kerberos TG 票证),但 Azure AD 不知道 Kerberos,因此需要 ADFS。
  2. Azure AD 域服务预览:这使得旧功能(NTLM、Kerberos 等)可用。但Azure SQL数据库不支持老式的Windows身份验证。

因此,您可以添加 2-3 个低功耗虚拟机来实现 AD + ADFS + AAD + AAD-DS,但这绝对不是理想的方法。

如果我得到有关未来计划的信息,我会在这里分享。

**

有同样的问题和一些开放的票。一旦我获得更多信息,就会更新这个答案。

截至今天,仅支持联合设置(如文档所示)here。你必须建立一个ADFS 设置使用 AD 连接。

这正是 AAD-DS 应该为纯云解决方案提供的功能。 AAD-DS 仍处于预览状态...

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

使用纯云 Azure Active Directory 进行 SQL Azure 集成身份验证失败 的相关文章

随机推荐

  • AppBarLayout 与嵌套片段中的 recyclerView

    由于图像总是比文字更好 我向您展示我当前的布局 工具栏 选项卡位于带有 viewPager 的 Activity xml 中 而 recyclerView 位于 viewPager 内的片段内 因此您可以向右 向左滑动来查看其他内容 我的问
  • 如何确定二进制字符串的统计随机性?

    如何确定二进制字符串的统计随机性 因此 我如何编写自己的测试 并返回与统计随机性相对应的单个值 即 0 到 1 0 之间的值 0 不是随机的 1 0 是随机的 该测试需要适用于任何大小的二进制字符串 当您使用笔和纸执行此操作时 您可能会探索
  • 什么时候调用临时的析构函数

    我想知道 C 03 和 C 11 何时调用临时的析构函数 假设我有以下情况 foo method foo f return foo void doSomething foo f method 假设我正在使用标志 fno elide cons
  • 如何以编程方式添加导航控制器?

    我使用下面的代码 但它没有加载 UIStoryboard storyboard UIStoryboard storyboardWithName Main bundle nil self mapViewController storyboar
  • 删除所有项目后组合框尺寸问题

    我的应用程序包含一个组合框 用户可以从中删除项目 当程序启动时 它会从配置文件中读取的字符串列表填充组合框 这是添加项目的代码 version list is an array of strings foreach string versi
  • 解释 Haskell 中的类型类

    我是一名 C Java 程序员 我在日常编程中碰巧使用的主要范例是 OOP 在某些线程中 我读到一条评论说 Type 类本质上比 OOP 更直观 有人可以用简单的语言解释类型类的概念 以便像我这样的 OOP 人员能够理解它吗 首先 我总是对
  • ExtJs手动触发Click事件,按钮参数与鼠标单击不同

    所以 我有一个登录控制器 你可以用鼠标单击登录或按 Enter 键 如下所示 Ext define My controller Login extend Ext app Controller init function applicatio
  • 使用节点将Token保存在本地存储中

    我正在使用智威汤逊 jsonwebtoken 5 4 0 与快递4和翡翠 我能够创建正确的令牌 但是如何在每次调用中传递此令牌 我必须在哪里存储这个令牌 在标头中还是在本地存储中 现在我将 CURL 与 Postman 一起使用 并在标头中
  • 有什么方法可以知道 Jersey @__Param fromString 处理程序中正在解析哪个参数?

    我正在使用的 API 决定接受 UUID 作为 Base32 编码字符串 而不是标准的十六进制 破折号分隔的格式UUID fromString 期望 这意味着我不能简单地写 QueryParam UUID myUuid作为方法参数 因为转换
  • 从多个位置创建脚本包

    假设我们的应用程序处于离线状态 即我们无法使用第 3 方 CDN 因此我们正在创建自己的 CDN 我想将所有供应商脚本托管在一个单独的 父级 Web 应用程序中 然后将它们包含在其他几个 MVC 应用程序的捆绑包中 e g http loc
  • 达到 MaximumFileSize 时的 log4net 滚动文件附加器文件名格式

    我们使用 log4net 滚动文件附加器 并且对日志文件有以下要求 每天开始时的新日志文件 文件名中包含日期 最大日志文件大小为 500KB 我们遇到的问题是当文件达到 500KB 时的文件命名策略 它们被重命名为 1后缀 这是有问题的 因
  • 以编程方式启用/禁用连接

    在 Windows 7 上 我可以通过网络连接管理器面板 在系统设置中 启用和禁用连接 我如何在 C 中以编程方式执行此操作 谢谢 您可以通过利用 WMI 和 Win32 NetworkAdapter WMI 类在 C 中实现此目的 Win
  • 为什么变异风格被弃用?

    0 13 和 0 14 中的文档都警告说变异样式已被弃用 但没有提及原因 不推荐在渲染之间重用和改变样式对象 如果我想对基于 css 类的动画无法处理的元素执行依赖于状态的动画 我该怎么办 每次都克隆对象 新反应 非常感谢帮助和建议 您可以
  • Python位置,显示距最近其他位置的距离

    我是数据框中的一个位置 位于经纬度列名称下方 我想在单独的数据框中显示距离最近火车站的经纬度有多远 例如 我有一个经纬度 37 814563 144 970267 并且我有一个其他地理空间点的列表如下 我想找到最近的点 然后找到这些点之间的
  • 悬停子元素时如何设置父元素的样式?

    我知道不存在CSS 父选择器 但是在没有这样的选择器的情况下悬停子元素时是否可以设置父元素的样式 举个例子 考虑一个删除按钮悬停时将突出显示即将删除的元素 div p Lorem ipsum p div
  • 为什么 SimpleXML 在使用时将我的数组更改为数组的第一个元素?

    这是我的代码 string lt lt
  • 使用 XSLT 创建带有嵌套粗体/斜体标签的 XSL-FO

    我正在创建 xslt 文件 它将我的 xml 转换为 xsl fo XML 是这样的
  • 如何自动配置 Eclipse?

    从事项目的团队往往需要 Eclipse 的通用配置 这包括通用配置和项目特定配置 例如 一般来说 每个人都可能希望共享缩进 某些插件的安装 例如 m2eclipse testng egit Spring 支持 此外 对于一个项目 您可能需要
  • 为需要另一个扩展的 Python 进行 C 扩展

    我有几个 Python 函数 可以用来让 Pygame 的游戏开发变得更容易 我将它们放在 Python 路径中名为 helper py 的文件中 这样我就可以从我制作的任何游戏中导入它们 我想 作为学习 Python 扩展的练习 将此模块
  • 使用纯云 Azure Active Directory 进行 SQL Azure 集成身份验证失败

    我已经创建了 Azure 租赁并配置了以下内容 Azure AD 具有 简单的自定义域名 少于 15 个字符 DNS 验证等一切都很好 用户和管理员组 两个组中的用户 VNET DNS 和 IP 地址 启用设备管理 启用域服务并连接到 VN