访问 Windows 中的 SMB 文件共享时访问被拒绝

本文有助于修复访问服务器消息块 (SMB) 文件共享时发生的 拒绝访问 错误。

适用于:Windows Server 2012 R2、Windows 7 Service Pack 1
原始 KB 编号: 3035936

症状

当你尝试通过 SMB 版本 2 协议从基于 Windows 的系统访问位于网络设备 (NetApp) Filer 或支持 SMB2 的 Windows Server 上的特定文件夹时,将拒绝访问。 以下版本的 Windows 中会出现此问题:

  • Windows 8.1
  • Windows Server 2012 R2
  • Windows 8
  • Windows Server 2012
  • Windows 7
  • Windows Server 2008 R2
  • Windows Vista
  • Windows Server 2008

注意

如果在客户端上禁用 SMB2 协议或使用 Windows SMB 客户端(如 Windows XP 或 Windows Server 2003),则不会出现此问题。

原因

出现此问题的原因是 SMB 共享上的目标文件夹缺少 SYNCHRONIZE 访问控制条目。

解决方案

若要解决此问题,请使用 ICACLS 实用工具 设置包含同步位的所需权限。

例如,在命令提示符处,键入以下命令,然后按 Enter:

ICACLS h:\folder /grant domain\user:(RC,RD,REA,RA,X,S)

特定权限的括号中的逗号分隔列表:

  • RC - 读取控件
  • RD - 读取数据/列表目录
  • REA - 读取扩展属性
  • RA - 读取属性
  • X - 执行/遍历
  • S - 同步

疑难解答

可以使用以下方法来验证和排查问题。

  1. 验证 NetApp 文件存储器是否在文件夹上设置了同步位。

  2. 网络跟踪可以在请求和响应数据包的文件夹上显示 SMB2 CREATE 进程的 DesiredAccess 错误。

  3. Windows Sysinternals 网站上提供了 AccessChk.exe 工具,用于读取权限设置。

    例如,运行以下命令:

    C:\tools\Sysinternals\accesschk.exe -ld
    

    然后,可以看到以下结果,显示同步位已设置:

    [2] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users  
    [OBJECT_INHERIT_ACE]  
    [CONTAINER_INHERIT_ACE]  
    [INHERITED_ACE]  
    FILE_LIST_DIRECTORY  
    FILE_READ_ATTRIBUTES  
    FILE_READ_EA  
    FILE_TRAVERSE  
    SYNCHRONIZE  
    READ_CONTROL
    

    请参阅 Windows SMB2 客户端上 SYNCHRONIZE 位的行为

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。