我在Always On可用性组中有一对Microsoft SQL Server 2016节点。我正在尝试对BULK INSERT
Windows Server 2016文件服务器故障转移群集上的文件执行(使用SQL Server 2016 Management Studio查询),但是出现以下错误:
消息4861,级别16,状态1
无法批量加载,因为无法打开文件“ \ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt”。操作系统错误代码5(访问被拒绝。)。
无论我使用活动节点名称(nas2.my.domain
)还是故障转移群集侦听器(nas.my.domain
),都会发生这种情况。
环顾四周后,我发现这是由于SQL Server无法模拟与我连接的用户帐户所致BULK INSERT
。
如果使用Windows身份验证连接到SQL Server,则SQL Server服务帐户将在连接到文件服务器时尝试模拟您的用户帐户。如果使用SQL Server身份验证进行连接,它将以SQL Server服务帐户连接到文件服务器。
如果未正确配置委派和模拟(默认状态),则SQL Server服务将无法模拟您的用户帐户,并且将退回尝试以匿名用户身份连接到文件服务器。
可以通过查看文件服务器上的安全事件日志来确认。这些事实以及有关配置不受约束和受约束的委派的指南记录在以下链接中:
我已经尝试按照thesqldude指南中的说明进行操作,但是仍然无法正常工作。
我尝试访问的数据库BULK INSERT
不是可用性组的一部分,因此只有MSSQL1节点才有意义。文件服务器在NAS2节点上处于活动状态。检查文件服务器上的事件日志确实表明它仍然遇到此问题,并且SQL Server尝试以匿名用户身份验证文件服务器,而不是模拟我的用户帐户。
有人知道出什么事了吗?还是为了使这些指南过时而在SQL Server 2016中进行了某些更改?
- 文件服务器安全事件日志条目
- 服务帐户委托
- 服务帐户SPN
- SQL Server#1计算机帐户委派
- 文件服务器#2计算机帐户SPN
- 组策略对象
sys.dm_exec_connections
-Kerberos
我可以确认已通过将该GPO应用于MSSQL1 gpresult.exe /R
,并且随后重新启动了SQL和File Server节点,以确保刷新了所有缓存。