连接到PowerApps数据库的SSIS OData或 SQL Server的身份验证
我有一个PowerApps应用,里面有一个数据库(我认为这叫Dataverse,并且也和Dynamics CRM有关)。这个数据库有一个OData接口,我可以在.NET中消费它,使用OAuth认证,带有一个Entra客户端ID和一个证书(或密钥)。
现在我想对该数据库设置一个SSIS作业。Visual Studio中的SSIS项目在连接管理器类型下有OData,但认证选项中没有OAuth或 Entra。
除了Windows身份验证,这显然不适用,还有:
- Basic Authentication
- Microsoft Dynamics AX Online
- Microsoft Dynamics CRM Online
- Microsoft Online Services
这些都需要用户名和密码。我尝试了客户端ID/客户端密钥的组合,但四者都报错:
- Error 401
- Unsupported user type "Unknown"
- Unsupported user type "Unknown"
- Could not load file or assembly Microsoft.SharePoint.Client.Runtime
.NET客户端使用 Authorization: Bearer,并从 Microsoft.Identity.Client.ConfidentialClientApplicationBuilder 获取一个MS令牌。
对于服务定位文档,我提供了在PowerApps的开发者/Web API端点中找到的URL,https://foobar.api.crm9.dynamics.com/api/data/v9.2/。又尝试了“discovery endpoint”下的那个URL (https://globaldisco.crm9.dynamics.com/api/discovery/v2.0/Instances),出现了不同的错误,但也无法工作。
有点类似的情形在这里 here,但那是关于Sharepoint Online,并非PowerApps。
如何将SSIS的 OData连接到PowerApps数据库?
编辑:尝试了带有 @mytenant.com 后缀的用户名——客户端ID和客户端名称。得到了不同的错误信息。
编辑:有趣的是,如果你在调试连接过程时,确实有两个Dynamics选项的Entra授权钩子,但客户端ID是一个硬编码的值,CRM为 ab0705f3-bc4d-4742-8eb1-bf8caff9d7ff,AX为 1de6fcf0-45a1-4fe8-b96c-46919e375ef4。这两个GUID在 Google上都搜不到。
“Online Services”似乎与Sharepoint相邻,需要调用Sharepoint客户端库然后通过cookie认证。很可能它不会推广到Dataverse。
顺便提一句,Dataverse有第三方的连接管理器。但似乎都不是免费的。这里 是其中的一个列表。
编辑:你可以使用带有SQL Server提供程序的ADO.NET连接Dataverse,至少是交互式的——见 这里 。在SSIS项目中把同样的设置作为连接管理器来实现似乎不是很成功。ADO.NET/SQL Server数据源的两个Entra连接选项是 "Entra Integrated" 和 "Entra Password"。前者不需要参数——显然不太合适。后者需要用户名和密码,但如果你点击测试,不管输入什么值,都会得到一个看起来像内部失败的错误信息:
Test connection failed because of an error in initializing provider. The connection string property has not been initialized.
那么后续的问题就是:是否可以将ADO.NET连接管理器设置为连接到Dataverse?或者,一般来说,使用Entra身份认证的ADO.NET/SQL Server连接(例如连接到某个Azure数据库)是否可行?
一般来说,所谓“Entra Password”类型连接的用户名和密码应该填哪些内容?
解决方案
