AD用户丢失后的补救办法(SharePoint)
终于下定决心开始写技术Blog。水平有限,写不出什么高深的东西,但是SharePoint经验还是有一些。下面是我最近遇到一个问题,把解决办法共享出来作为开篇,希望能对大家有所帮助。问题描述:
前些天一位同事误将客户那边一个OU删除,由于AD备份作的很少没得恢复造型需要AD用户丢失,对SharePoint比较熟的朋友大概都会知道在这种情况下如果在AD新建同样的帐户再以新建帐号登录是无法通过验证的。其原因是因为AD是以用户SID为唯一标示引起,对于SharePoint来说新帐号和原有帐号并无关联。如果在网站中为用户重新赋予权限的话,即便可以登录用户原先所添加内容也将被判断为其他用户所添加的内容。这是让人无法接受的。
解决思路:
首先由于AD无法恢复我们只能在AD中重建AD帐户,接下来要作的就是将新帐户和用户原先在AD中的配置信息关联起来,而SharePoint的用户权限信息存储于Site库UserInfo表中。此表与此次操作相关的主要字段信息如下:
tp_SiteID:站点GUID
tp_ID:用户在相应站点下的ID
tp_Login:用户登录名
tp_SystemID:用户SID
tp_Deleted:标注删除字段(正常情况为0,如果标注删除则为用户在删除时的tp_ID)
其中tp_SiteID与tp_ID构成了此表的主键,这也表明一个用户在此表中对应的信息数量取决于他在多少个站点中被赋予了权限(如果用户是用户AD组被间接赋予的权限那么在他第一次操作前是没有对应信息的)。
回到我们的问题,很多朋友大概也已经看出了问题的解决办法。我们只需要将帐号丢失用户在此表中对应信息的tp_SystemID改为他现在新帐号的SID理论上问题便解决了(经试验实际也是如此)。
解决方法:
首先我们需要获取新帐号的SID,方法有很多,我使用的方法是在任意一个网站(建议使用一个用户原来不具备权限的站点)中为用户赋予权限。这样UserInfo表中便多了一条记录,同时我们也就得到了用户新帐号的SID。下面便只欠一条Sql语句了:
Update UserInfo
set tp_systemID=(
select tp_systemID from UserInfo
where tp_loginName='[用户登录名]' and ??)
where tp_loginName='[用户登录名]' 其中??部分可用的条件有很多,我的做法是在网站添加用户时将其某个属性如邮箱改为一个特定值以方便查找这条新增的记录。
没想到一个小问题写了这么老长,似乎有点罗嗦,请大家多包涵。另外刚看到dudu也有篇解决类似问题的文章,比我的简洁很多http://dudu.cnblogs.com/archive/2005/04/04/131883.html,文中提到的查询不到信息的问题是由于编码问题导致的。在SharePoint数据库中用中文条件查询时需要在字符串前加N。
页:
[1]