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



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



关注引自免费微信小程序:皆我百晓生
在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设置导致的权限冲突或未正确更新到最新的配置。
检查SQL Server实例和仲裁见证文件夹版本兼容性:
将所有权限转为小写:
ALTER USER 'your_username' WITH PASSWORD = '<your_password>';
在全局的安全设置中将" WitnessesFile "的权限设为仅读写:
GRANT SELECT, INSERT, UPDATE, DELETE ON witnesssefile TO 'your_username';
测试新配置:
重新启用仲裁见证:
验证新配置生效:
步骤4:创建单报告以获取更具体权限设置信息
如果你仍然无法获得所需的访问权限,以下是创建一个单报告以获取这些权限设置的信息的方法:
从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"部分:
开启仲裁见证控制台:
找到srvcommon/witnessesfile.bak作为仲裁见证的备份文件,回滚到之前的操作,恢复事件源状态,以便查看早期配置和已存在的故障排除设置。
访问以下URL:
RODRUM.ADMIN/admin/research/backup
`-- `
`-- witnesssefile.bak`
运行RESTORE DATABASE witnesssefile命令将备份还原到之前的表空间位置。
查找和修改 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;
重置配置并应用新Access Rule:
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;
清除SQL Server日志和重置DNS缓存:
首先,检查是否有未清理的SQL Server日志记录,可能导致系统出现故障。你可以在SQL Server日志库中找到这些日志文件,然后删除它们以释放磁盘空间。
然后,进入DNS区域服务器(如IP address)的设置,清除相关的日志文件和DNS缓存。为了进行此操作,你需要了解IP地址的DNS解析过程,一般包括查询DNS服务器的根目录并下载所有域名的解析缓存文件。
删除这些文件,可能需要输入以下命令:
netsh int ip reset /flushdns
重启SQL Server集群和仲裁见证服务器: