0

将我们的 TFS 2010 升级到 TFS 2012,我在其中一个集合上收到此错误:

[Error] Sync error for identity: System.Security.Principal.WindowsIdentity, S-1-5-21-xxxxxxx - No mapping between account names and security IDs was done

升级失败。从管理控制台重新运行服务作业会导致相同的错误。

我查看了数据库,其中有一个条目,ADObjects其中两者都SamAccountName具有ObjectSID该 SID。它看起来像来自旧域的帐户。fDeleted是 1。

如何清理它以便升级?

添加的信息(来自 SQL 跟踪):

declare @p3 dbo.typ_ServicingStepDetail2 insert into @p3 values(1,'ToDev11Beta1FinalConfiguration','BuildToDev11Beta1FinalConfiguration','Grant Administer Build Permissions to Project Administrators','2013-04-12 14:17:55.617',NULL,0,N'Microsoft.TeamFoundation.Framework.Server.IdentitySyncException: Sync error for identity: System.Security.Principal.WindowsIdentity, S-1-5-21-xxxxx - No mapping between account names and security IDs was done at Microsoft.TeamFoundation.Framework.Server.TeamFoundationIdentityService.TryReadIdentityFromSourceInternal(TeamFoundationRequestContext requestContext, IdentityDescriptor descriptor, Boolean withDirectMembership, TeamFoundationIdentity& identity) at Microsoft.TeamFoundation.Framework.Server.TeamFoundationIdentityService.AddMemberToApplicationGroup(TeamFoundationRequestContext requestContext, IdentityDescriptor groupDescriptor, IdentityDescriptor memberDescriptor, Boolean errorOnDuplicate, Boolean logSync, Boolean ensureKnown) at Microsoft.TeamFoundation.Framework.Server.TeamFoundationIdentityService.EnsureIsMember(TeamFoundationRequestContext requestContext, IdentityDescriptor groupDescriptor, IdentityDescriptor descriptor) at Microsoft.TeamFoundation.Framework.Server.TeamFoundationSecurityNamespace.EnsureIdentityIsKnownInternal(TeamFoundationRequestContext requestContext, IdentityDescriptor identity, Boolean throwOnFailure) at Microsoft.TeamFoundation.Framework.Server.TeamFoundationSecurityNamespace.SetAccessControlEntries(TeamFoundationRequestContext requestContext, String token, IEnumerableMicrosoft.TeamFoundation.Framework.Server.TeamFoundationSecurityNamespace.SetAccessControlEntries(TeamFoundationRequestContext requestContext, String token, IEnumerable`1 accessControlEntries, Boolean merge) at Microsoft.TeamFoundation.Server.Servicing.TFCollection.BuildStepPerformer.GrantAdministerPermissionsToProjectAdmins 的 1 accessControlEntries, Boolean merge, Boolean throwOnInvalidIdentity) (TeamFoundationRequestContext requestContext, ServicingContext servingContext) 在 Microsoft.TeamFoundation.Framework.Server.TeamFoundationStepPerformerBase.Microsoft.TeamFoundation.Framework.Server.IStepPerformer.PerformStep(String servingOperation, String stepType, String stepData, ServicingContext servingContext) 在 Microsoft.TeamFoundation.Framework.Server .ServicingStepDriver.PerformServicingStep(ServicingStep 步骤,ServicingContext servingContext, ServicingStepGroup 组, ServicingOperation servingOperation, Int32 stepNumber, Int32 totalSteps)') 插入@p3 值(2,'ToDev11Beta1FinalConfiguration','BuildToDev11Beta1FinalConfiguration','Grant Administer Build Permissions to Project Administrators','2013-04-12 14 :17:55.617',5,NULL,NULL)

exec prc_AddServicingStepDetails @jobId='xxx',@queueTime='2013-04-12 14:17:50.840',@stepDetails=@p3,@hostId='xxx',@completedStepCount=419`

所以看起来我可能有一个不再存在的项目管理员。关于如何手动删除该成员资格的任何想法?

4

2 回答 2

0

好的,我通过执行以下操作完成了升级。

这是非常肮脏和危险的。不要在没有良好备份的情况下尝试。您的保修已过期。这可能不适合你。它可能会破坏您的整个 TFS 设置并给您的小狗带来疾病。

反正。

打开 SQL Server 管理工作室。为不会升级的项目集合打开一个新的查询窗口(通常Tfs_NameOfCollectionThatWontUpgrade)。执行这个命令:

Select TeamFoundationId From ADObjects
Where ObjectSID='S-1-xxxx'

(显然,从错误消息中插入正确的 SID。)

这将为您提供导致问题的身份的内部 GUID。我升级失败的步骤是向项目管理员授予构建管理员权限,而且哇,我可以自己做。

现在从轨道中删除 Active Directory 链接(您确实复制了该 GUID,对吗?)

Delete From ADObjects
Where ObjectSID='S-1-xxxxx'

(显然,从错误消息中插入正确的 SID。另外请注意,这一步可能不是绝对必要的,但这是我执行的一步,如果我回滚看看你是否可以不使用它,我会被诅咒的。)

啊,一定要爱上电锯手术。更多的事情要做。让我们从所有组中删除此身份。注意:如果您对您唯一的管理员帐户执行此操作,您可能会将自己排除在集合和/或其中的项目之外。你被警告了。

切换到配置数据库(通常Tfs_Configuration)并执行

Delete From tbl_GroupMembership 
Where MemberId='The GUID you remembered'

此时,用户不再是任何成员,升级应该完成。一切都应该在那里:构建、工作项和源。

于 2013-04-12T16:47:01.323 回答
0

当我的 TFS 服务器使用 TFS 2012 Update 1 时,我遇到了一个非常相似的问题(几乎相同)。我也想出了这个 hack 来解决它。当我有一个运行 TFS 2012 RTM 或 TFS 2012 Update 2 的 TFS 服务器时,我没有遇到这个问题。

这是该线程的链接。 http://social.msdn.microsoft.com/Forums/en-US/tfsadmin/thread/238cad96-8e74-4f14-869a-3bb5e0629fd7

于 2013-05-07T14:32:16.907 回答