2010-05-04 4 views
4

Active Directory 계정을 잠그는 가장 좋은 방법은 무엇입니까? Active Directoy LDAP - 사용자 계정 잠금

int val = (int)directoryentry.Properties["userAccountControl"].Value; 
directoryentry.Properties["userAccountControl"].Value = val | 0x0010; 

directoryentry.InvokeSet("IsAccountLocked", true); 

는 더 좋은 방법이 있나요?

+1

+1 나는 DirectoryEntry.InvokeSet() 메소드를 배웠다. 감사! =) –

답변

3

.NET 3.5에 있습니까 (아니면 업그레이드 할 수 있습니까?) ??

그렇다면 새로운 System.DirectoryServices.AccountManagement 네임 스페이스와 제공되는 모든 것을 확인하십시오. 우수한 소개는 MSDN article Managing Directory Security Principals in the .NET Framework 3.5입니다.

귀하의 경우, 어떤 식 으로든 UserPrincipal을 보유해야합니다.

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 
UserPrincipal me = UserPrincipal.Current; 

그런 다음 정말 사용하기 쉬운 속성과 메소드가 많습니다 (예 ::

bool isLockedOut = me.IsAccountLockedOut(); 

당신은 사용 잠긴 계정의 잠금을 해제 할 수 있습니다 :

me.UnlockAccount(); 

일반 오래된 System.DirectoryServices 물건보다 훨씬 쉽게!

+0

정말 고마워. – Germ

+0

누군가이 대답을 편집하여 'IsAccountLockedOut'이 설정할 수있는 속성이라는 마지막 코드 스 니펫 예제를 제거하십시오. 그 속성과 기능은 존재하지 않습니다. – user392139

+0

@ user392139 : 수정 됨 - 실수를 지적 해 주셔서 감사합니다. –

1

실제로 올바른 비트를 적절한 값으로 설정하려면 비트 연산을 수행해야합니다. 아래 링크에서 사용자 계정 컨트롤 플래그가 표시됩니다. 따라서 계정을 잠 그거나 잠금 해제하려면 속성에 대해 적절한 논리 연산을 수행하기 만하면됩니다.

다음 링크는 관심있어 할 것입니다.

How to (almost) everything in AD

나중에에 샘플 코드를 C# 코드를 추가해야한다.

다음 코드는 제안이다 :

public class AdUser { 
    private int _userAccountControl 
    public bool IsLocked { 
     get { 
      return _userAccountControl & UserAccountControls.Lock 
     } set { 
      if(value) 
       _userAccountControl = _userAccountControl | UserAccountControls.Lock 
      else 
       // Must reverse all the bits in the filter when performing an And operation 
       _userAccountControl = _userAccountControl & ~UserAccountControls.Lock 
     } 
    } 
    public enum UserAccountControls { 
     Lock = 0x10 
    } 
} 

아마도 내가 그것을 테스트하지 않았습니다,이 코드를 만들기 위해 몇 가지 변화를 고려해주십시오. 그러나 사용자 계정을 잠금 및 잠금 해제하는 것과 마찬가지로 코드가 비슷하거나 비슷해야합니다. 조만간 DirectoryEntry.Properties []를 사용하여 객체 클래스의 값으로 설정해야합니다.

편집

Active Directory 계정을 잠글 선호하는 방법은 무엇입니까?

int val = (int)directoryentry.Properties["userAccountControl"].Value; 
    directoryentry.Properties["userAccountControl"].Value = val | 0x0010; 

내 편집에 넣어 귀하의 질문에 대한 응답으로 대

directoryentry.InvokeSet("IsAccountLocked", true); 

, 나는이 내가 알고 적어도, 가장 간단한 방법은 있다고 말할 것입니다. 내가 염려하는 한 내가 코드 샘플에서했던 것처럼 코드를 감싸는 것을 선호하므로 다른 프로그래머는 비트 연산 등을 신경 쓰지 않아도된다. 그 (것)들을 위해, 그들은 목표를 조작하고있다.

이 두 가지 방법 중 가장 좋은 방법은 주로 선호도 문제입니다. 당신이 논리적 인 작업을 쉽게한다면, 일반적으로 선호됩니다. 그러나 비교해 보면, 두 번째 선택은 더 간단합니다.

관련 문제