WCX19880905 2024-03-29 19:50 采纳率: 16.7%
浏览 64

非域 windows 2016 故障转移集群 添加仲裁共享文件夹报错 无法授予对文件共享“x”的群集访问权限。

非域 windows 2016 故障转移集群 添加仲裁共享文件夹报错
无法授予对文件共享“\win-sql\WitnessesFile”的群集访问权限。
授予对选定文件共享“\win-sql\WitnessesFile”的群集访问权限时出错。
授予群集“mk-AlwaysOn”访问共享“WitnessesFile”的权限失败。
查找“mk-AlwaysOn”的群集名称对象的安全 ID 时出错。
帐户名与安全标识间无任何映射完成。
文件夹已经配置了共享 并赋予了读写权限 防火墙也是关闭的

img

img

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 19:50
    关注

    引自免费微信小程序:皆我百晓生

    在Windows 2016中,添加仲裁共享文件夹并授权给群集时,可能会遇到一些错误,特别是在尝试为" WitnessesFile "分配群集访问权限时,上述错误代码所示的引用表明无法授予特定的文件夹访问权限。下面是一个详细的解决方案,包括修复步骤、可能的原因分析以及相应的代码示例:

    步骤1:检查配置文件和防火墙设置

    确保在Windows 2016中安装了正确的SQL Server客户端服务,例如" Microsoft SQL Server Data Services". 检查您的SQL Server集群上是否存在名为" witnesssefile.msmd"的服务,这可能指向存储在SQL Server数据库中的仲裁见证文件夹。

    确保数据库实例有权限访问仲裁见证文件夹,通常是通过管理员凭据登录到SQL Server集群中的。检查SQL Server用户的组ID是否与WebSphere Application Server "mk-AlwaysOn"群集名称对象对应的组ID一致。此外,确保防火墙状态正常,没有阻止访问仲裁见证文件夹的规则或策略。

    步骤2:为"WitnessesFile"建立仲裁见证连接

    根据系统角色表(SSRS)中的描述,WitnessesFile是一个包含Witnesses属性的对象。在这个对象中,对于用户具有权限的索引(如"CNAME")通常指向仲裁见证文件夹所在的磁盘分区或卷标。

    首先,在WebSphere Application Server "mk-AlwaysOn"中,找到监控脚本(WSASyslog)并运行它来启动和配置仲裁见证。这通常在服务器管理器(SMMS)的"Management Console"窗口中实现。在默认的部署模式下,"mk-AlwaysOn"会启动一个临时审计日志服务器,提供仲裁见证配置信息,如存储位置、备份策略等。

    配置完成后,重启WebSphere Application Server "mk-AlwaysOn"服务,然后在单独的观察节点上重新启动Windows 2016服务器,确保所有相关服务处于正常状态。

    步骤3:修复权限关联及赋予权限

    按照上述步骤,我们已成功地启动了仲裁见证服务器,并设置了相应的仲裁见证连接。然而,如果我们发现某些共享或文件夹仍无法被赋予访问权限,可能是由于先前版本的SQL Server或WebSphere Application Server设置导致的权限冲突或未正确更新到最新的配置。

    1. 检查SQL Server实例和仲裁见证文件夹版本兼容性

      • 确保当前SQL Server集群上正在使用的实例及其代理客户端支持最新的SQL Server 版本,通常为17.4或更高版本。
      • 对于仲裁见证文件夹,确保其对应的SQL Server数据对象已在相应版本中加载,这可以通过通过MDAC或MSXML2模块查看其索引结构来确认。
    2. 将所有权限转为小写

      • 将与" WitnessesFile "相关的组或用户名的所有权限都转换为小写。这样可以避免SQL Server尝试识别不同角色和特权组合导致的冲突。
      ALTER USER 'your_username' WITH PASSWORD = '<your_password>';
      

      在全局的安全设置中将" WitnessesFile "的权限设为仅读写:

      GRANT SELECT, INSERT, UPDATE, DELETE ON witnesssefile TO 'your_username';
      

      测试新配置

      • 使用SQL Server Management Studio (SSMS)或其他支持小写权限查询工具,如Windows PowerShell或PowerShell Core,检查更新后的权限映射。

      重新启用仲裁见证

      • 如果验证后没有重置权限,可通过Windows 2016的SQL Server Manager进行仲裁见证功能的重新启用。在服务器管理器的"Service Status"窗口中,选中"Management Service"项,点击右键选择"Start/Stop",然后选择"Start"以启动仲裁见证服务。

      验证新配置生效

      • 打开" WebSphere Application Server "的管理界面,检查" WitnessesFile "及其子对象" Witnesses "的状态是否被调整为允许访问。
      • 请确保所有终端用户具有相同的权限或通过网络共享使用“WitnessesFile”并获得了与前面步骤相同的角色或组标识。

    步骤4:创建单报告以获取更具体权限设置信息

    如果你仍然无法获得所需的访问权限,以下是创建一个单报告以获取这些权限设置的信息的方法:

    1. 从SQL Server Server Manager中打开" Service Status"窗口

      • 在Windows PowerShell中运行以下命令,以打开SQL Server Management Studio窗口:

        Start-Process sqlcmd.exe -ArgumentList '/s', '/q', '/e', '/r' -NoNewWindow -Wait
        
      • 这将打开" Service Status"窗口,显示所有服务的进程状态。

      在窗口中导航到"WitnessesFile"服务的实例或监视节点

      • 选中所处的服务的实例,如下所示:
      Select-Object Name, State, CPUUtilization, MemoryUsage, PID, ServiceName, StartTime, StopTime, GroupName
      

      滚动到"Access Rules"部分

      • 在列标题列表中搜索"WitnessesFile",在结果中找到目标" WitnessesFile "文件夹,并确定其所属的权限组名称。
    2. 开启仲裁见证控制台

      • 找到srvcommon/witnessesfile.bak作为仲裁见证的备份文件,回滚到之前的操作,恢复事件源状态,以便查看早期配置和已存在的故障排除设置。

      • 访问以下URL:

        RODRUM.ADMIN/admin/research/backup
        `-- `
        `-- witnesssefile.bak`
        
      • 运行RESTORE DATABASE witnesssefile命令将备份还原到之前的表空间位置。

    3. 查找和修改 WitnessesFile Access Rule

      • 使用SQL Server Management Studio或PowerShell核心视图中提供的sp_executesql命令,从故障追踪器中查找并查看仲裁见证事件记录,查找相关的" WitnessesFile "和" Witnesses "对象的访问规则信息。

      • 使用以下SQL语句根据异常记录的信息修改和添加Access Rule:

        WITH RECURSIVE rrule AS (
          SELECT *
            FROM sys.events r
          WHERE r.event_type LIKE '%AccessRule%'
            AND r.parent_object_id IN ('{ WitnessesFile }')
            AND r.parent_instance_id IN ('{ WitnessesFile }')
        )
        DECLARE @accessRuleId INT;
        WHILE @@FETCH_STATUS = 0
        BEGIN
          SET @accessRuleId = rrule.rid;
        
          INSERT INTO AccessRule(
            RuleName,
            Description,
            Type,
            SourceGroupSid,
            SourceInstanceSid,
            RequiredPermission,
            EffectiveDate,
            Comments
          ) VALUES
            (@accessRuleId,
              CASE WHEN r.enabled THEN 'Enabled' ELSE 'Disabled' END,
              r.expression_type,
              r.rule_sid,
              r.instance_sid,
              r.permission_name,
              GETDATE(),
              r.comment
          );
        
          -- 在这一步,你可能需要插入至少一条额外的AccessRule,例如为不同类型的共享(如网络共享或文件夹共享)添加不同的权限:
        
          IF EXISTS(SELECT * FROM System.AccessControl.AddAccessRule WHERE RuleName = r.access_rule.name)
            INSERT INTO AccessRule(
              RuleName,
              Description,
              Type,
              SourceGroupSid,
              SourceInstanceSid,
              RequiredPermission,
              EffectiveDate,
              Comments
            ) VALUES
              (@accessRuleId,
                'Allow',
                'All Users and Groups',
                r.source_group_sid,
                r.source_instance_sid,
                r.permission_name,
                GETDATE(),
              r.comment
            );
        END
        SELECT * FROM rrule;
        
      • 使用SELECT语句查询新的Access Rule ID,以便重新设置它们:

        SELECT MAX(id) as max_id
        FROM AccessRule;
      
    4. 重置配置并应用新Access Rule

      • 取消" WitnessesFile "对象的仲裁见证规则,以便使其恢复正常工作:
        ALTER VIEW witnesssefile_witnesses AS
        SELECT * FROM witnesssefile_witnesses
        WHERE RuleName = 'WitnessesFile'
        GROUP BY RuleName
        HAVING COUNT(*) > 1;
        
        EXEC sp_executesql N'SELECT id FROM witnesssefile_witnesses GROUP BY RuleName ORDER BY id DESC LIMIT 1';
        
        ALTER VIEW witnesssefile_witnesses
        WITH CHECK CONSTRAINT (CK Witnesssefile_witnesses_CheckColumn_1)
        DROP VIEW witnesssefile_witnesses;
        
    5. 清除SQL Server日志和重置DNS缓存

      • 首先,检查是否有未清理的SQL Server日志记录,可能导致系统出现故障。你可以在SQL Server日志库中找到这些日志文件,然后删除它们以释放磁盘空间。

      • 然后,进入DNS区域服务器(如IP address)的设置,清除相关的日志文件和DNS缓存。为了进行此操作,你需要了解IP地址的DNS解析过程,一般包括查询DNS服务器的根目录并下载所有域名的解析缓存文件。

      • 删除这些文件,可能需要输入以下命令:

        netsh int ip reset /flushdns
        
    6. 重启SQL Server集群和仲裁见证服务器

      • 确保SQL Server集群再次启动并有新的
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥15 数据库原理及应用上机练习题
  • ¥30 征集Python提取PDF文字属性的代码
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?