转:SharePoint站点中用户信息与AD用户信息的“不一致”问题
先把問(wèn)題描述一下:已把AD用戶“User1”加到SharePoint站點(diǎn)中,然后進(jìn)行如下類似操作:將“User1”從SharePoint站點(diǎn)中刪除,將“User1”從AD中刪除,在AD中增加一個(gè)新用戶“User1”,在SharePoint站點(diǎn)中增加一個(gè)用戶“User1”,這時(shí),您會(huì)發(fā)現(xiàn)很有意思的問(wèn)題:可能可以成功增加這個(gè)用戶,但是這個(gè)用戶始終無(wú)法登錄到SharePoint站點(diǎn)中;或者根本增加不了這個(gè)用戶到SharePoint站點(diǎn)中,提示您站點(diǎn)中已經(jīng)存在這個(gè)用戶了。
在上次CSDN站點(diǎn)的SharePoint技術(shù)聊天活動(dòng)中,有參與的網(wǎng)友詢問(wèn)了類似的問(wèn)題,由于當(dāng)時(shí)我在聊天活動(dòng)中無(wú)法給出非常詳細(xì)的解釋,所以只是給出了一個(gè)相關(guān)的鏈接。今天用這篇文章詳細(xì)解釋一下。
這個(gè)問(wèn)題出現(xiàn)的原因,是出自SharePoint對(duì)于站點(diǎn)用戶的存儲(chǔ)機(jī)制所造成的。SharePoint站點(diǎn)用戶信息保存在站點(diǎn)對(duì)應(yīng)的內(nèi)容數(shù)據(jù)庫(kù)的UserInfo表中,如果站點(diǎn)管理員刪除了站點(diǎn)中的某個(gè)用戶,您可能會(huì)驚奇的發(fā)現(xiàn),這個(gè)用戶相應(yīng)的記錄并未從UserInfo表中刪除,而只是將“tp_Deleted”這個(gè)列的數(shù)據(jù)進(jìn)行了設(shè)置。(這種機(jī)制的原因所在是這條記錄可能已經(jīng)通過(guò)外鍵關(guān)聯(lián)了其他表的其他記錄,比如此用戶編寫的文檔,所以將此記錄直接刪除是不可取的。)
在以后,如果站點(diǎn)管理員將一個(gè)同名的用戶增加到這個(gè)站點(diǎn)中,由于UserInfo表中已經(jīng)有這條用戶記錄的存在,所以SharePoint也只是將這條記錄的“tp_Deleted”列的數(shù)據(jù)再進(jìn)行設(shè)置。
這時(shí)候,問(wèn)題就來(lái)了。在UserInfo表中,有一個(gè)“td_SystemID”列,這個(gè)列是用來(lái)記錄這個(gè)用戶的Security Identification Number(SID)的。我們?cè)贏D中刪除一個(gè)用戶,再新增一個(gè)同名用戶,這先后兩個(gè)用戶的SID肯定是不同的。而SharePoint使用了這個(gè)“td_SystemID”列來(lái)識(shí)別用戶,由于前后兩個(gè)用戶的SID肯定不同,所以SharePoint站點(diǎn)就“不認(rèn)”在AD中重新增加的這個(gè)用戶了。
解決方法就是把UserInfo表的“td_SystemID”列的數(shù)據(jù)和當(dāng)前AD中的用戶信息進(jìn)行同步。在SqlServer中有一個(gè)SUSER_SID()函數(shù),可以返回某用戶的SID信息。在Dean的Blog上,他已經(jīng)給出了一個(gè)完整的Sql語(yǔ)句,大家可以直接使用。
順便題一下,在Deam的Blog上,他也描述了這個(gè)問(wèn)題所造成的另外一個(gè)問(wèn)題:如果我們備份站點(diǎn)的時(shí)候,將用戶信息也一起備份了下來(lái),在恢復(fù)到另外一個(gè)AD中時(shí),如果站點(diǎn)用戶有同名的現(xiàn)象,也同樣會(huì)造成SharePoint“不認(rèn)”這個(gè)AD用戶。
Sql語(yǔ)句:
DECLARE?curUsers?CURSOR?LOCAL?FOR?
SELECT?tp_login,?tp_systemid?FROM?userinfo?where?tp_deleted?=?0
OPEN?curUsers
????FETCH?NEXT?FROM?curUsers?INTO?@login,?@systemid
WHILE?@@FETCH_STATUS?=?0
BEGIN
????PRINT?'Resetting?user?'?+?@login?+?'?to?new?SID?'
????PRINT?suser_sid(@login)
????UPDATE?UserInfo
????????SET?tp_systemid?=?suser_sid(tp_login)?WHERE?CURRENT?OF?curUsers
????FETCH?NEXT?FROM?curUsers?INTO?@login,?@systemid
END
CLOSE?curUsers
DEALLOCATE?curUsers
GO
轉(zhuǎn)載于:https://www.cnblogs.com/foxhorse/archive/2008/06/10/1216843.html
總結(jié)
以上是生活随笔為你收集整理的转:SharePoint站点中用户信息与AD用户信息的“不一致”问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 武当大力鹰爪功
- 下一篇: 老生常谈:装饰者模式