我目前正在尝试解决一个问题,该问题只能通过组合两个不同 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/