Changes of user relationship in AD can't be correctly synchronized to SCSM
The relationship of users might be not correctly updated if related users were once re-named in AD or have duplicate records in DB.
Cause 1 - Known Issue: a renamed user in AD will be treated as a new object in SCSM
Symptom
There are multiple records for the same user in BaseManagedEntity.
Analysis
There is a blog talking about this kind of behavior: https://blogs.technet.microsoft.com/manageabilityguys/2013/06/17/managing-username-changes-in-service-manager/
I did a test in my lab environment (SCSM 2012 R2). After I rename a user in AD and run AD connector, there will be two objects co-existing in the table [dbo].[ManagedEntity] for the user, and two relationships in the table [dbo].[Relationship].
For example, after I change my user name from "wendi" to "wendii", then to "wendie", there are 3 user objects and 3 relationships in the DB.
Relationship:

BaseManagedEntity:

Then I manually deleted "wendi" from DB, and changed the manager from "weiwen" to "Administrator" in AD. The relationship got updated for the newest object "wendie", but not for the old object "wendii". That resulted in two managers for the user "wendii"/"wendie", which is actually the same user in AD.

Resolution
Firstly remove the duplicated users from [dbo].[ManagedEntity].
If you don’t want to lose the relationships associated with the old object, please use the script in the blog to move all relationships from old object to new object.
Note: In the script there is a path pointing to SCSM PowerShell Module. You may need to alter it manually based on the real location.
Remove the duplicate user object:
$oldADUser = "wendi"
Get-SCClassInstance -Class (Get-SCClass -Name "System.Domain.User") -Filter "UserName -eq $oldADUser | Remove-SCClassInstance
After confirming there is no duplicate user objects, please change the manager relationship in AD, then check if the relationship can be updated correctly by AD connector.
Cause 2 - Duplicate AD connector introduces duplicate user records
If there is only 1 record in BaseManagedEntity, but multiple records in [LFXSTG].[AD_User], it is probably from duplicate AD connectors.
We can check the data sources of the records in [LFXSTG].[AD_User]:

