簡體   English   中英

DirectoryServices.AccountManagement-組成員身份檢查效率

[英]DirectoryServices.AccountManagement - group membership checking efficiency

我們在Active Directory中有一個群組,擁有超過7萬個用戶帳戶。 我需要檢查是否有人是該組的成員。 該代碼將在具有大量並發用戶的Web應用程序中運行。 如果可能,我希望堅持使用System.DirectoryServices.AccountManagement來減少為此應用程序編寫的代碼量。

似乎有2種一般方法可以檢查某人是否為會員:

  1. 使用UserPrincipal.IsMemberOf()獲取指示成員資格的布爾值
  2. 使用UserPrincipal.GetGroups()獲取我可以手動檢查的組成員資格列表

我想避免列舉70k用戶來檢查某人是否在組中,因此選項2的面值似乎更有效。 當我開始工作時,可以針對這兩種方法進行一些測試,但是我想獲得一些有關這些方法在幕后真正作用的信息。 我的思考方向是否正確?

關於我正在使用的庫的最后一點。 如果完全退出System.DirectoryServices.AccountManagement並編寫自己的LDAP查詢,是否可以獲得更好的性能?

嗯,您可能要考慮使事情更有效率的一件事是基於這樣的事實,即組成員身份實際上是由具有其成員用戶(和組)列表的組管理的。 用戶上的“ memberOf”實際上是計算得出的“反向鏈接”-有關更多信息,請參見這篇出色的文章

因此,如果您需要檢查一個或兩個組中的成員資格,那么走到那些組並詢問他們的成員列表並緩存它們可能要容易得多。 在評估用戶時,您只需檢查其DN是否顯示在組成員列表之一中,而不必一遍又一遍地敲擊AD。

您將執行以下操作:

GroupPrincipal myGroup = Group.FindByIdentity(context, "myGroupName");

var members = myGroup.GetMembers();

這樣,由於組成員身份信息的緩存,您應該能夠獲得更好的性能。 試試吧!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM