2014-07-22 2 views
0

나는 AD에서 새로운 사용자를 만들려고합니다. 나는 그 같은 userWithWMIAccessrightsPassword 설정호출 대상에 의해 예외가 발생했습니다. UserPrincipal에서 던졌습니다

 using (var context = new PrincipalContext(ContextType.Domain, this.DomainName, userWithWMIAccessRights, userWithWMIAccessrightsPassword)) 
     { 
      UserPrincipal user = new UserPrincipal(context); 
      user.DisplayName = Newusername; 
      user.Name = Newusername; 
      user.Enabled = true; 
      user.SetPassword(passwordOfThenewUser); 
      user.Save(); //<-- throws exception InnerException = {"Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"} 
      return user; 
     } 

: 나는 다음과 같은 코드를 사용하고

  • userWithWMIAccessrightsPassword이 Enterpirse 관리자, 도메인 관리자 및 도메인 사용자
  • 의 구성원은 명령 프롬프트에서 dcomcnfg를 작업 부족한 .
  • 서비스 목록에서 선택된 Windows Management Instrumentation.
  • 보안 탭에서 userWithWMIAccessrightsPassword 계정을 추가하여 사용자 지정 권한을 업데이트하고 그에게 완전한 권한을 부여했습니다.

웹 응용 프로그램은 AD 실행과 동일한 컴퓨터에서 호스팅됩니다. Visual Studio로 웹 응용 프로그램을 디버깅 할 때 사용자와 암호가 문제없이 설정됩니다.

웹 응용 프로그램을 AD 컴퓨터에 배포 할 때 암호를 설정하는 코드 줄에서 사용자를 만드는 함수가 { "액세스가 거부되었습니다 (HRESULT : 0x80070005 (E_ACCESSDENIED) 예외)"} 예외를 throw합니다. 사용자가 만들어지고 활성화되지 않고 암호도 없습니다.

PrincipalContext가 완전한 권한을 가진 AD 사용자를 사용하는 경우 왜 액세스가 거부됩니까?

답변

0

좋아, 그것은 PrincipalContext! = impersionating 것 같습니다.

내가 함께 문제를 해결할 수 :

1)는 PrincipalContext의 컨테이너를 설정하고있는 ValidateCredentials (this.UserName, this.Password, ContextOptions.Negotiate)로 전화하십시오.

2)

using (new Impersonator(this.UserName, this.DomainName, this.Password, LogonType.LOGON32_LOGON_SERVICE, LogonProvider.LOGON32_PROVIDER_WINNT40)) 
     { 
      using (var context = CreatePrincipalContext()) 
      { 
       UserPrincipal user = new UserPrincipal(context); 
       user.DisplayName = username; 
       user.Name = username; 
       user.Enabled = true; 
       user.SetPassword(password); 
       user.Save(); 
       return user; 
      } 
     } 

하지만 여전히 Principalcontext와 장자 클래스의 필요성에 대한 혼란 스러워요. PrincipalContext가 impersionate 클래스를 대체한다고 생각했습니다.

관련 문제