This query can give you information about all data sources (connectors):
Select * from LFX.Datasource
A sample output:
| DataSourceId | DataSourceName | DataSourceAddress | DisplayName |
|---|---|---|---|
| 2 | ADConnector.af492f92b2d04b4092d2f0c6108a4aff | LDAP://DC=contoso,DC=com | CONTOSO AD Connector |
| 11 | ADConnector.762fe647adc14c2daba1191291e6b37f | LDAP://OU=AdminUsers,OU=Users,DC=contoso,DC=com | CONTOSO AD Connector - Users |
| 12 | ADConnector.b93d4f78d799462280e841e228f5f921 | LDAP://DC=contoso,DC=com | CONTOSO AD Connector - Printers |
| 13 | ADConnector.d49f58ebf7b84c509c3426cde55c7cd5 | LDAP://DC=contoso,DC=com | CONTOSO AD Connector - Computers |
| 14 | ADConnector.e56e3f09b5614c5ea554e3d0c06c7da4 | LDAP://DC=contoso,DC=com | CONTOSO AD Connector - Groups |
| 15 | ADConnector.747d1f1f252f46a59634378686a32dbe | LDAP://OU=SCSM,OU=Groups,DC=contoso,DC=com | CONTOSO AD Connector - SCSM Groups |
Resolution
Disable all duplicate connectors. After that, all users modified in the future could be correctly updated.
For those users which are already affected by the issue, we can follow below steps to process them.
- Run this query in ServiceManager to get the users who have duplicate relationships with relationship isDeleted = 0, as well as the connectors that brought the relationships.
(This query focuses on "manager" relationship)
Select distinct
u.DisplayName 'User Display Name',
u.UserName_6AF77E23_669B_123F_B392_323C17097BBD 'User',
Manager.UserName_6AF77E23_669B_123F_B392_323C17097BBD 'Manager',
r.RelationshipId,
r.IsDeleted 'Is Relationship Deleted',
C.DisplayName 'Connector',
BME.IsDeleted 'Is Connector Deleted',
R.LastModified
from Relationship R
left join RelationshipType RT on R.RelationshipTypeId = RT.RelationshipTypeId
left join MT_System$Domain$User Manager on manager.BaseManagedEntityId = R.SourceEntityId
left join MT_System$Domain$User U on u.BaseManagedEntityId = r.TargetEntityId
inner join DiscoverySourceToRelationship DSTR on R.RelationshipId = DSTR.RelationshipId
Left join DiscoverySource DS on DS.DiscoverySourceId = DSTR.DiscoverySourceId
left join MT_Connector C on convert(nvarchar(256),DS.ConnectorId) = C.Id
Left join BaseManagedEntity BME on C.BaseManagedEntityId = BME.BaseManagedEntityId
where RelationshipTypeName like '%System.UserManagesUser%' and u.BaseManagedEntityId in
(
Select
u.BaseManagedEntityId
from Relationship R
left join RelationshipType RT on R.RelationshipTypeId = RT.RelationshipTypeId
left join MT_System$Domain$User Manager on manager.BaseManagedEntityId = R.SourceEntityId
left join MT_System$Domain$User U on u.BaseManagedEntityId = r.TargetEntityId
where RelationshipTypeName like '%System.UserManagesUser%' and r.IsDeleted = 0
group by U.UserName_6AF77E23_669B_123F_B392_323C17097BBD, u.BaseManagedEntityId
Having count(u.UserName_6AF77E23_669B_123F_B392_323C17097BBD) > 1)
order by U.UserName_6AF77E23_669B_123F_B392_323C17097BBD
- Use below steps to automate the removal of un-needed relationships whilst keeping the most current one.
- Copy the query result with headers and save as a .csv file.
- Remove the needed relationships from the .csv file.
- Use below PowerShell commands to remove the un-needed relationships.
# You may change the file path.
$listcsv = Import-Csv C:\Files\UnneededRelationships.csv
foreach($list in $listcsv)
{
Get-screlationshipinstance -id $listcsv.RelationshipId | remove-screlationshipinstance
}
Changes of user relationship in AD can't be correctly synchronized to SCSM的更多相关文章
- JMM(java内存模型)
What is a memory model, anyway? In multiprocessorsystems, processors generally have one or more laye ...
- 【翻译九】java-同步方法
Synchronized Methods The Java programming language provides two basic synchronization idioms: synchr ...
- Synchronized Methods
Synchronized Methods The Java programming language provides two basic synchronization idioms: synchr ...
- Java Interview Reference Guide--reference
Part 1 http://techmytalk.com/2014/01/24/java-interview-reference-guide-part-1/ Posted on January 24, ...
- Java Synchronization
Volatile Since Java 5 the volatile keyword guarantees more than just the reading from and writing to ...
- Java内存模型(JSR133)问与答
What is a memory model, anyway? In multiprocessor systems, processors generally have one or more lay ...
- Windows ->> FIX: “The security database on the server does not have a computer account for this workstation trust relationship”
前几天在做AlwaysOn实验时遇到搭建活动目录域时某台已经加入AD的机器无法以域管理员账户登录的情况. 报错信息是:The security database on the server does ...
- Sharepoint2013 AD组用户不同步
背景: SP2013列表库使用AD安全组授权访问,向AD安全组添加一个用户A,在Sharepoint AD同步(增量和完全)后,用户A仍然无法访问列表库:原因: 参考:安全令牌上的缓存 SP2013 ...
- freeradius整合AD域作anyconncet认证服务器
一.服务器要求 Radius服务器:centos6.6.hostname.selinux disabled.stop iptables AD域服务器:Windows Server 2008 R2 E ...
随机推荐
- vue-awesome-swiper 的使用
第一步 : cnpm i vue-awesome-swiper --save (已经安装淘宝镜像 / 否则用 npm) 第二部: 在main.js 中 导入: import VueAwesomeS ...
- MyBatis缓存详解
MyBatis缓存分为一级缓存和二级缓存 http://www.cnblogs.com/zemliu/archive/2013/08/05/3239014.html mybatis 二级cache h ...
- Unity文档阅读 第二章 依赖注入
Introduction 介绍Chapter 1 outlines how you can address some of the most common requirements in enterp ...
- 在单用户模式下修改CentOS的root密码
我们在使用CentOS的过程中可能会发生忘记root用户密码的情况,本文就从应用的角度简单介绍一下如何在单用户模式下修改root用户的密码. 开启CentOS,进入系统启动菜单 将光标停留在系统开机时 ...
- unwrapThrowable
package org.apache.ibatis.reflection; import java.lang.reflect.InvocationTargetException; import jav ...
- 《javascript语言精粹》读书笔记 Item1 精华与语法
第一章 精华 任何语言都有其精华的部分和鸡肋的部分,javascript也不例外,而且鸡肋的部分还很多.但javascript的流行却不受他的质量影响. javascript为何如此流行?因为他是we ...
- CSS简写总结
CSS简写就是指将多行的CSS属性简写成一行,又称为CSS代码优化或CSS缩写.CSS 简写的最大好处就是能够显著减少CSS文件的大小,优化网站整体性能,更加容易阅读. 下面介绍常见的CSS简写规则: ...
- Javaweb之 servlet 开发详解1
1.1 Tip:Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...
- 一个靠谱的phpredisadmin文件
http://download.csdn.net/detail/newjueqi/7227487
- driver匹配元素定位用法大全
# -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By fr ...