我已经为 SQL 服务器引擎和 SSRS 配置了委派,它工作正常。
SQL Server (2017) 引擎和 SSRS 安装在同一台机器上。我们称它为 SqlSrv1。
我们应该达到的目标:用户打开带有数据集的报表,该数据集通过模拟连接数据库数据和外部共享文件(带有敏感数据)。如果用户无权访问共享文件,报告应向他显示一个空的敏感列。
- 当我
BULK INSERT
通过 SSMS 执行时,类似
BULK INSERT #t1 FROM '\\FS1\common\anyfile.txt'
它工作正常。计算机管理在“共享文件夹\会话”中将我的姓名(而不是 sqlengine 服务帐户)显示为用户,将 SqlSrv1 显示为计算机。
现在,当我
BULK INSERT
针对本地文件(存储在 SqlSrv1 上C:\anyfile.txt
)从 SSRS 报告数据集执行时,它可以工作并且 ProcMon 在 Detail 列中显示我的名字,而不是 ssrs 服务帐户。最后,我从 SSRS 报告数据集中对共享文件执行 BULK INSERT
\\FS1\common\anyfile.txt
并收到错误Operating system error 5(Access is denied.)
,但 ProcMon 在 Detail 列中将我的名字显示为 Impersonating。
我发现了一个奇怪的东西:当我将数据集的连接字符串中的数据源更改为 时FQDN
,BULK INSERT
开始从 SSRS 工作。之后,我将数据源改回NetBIOS
但BULK INSERT
继续工作。到底是怎么回事?
一切都很好,但是在重新启动 SSRS 服务后,我Operating system error 5(Access is denied.)
再次遇到错误。
当我从步骤 1 执行查询时,ProcMon 向我显示路径
\\FS1\common\\anyfile.txt
(共享文件夹名称后带有双斜杠!什么?!!)而不是
\\FS1\common\anyfile.txt
当我收到错误 5 时,ProcMon 显示
\\FS1\common\anyfile.txt
(没有双斜杠)
但是当第 3 步开始起作用时(在FQDN
操作之后),天哪!ProcMon 向我显示
\\FS1\common\\anyfile.txt
(带有双斜杠),并且在 SSRS 服务重新启动后,我在 ProcMon 中看到
\\FS1\common\anyfile.txt
(没有双斜杠)我尝试将双斜杠添加到BULK INSERT
,但没有运气,SQL 引擎将其删除(如预期的那样)。
你有什么想法吗?