如何使用Service Principal实现Crystal Reports到Azure Synapse Analytics的连接
Service Principal连接Crystal Reports到Synapse SQL On-Demand配置方案
方案1:ODBC DSN配置(推荐,兼容性最好)
- 首先部署环境安装≥17.7版本的Azure ODBC Driver for SQL Server,该版本原生支持服务主体非交互认证
- 新建系统级ODBC DSN,驱动选择刚才安装的Azure ODBC Driver,服务器地址填入Synapse SQL on-demand端点,格式为
<工作区名称>-ondemand.sql.azuresynapse.net - 认证方式选择
Active Directory Service Principal,不要使用个人账号常用的交互认证类型 - 按提示填写参数:
- 用户名填写Service Principal的Client ID
- 密码填写Service Principal的Client Secret
- 租户ID填写企业Azure AD的租户ID
- 选择目标数据库后测试连接,连接成功后在Crystal Reports中直接引用该DSN作为数据源即可
该方案无需为Service Principal配置Synapse Admin权限,你已完成的两个配置(数据湖读权限、SQL库中添加该服务主体)已经满足最低权限要求,只需额外给SQL库中的服务主体授予对应外部表/视图的SELECT权限即可。
方案2:直连连接字符串配置(无需预配DSN)
- 打开Crystal Reports数据源配置界面,选择≥18.2版本的Microsoft OLE DB Driver for SQL Server
- 跳过交互登录步骤,选择手动编辑连接字符串,填入以下格式内容:
Provider=MSOLEDBSQL;Server=<你的Synapse on-demand端点>;Database=<目标数据库名>;UID=<Service Principal Client ID>;PWD=<Client Secret>;Authentication=ActiveDirectoryServicePrincipal;
- 测试连接通过后直接保存配置即可使用
常见问题排查
- 若连接提示鉴权失败,可先在Synapse SQL on-demand中执行如下语句确认服务主体权限配置是否正确:
- 确认用户已创建:
CREATE USER [服务 principal 显示名] FROM EXTERNAL PROVIDER;(已创建可跳过) - 授予最小查询权限:
GRANT SELECT ON SCHEMA::<你的业务schema名> TO [服务 principal 显示名];
- 确认用户已创建:
- 若查询速度较慢,可在ODBC配置中开启连接池,同时在Synapse SQL中开启结果集缓存,可大幅提升报表拉取数据的效率。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

