2014-01-30 213 views
0

以下代碼返回給定Groupname的UserPricipal。但是在刪除一個組之後,這個代碼仍然返回一個UserPrincipal(刪除的)。有沒有辦法刪除這個「緩存」?如何清除UserPrincipal緩存

UserPrincipalLookupService upls=fs.getUserPrincipalLookupService(); 
UserPrincipal who; 
try { 
    who = upls.lookupPrincipalByName("myDeletedGroupName"); 
} catch (IOException e1) { 
    // TODO Auto-generated catch block 
return; 
} 

因爲當設置Windows ACL的時候我需要UserPrincipalName。在重新創建一個具有相同名稱的已刪除組後,ACL被設置爲舊組而不是新的 - 並且在Windows-GUI中查看時,我在ACL列表中看到舊的objectSid而不是新的組(-name)。

步驟簡稱:

1. creating AD Group "xxxx" 
    2. setting ACL in File f for xxxx 
    3. deleting Group "xxxx" 
    4. deleting ACL 
    5. create new Group "xxxx" in AD 
    6. setting ACL in File f for xxxx 
    -> the OldSid from the deleted Group is the ACL Principal 

回答

1

Active Directory是一個分佈式系統。可能有多個域控制器服務於同一個域。因此,在通過一個域控制器從Active Directory中刪除對象後,在複製啓動之前,您仍然可以在另一個域控制器上找到已刪除的對象。

即使您只有一個域控制器,仍然需要注意您正在使用的服務。有正常的LDAP服務和全局編目服務。全局編錄服務是來自不同域(包括本地域)的對象在同一個林中的緩存。其目的是允許用戶在同一個Active Directory林中的所有域上執行全局搜索。您會在全局目錄中發現類似的問題。刪除域控制器上的對象後,您仍然能夠從全局編錄中找到已刪除的對象,直到複製啓動。好消息是在同一個域控制器中,這種複製通常會很快發生。

我不熟悉Java中的UserPrincipalLookupService,但很可能它使用全局編錄來查找用戶主體。您可能想要檢查該類是否允許您指定要使用哪個域控制器以及執行查詢時要使用哪個全局編錄。如果這個類不允許你指定服務器,恐怕你必須等待複製。

+0

無法在UserPrincipalLookupService中指定服務器。我認爲**%logonserver%**環境變量顯示當前連接的域控制器。但我想設置許多ACL的遠程,所以遠程和我的電腦探測不到相同的DC。 –

+0

+1有幫助;同樣的問題在這裏,我已經爲此搜索了MSDN。當你說「複製通常很快發生」......有人知道生存時間的來源,或者可以在Windows 2012 PDC上配置這種緩存/複製策略嗎? – dlatikay