如何在本地SSIS(非ADF导入)中用Service Principal或托管身份连接Azure SQL数据库
问题分析与解决步骤
可能的操作失误
- 你直接用SP名称+密码以SQL Server认证方式连接,这是错误的。Service Principal属于Azure AD身份,必须使用Azure AD专属的认证模式,而非常规SQL账号认证。
- 可能使用的数据库驱动版本过低,不支持Azure AD服务主体认证。
用Service Principal连接Azure SQL的SSIS配置步骤
1. 确认驱动版本
必须安装ODBC Driver 17 for SQL Server及以上版本,或OLE DB Driver 18 for SQL Server,这两类驱动原生支持Azure AD服务主体认证。
2. 配置SSIS连接管理器
方式一:ODBC连接管理器
- 新建ODBC连接管理器,选择
ODBC Driver 17 for SQL Server作为驱动 - 在配置窗口填写以下信息:
- 服务器名称:
你的Azure SQL服务器名.database.windows.net - 认证类型:选择Azure Active Directory - Service Principal
- 服务主体ID:输入SP的应用程序ID(不是SP的显示名称)
- 服务主体密钥:输入创建SP时生成的密钥(或Azure CLI生成的密码)
- 租户ID:输入你的Azure租户ID
- 数据库名称:选择目标Azure SQL数据库
- 点击「测试连接」验证
- 服务器名称:
方式二:ADO.NET连接管理器
- 新建ADO.NET连接管理器,选择
Microsoft.Data.SqlClient作为提供程序 - 手动配置连接字符串(或通过连接字符串构建器生成):
Server=tcp:你的Azure SQL服务器名.database.windows.net,1433;Authentication=Active Directory Service Principal;Database=你的数据库名;User Id=你的SP应用程序ID;Password=你的SP密钥; - 替换占位符后,点击测试连接
3. 验证数据库权限配置
确保已在Azure SQL数据库中正确创建SP对应的外部用户并授权:
- 用拥有数据库权限的Azure AD账号登录数据库,执行以下SQL:
注:也可以用SP的应用程序ID替代显示名称创建用户。CREATE USER [你的SP显示名称] FROM EXTERNAL PROVIDER; -- 赋予读写权限,按需调整角色 ALTER ROLE db_datareader ADD MEMBER [你的SP显示名称]; ALTER ROLE db_datawriter ADD MEMBER [你的SP显示名称];
关于托管身份的说明
本地运行的SSIS包无法直接使用托管身份(托管身份是Azure资源专属身份,本地环境没有对应的身份上下文),因此只能通过Service Principal方式实现无交互连接。
内容的提问来源于stack exchange,提问作者Ian Carrick
相关产品推荐
相关产品推荐

