我正在尝试使用SSIS中的Azure服务主体连接到Azure SQL托管实例。我使用Microsoft OLE DB驱动程序for SQL Server在SSIS中创建了一个连接管理器。在连接管理器中,我使用Active Directory-Service Principal作为身份验证类型连接到服务器。我正在将服务主体GUID作为用户名和密码传递到连接管理器中。
当我在Visual Studio中对此进行测试时,我能够建立连接并运行SSIS。SSIS包按预期传输数据而不会出现问题。但是,当我部署Azure SQL server并在Azure数据工厂管道中运行SSIS包时,我会遇到一个错误。
用户登录失败(服务主体GUID(。SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器的AcquireConnection方法调用";Azure服务负责人";失败,错误代码为0xC0202009。
服务主体被设置为SQL托管实例上的用户,并且它对数据库具有数据库所有者权限。我检查了日志,身份验证正在到达SQL托管实例,但它似乎正在尝试使用SQL身份验证,而不是Active Directory服务主体身份验证。
这就是连接字符串的样子。
数据源=(SQL托管实例(;用户ID=(服务原则GUID(;初始目录=(我的数据库(;提供者=MSOLEDBSQL.1;持久安全信息=False;自动翻译=False;应用程序名称=(SSIS包名称和GUID(;使用数据加密=True;Authentication=ActiveDirectoryServicePrincipal;
我检查了Visual Studio中的连接字符串与数据工厂中使用的连接字符串,它们是相同的。我尝试使用服务主体帐户名而不是GUID,得到了相同的结果。SSIS包非常简单,它连接到一个服务器并将数据移动到托管实例。
AD服务主体在驱动程序级别受支持,但内置的SSIS IR版本不支持"用于SQL Server的Microsoft OLEDB驱动程序18-18.1.0.0";。理论上,自定义安装支持的驱动程序版本(https://learn.microsoft.com/en-us/sql/connect/oledb/features/using-azure-active-directory),它可以工作,但需要尝试。
如果你可以使用MSI。SSIS IR本机支持MSIhttps://learn.microsoft.com/en-us/sql/integration-services/connection-manager/ole-db-connection-manager?view=sql-server-2017#用于azure资源身份验证的托管标识。