转:SharePoint站点中用户信息与AD用户信息的“不一致”问题
先把問題描述一下:已把AD用戶“User1”加到SharePoint站點中,然后進行如下類似操作:將“User1”從SharePoint站點中刪除,將“User1”從AD中刪除,在AD中增加一個新用戶“User1”,在SharePoint站點中增加一個用戶“User1”,這時,您會發現很有意思的問題:可能可以成功增加這個用戶,但是這個用戶始終無法登錄到SharePoint站點中;或者根本增加不了這個用戶到SharePoint站點中,提示您站點中已經存在這個用戶了。
在上次CSDN站點的SharePoint技術聊天活動中,有參與的網友詢問了類似的問題,由于當時我在聊天活動中無法給出非常詳細的解釋,所以只是給出了一個相關的鏈接。今天用這篇文章詳細解釋一下。
這個問題出現的原因,是出自SharePoint對于站點用戶的存儲機制所造成的。SharePoint站點用戶信息保存在站點對應的內容數據庫的UserInfo表中,如果站點管理員刪除了站點中的某個用戶,您可能會驚奇的發現,這個用戶相應的記錄并未從UserInfo表中刪除,而只是將“tp_Deleted”這個列的數據進行了設置。(這種機制的原因所在是這條記錄可能已經通過外鍵關聯了其他表的其他記錄,比如此用戶編寫的文檔,所以將此記錄直接刪除是不可取的。)
在以后,如果站點管理員將一個同名的用戶增加到這個站點中,由于UserInfo表中已經有這條用戶記錄的存在,所以SharePoint也只是將這條記錄的“tp_Deleted”列的數據再進行設置。
這時候,問題就來了。在UserInfo表中,有一個“td_SystemID”列,這個列是用來記錄這個用戶的Security Identification Number(SID)的。我們在AD中刪除一個用戶,再新增一個同名用戶,這先后兩個用戶的SID肯定是不同的。而SharePoint使用了這個“td_SystemID”列來識別用戶,由于前后兩個用戶的SID肯定不同,所以SharePoint站點就“不認”在AD中重新增加的這個用戶了。
解決方法就是把UserInfo表的“td_SystemID”列的數據和當前AD中的用戶信息進行同步。在SqlServer中有一個SUSER_SID()函數,可以返回某用戶的SID信息。在Dean的Blog上,他已經給出了一個完整的Sql語句,大家可以直接使用。
順便題一下,在Deam的Blog上,他也描述了這個問題所造成的另外一個問題:如果我們備份站點的時候,將用戶信息也一起備份了下來,在恢復到另外一個AD中時,如果站點用戶有同名的現象,也同樣會造成SharePoint“不認”這個AD用戶。
Sql語句:
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
轉載于:https://www.cnblogs.com/foxhorse/archive/2008/06/10/1216843.html
總結
以上是生活随笔為你收集整理的转:SharePoint站点中用户信息与AD用户信息的“不一致”问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 武当大力鹰爪功
- 下一篇: 老生常谈:装饰者模式