如何在GitHub Actions中用ADINT认证部署SSIS包到Azure SQL的SSISDB?
解决GitHub Actions中SSISDeploy.exe使用Azure AD认证部署SSIS包的问题
核心问题分析
你遇到的连接失败,本质是托管GitHub Actions的Windows Runner不属于Azure AD域,无法直接使用ADINT(Active Directory Integrated)认证方式——ADINT依赖当前Windows用户的域身份,而Runner的本地用户并不关联你的Azure AD。同时还需要确保Azure SQL和服务主体的权限配置正确。
解决方案步骤
一、Azure SQL与服务主体的前置配置
- 启用Azure SQL的AD认证
- 登录Azure Portal,找到目标SQL Server,在「Azure Active Directory」设置中启用AD认证,并指定AD管理员(可选择用户或组)。
- 授权服务主体访问SQL Server
- 以AD管理员身份连接到SQL Server的SSISDB,执行以下SQL语句,将OIDC使用的服务主体添加为SSISDB的授权用户:
CREATE USER [你的服务主体名称] FROM EXTERNAL PROVIDER; ALTER ROLE db_ssisadmin ADD MEMBER [你的服务主体名称];
若需要更细粒度的权限,可替换
db_ssisadmin为db_ssisoperator或自定义角色。 - 以AD管理员身份连接到SQL Server的SSISDB,执行以下SQL语句,将OIDC使用的服务主体添加为SSISDB的授权用户:
- 确保SQL防火墙允许访问
- 在SQL Server的「防火墙和虚拟网络」设置中,勾选「允许Azure服务和资源访问此服务器」,或添加GitHub Actions Runner的IP段(推荐前者更灵活)。
二、GitHub Actions工作流的修改
由于ADINT不适用,改用**Active Directory Service Principal(ADSP)**认证,结合OIDC登录后的访问令牌来部署:
- 添加获取SQL访问令牌的步骤
在Azure Login步骤后,添加获取SQL Server访问令牌的命令:- name: Get SQL Access Token run: | $token = (az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv) echo "SQL_TOKEN=$token" >> $env:GITHUB_ENV - 修改SSISDeploy的部署命令
将原Deploy SSIS-packages步骤替换为:- name: Deploy SSIS-packages run: | SSISDeploy.exe ` -s:${{ github.workspace }}\XXXXX\XXXXX\XXXXX\XXXXX.ispac ` -d:"catalog;/SSISDB/XXXXXX;${{ vars.SQL_SERVER_NAME }}" ` -at:ADServicePrincipal ` -u:${{ secrets.AZURE_CLIENT_ID }} ` -t:$env:SQL_TOKEN
三、关键参数说明
-at:ADServicePrincipal:指定使用Azure AD服务主体认证,替代原有的ADINT(不适用托管Runner)。-u:传递服务主体的Client ID(即你配置OIDC时的AZURE_CLIENT_ID)。-t:传递获取到的SQL访问令牌,避免暴露服务主体密码,符合OIDC的安全要求。
四、验证要点
- 确认
Azure Login步骤执行成功,服务主体已获取到目标订阅的权限。 - 检查服务主体是否已被正确添加到SQL Server的AD用户列表,且拥有SSISDB的部署权限。
- 验证SQL防火墙规则是否允许GitHub Actions的流量访问。
内容的提问来源于stack exchange,提问作者Theo
相关产品推荐
相关产品推荐

