我已经为 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 引擎将其删除(如预期的那样)。
你有什么想法吗?
我很高兴我问你的最终目标是什么。我打算在评论中回复,但它变成了太长的回复。
您最好的选择是诚实地结束这个问题并提出一个关于“跨多个数据库实施数据加密和混淆的最佳方法?”的新问题。包含您正在使用的每种数据系统的详细信息。有多种方法可以利用 SQL Server 的开箱即用功能实现客户的需求,而无需将迂回的解决方案组合在一起。
其中之一是Encryption另一个是Dynamic Data Masking,最后了解 SQL Server 中的正确权限都是隐藏客户数据的标准和潜在方法,甚至对开发人员也是如此。
前面提到的所有三个以及许多其他功能都适用于您提到的系统使用的数据库(取决于 SQL Server 版本)。
默认情况下,Chrome 浏览器不请求带有委托标志的 kerberos 票证。因此,当通过 Chrome 查看报告时,我得到
例外,因为它就像端点的匿名用户,而 IE 请求带有委托标志的 kerberos 票证。之前在 IE 中打开的报告在 Chrome 中运行良好。
请参阅Chrome 的AuthNegotiateDelegateWhitelist
我发现
klist
实用程序的问题PS。路径中的双斜杠或单斜杠与此问题无关