sql-server - 在 Azure SQL 数据库之间使用托管标识进行数据库到数据库查询

标签 sql-server azure t-sql azure-sql-database azure-managed-identity

我目前正在尝试解决一个问题,该问题只能通过组合两个不同 Azure SQL 数据库(不同服务器,如果重要的话)的数据集来解决。

当使用用户+密码身份验证时,有一种方法可以执行这样的跨数据库查询(Azure SQL 数据库弹性查询):

CREATE DATABASE SCOPED CREDENTIAL RemoteCredential WITH
    IDENTITY = '<remote database user name>',
    SECRET = '<remote database user password>'

CREATE EXTERNAL DATA SOURCE RemoteDatabase WITH (
    Location = '<database server URL>',
    DATABASE_NAME = '<database name>',
    CREDENTIAL = RemoteCredential,
    TYPE = RDBMS
)

CREATE EXTERNAL TABLE [dbo].[RemoteTable] (
    <Remote table definition>
)

SELECT TOP(1) * FROM [RemoteTable]

以前这种方法效果很好,但我们后来迁移到仅使用托管身份登录,并且用户 + 密码身份验证不再是一种选择。

我发现下面的片段可以在访问 Azure 存储帐户 here 的上下文中更改托管标识的凭据。 :

CREATE DATABASE SCOPED CREDENTIAL RemoteCredential
    WITH IDENTITY = 'Managed Identity'

但这会导致以下错误消息:

Msg 33047, Level 16, State 5, Line 47
Fail to obtain or decrypt secret for credential 'RemoteCredential'.

我还尝试提供我的个人用户名或源数据库服务器的名称,但结果相同。

更多细节:

  • 两个数据库服务器属于同一租户和订阅
  • 我已在我查询的源数据库服务器上启用系统分配的身份。
  • 我还在目标数据库中创建了一个外部源用户以与托管身份一起使用,并授予其所需的角色。
  • 我的用户对这两个数据库都拥有所需的权限。
  • 从我的 Management Studio 使用托管身份访问这两个数据库都可以正常工作。

最终的解决方案必须与 Azure 中国的 Azure SQL 数据库配合使用,但如果我也能在 Azure 全局提供解决方案,我将不胜感激。

我当前的假设是,尚不支持从 SQL 查询中对其他 Azure SQL 数据库进行托管身份验证。但也许其他人已经找到了实现这一目标的方法。

最佳答案

虽然没有正式声明,但目前似乎不支持具有托管身份的弹性查询。

如果您阅读本文时,请告诉我。谢谢!

关于sql-server - 在 Azure SQL 数据库之间使用托管标识进行数据库到数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75007796/

相关文章:

sql - 条件选择语句

sql-server - 如何使用自定义编码读取数据?

sql-server - TRIM t-sql 参数

sql-server - 如何最好地为多个版本的SQL Server组织SVN存储库?

sql-server - 意外的性能结果将ID列的INT与BIGINT进行比较

c# - 如何使用 C# 触发基于 Application Insights 消息的 Azure 函数?

azure - LUIS 中的 400 错误请求 : Cannot find the specified subscription

azure - Visual Studio 未显示其他帐户的订阅 - 上周刚刚发生

sql - 行之间的日期比较

sql - t-SQL 中 INT 和 VARCHAR 数据类型的 MAX 函数