基于.NET Core的Azure SSAS表格模型连接Azure SQL数据源问题
Azure SSAS表格模型连接Azure SQL的两种方式示例与最佳实践
1. 使用Azure AD认证创建数据源
代码示例
using Microsoft.AnalysisServices.Tabular; // 连接Azure SSAS服务器 var server = new Server(); server.Connect("Provider=MSOLAP;Data Source=asazure://westus.asazure.windows.net/your-ssas-server;User ID=azuread\\your-admin@domain.com;"); // 获取或创建目标表格数据库 var database = server.Databases.FindByName("YourTabularDB") ?? new Database { Name = "YourTabularDB", ID = "YourTabularDB" }; if (!server.Databases.Contains(database.Name)) { server.Databases.Add(database); database.Update(UpdateOptions.ExpandFull); } // 配置Azure SQL数据源(Azure AD集成认证) var dataSource = new ProviderDataSource { Name = "AzureSQL_AAD_DataSource", ID = "AzureSQL_AAD_DataSource", ConnectionString = "Provider=SQLNCLI11;Data Source=your-azure-sql.database.windows.net;Initial Catalog=YourAzureSQLDB;Authentication=Active Directory Integrated;", ImpersonationMode = ImpersonationMode.ImpersonateAccount, Account = "azuread\\your-service-principal-id@tenant-id" // 服务主体格式,用用户账号则填对应AAD账号 }; // 添加数据源并更新模型 database.Model.DataSources.Add(dataSource); database.Model.Update(UpdateOptions.ExpandFull);
最佳实践
- 优先采用Azure AD托管标识替代用户账号/服务主体密钥,避免长期凭证泄露,托管标识无需手动维护密码。
- 连接字符串
Authentication参数可选值:Active Directory Integrated:适用于本地开发环境或托管标识场景Active Directory Password:用于AAD用户账号认证Active Directory Service Principal:服务主体认证时需在连接字符串补充UID=客户端ID;PWD=客户端密钥
- 确保AAD身份拥有Azure SQL数据库的
db_datareader最小权限,以及Azure SSAS服务器的模型编辑权限。
2. 使用数据库用户名和密码创建数据源
代码示例
using Microsoft.AnalysisServices.Tabular; // 连接Azure SSAS服务器 var server = new Server(); server.Connect("Provider=MSOLAP;Data Source=asazure://westus.asazure.windows.net/your-ssas-server;User ID=azuread\\your-admin@domain.com;"); var database = server.Databases.FindByName("YourTabularDB") ?? new Database { Name = "YourTabularDB", ID = "YourTabularDB" }; if (!server.Databases.Contains(database.Name)) { server.Databases.Add(database); database.Update(UpdateOptions.ExpandFull); } // 配置Azure SQL数据源(SQL账号认证) var dataSource = new ProviderDataSource { Name = "AzureSQL_SQLAuth_DataSource", ID = "AzureSQL_SQLAuth_DataSource", ConnectionString = "Provider=SQLNCLI11;Data Source=your-azure-sql.database.windows.net;Initial Catalog=YourAzureSQLDB;User ID=sql-account-name;", ImpersonationMode = ImpersonationMode.ImpersonateAccount, Account = "sql-account-name", Password = "your-strong-sql-password" }; // 添加数据源并更新模型 database.Model.DataSources.Add(dataSource); database.Model.Update(UpdateOptions.ExpandFull);
最佳实践
- 绝对禁止硬编码密码,使用.NET Core配置系统+Azure Key Vault存储敏感凭证,通过
IConfiguration读取。 - SQL账号遵循最小权限原则,仅授予
db_datareader等必要数据访问权限,避免过高权限带来的风险。 - 开启Azure SQL数据库的审计功能,监控SQL账号的访问行为,及时发现异常操作。
通用最佳实践
- 使用最新版
Microsoft.AnalysisServices.TabularNuGet包,确保支持Azure SQL和Azure AD的最新认证特性。 - 添加数据源前先通过
database.Model.DataSources.FindByName()检查是否已存在,避免重复创建。 - 可调用
dataSource.TestConnection()方法验证连接配置的正确性,提前排查问题。
内容的提问来源于stack exchange,提问作者Alberto Gentilcore
相关产品推荐
相关产品推荐

