【发布时间】:2011-03-31 13:38:47
【问题描述】:
我在尝试创建新用户时不断收到此错误。
这是我的代码中出现错误的部分:
Public Function CreateAdAccount(ByVal sUserName As String, ByVal sPassword As String, ByVal sFirstName As String, ByVal sLastName As String, ByVal sGroupName As String) As Boolean
Dim bResult As Boolean = True
Dim dirEntry As New DirectoryEntry(ADFullPath)
SetCultureAndIdentity()
' 1. Create user account
Dim adUsers As DirectoryEntries
Dim newUser As DirectoryEntry
If Not UserExists(sUserName) Then
Try
adUsers = dirEntry.Children
newUser = adUsers.Add("CN=" & sUserName, "user")
' 2. Set properties
SetProperty(newUser, "givenname", sFirstName)
SetProperty(newUser, "sn", sLastName)
SetProperty(newUser, "SAMAccountName", sUserName)
SetProperty(newUser, "userPrincipalName", sUserName)
SetProperty(newUser, "displayName", sFirstName & " " & sLastName)
Try
newUser.CommitChanges()
Catch ex As Exception
Err.Raise(4938, "clsSource", ex.Message)
End Try
错误发生在这一行:newUser.CommitChanges()
我似乎无法弄清楚它为什么会不断损坏。我试图以管理员身份登录 AD 并创建一个新用户。效果很好……
【问题讨论】:
-
代码在什么上下文环境下实际运行?这是一个 Web 应用程序/Windows 应用程序吗?如果它作为 web 应用程序运行,则 web 应用程序运行的上下文,即应用程序池可能没有足够的权限来 AD
-
它是一个网络应用程序。我没有意识到我必须把它放在不同的应用程序池中......我现在看看。在 IIS 或 AD 中设置池权限?
-
好吧,您不必须将它放在不同的应用程序池中,您有几个选择,您可以在拨打电话之前模拟身份并且不更改应用程序池设置,或者您可以创建一个单独的应用程序池并使该应用程序池在具有 AD 权限的域帐户的上下文下运行,无论哪种方式,由于 Web 应用程序将查询广告,调用所在的安全上下文需要拥有适当的权利,有几种不同的方法可以解决这个问题。
-
我在我的网络配置中添加了“模拟”,看起来它有效:)
-
另外,您知道,现在整个应用程序将在访问用户的凭据下运行,这在某些情况下可能是不可取的,仅供参考。
标签: .net active-directory