asp.net - SSRS ReportViewer 401(机器帐户)域\机器$
问题描述
在我讨论这个问题之前,让我先解释一下我正在使用的架构。
数据库服务器 - SQL Server 2019、Windows 2019
SSRS-服务器 - SSRS 2019、Windows 2019
网络服务器 - IIS v10,Windows 2019
所有服务器都在同一个域上。
呈现报表的应用程序是使用 rsweb:ReportViewer 控件在 ASP.NET 中编写的。
要求:我需要能够使用机器级帐户从 ASP.NET 应用程序访问报告。
当前错误: 请求失败,HTTP 状态为 401:未经授权。
到目前为止我所做的...
- 将机器帐户添加到 SSRS。我已授予它所有级别的权限:站点设置、文件夹、报告。一旦我让它工作,我会降低权利,但现在我需要它工作。此机器级帐户是 Web 服务器。我的假设是从 Web 服务器到 SSRS 服务器的任何访问都将被授予。
- 将应用程序池的标识更改为 LocalSystem。是的,这可能违反了最小特权,但我现在再次将其视为 POC。我也尝试过 NetworkService。
- 网络配置。我可能需要在这里做一些事情来完成这项工作。我尝试过使用身份模拟,但没有成功,但有可能我没有将它与其他设置结合使用。当我将身份验证模式设置为 Windows 时,ASP.NET 使用的 Windows 标识是 NT AUTHORITY\IUSR。删除此行会给我 NT AUTHORITY\NETWORK SERVICE 作为 Windows 标识。我认为 NETWORK SERVICE 帐户将被授予;但是,这仍然会导致 401 错误。
- 修改了“rsreportserver.config”文件(C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\ReportServer\rsreportserver.config)
ASP.NET ReportViewer 设置:
ReportViewer1.ServerReport.ReportPath = rc.report_ssrs_path; ReportViewer1.ServerReport.ReportServerUrl = new System.Uri(rc.report_ssrs_url); SqlConnectionStringBuilder conString = new Database().conBuilder; List<ReportParameter> parameters = new List<ReportParameter>(); parameters.Add(new ReportParameter("ConString", conString.ConnectionString)); ReportViewer1.ServerReport.SetParameters(parameters); DataSourceCredentials dsc = new DataSourceCredentials(); dsc.Name = ReportViewer1.ServerReport.GetDataSources()[0].Name; dsc.UserId = conString.UserID; dsc.Password = conString.Password; ReportViewer1.ServerReport.SetDataSourceCredentials(new DataSourceCredentials[] { dsc }); ReportViewer1.ShowCredentialPrompts = false; ReportViewer1.ServerReport.Refresh();
如果有人可以提供帮助,将不胜感激。我已经在互联网上搜索了一个没有运气的解决方案。似乎它应该是可能的,而且我读过的很多东西都让它听起来像它。我确定我只是错过了一些小事。
解决方案
推荐阅读
- reactjs - 在 React Native Expo 中为 App 组件创建包装器
- c++ - 使用 cmake 将第三方共享库(*.so)集成到多个项目中
- jquery - 选项卡中的 Jquery 可嵌套列表菜单
- python-3.x - 无法在 Airflow 中将 DAG 名称提取到 JSON 中
- jquery - 如何使用 Jquery 验证检查名称数组字段?
- laravel - laravel 分页不适用于使用 withPagination
- react-navigation-v6 - React Navigation 6 (RN6) - 模态中的卡片堆栈
- scala - 尝试执行编译任务但无法加载神秘模块
- javascript - javascript 类方法 w/o 和 w 函数关键字有什么区别?
- c# - 尝试更改触发器上的图像时BitmapImage失败c#UWP