创建用户

若要在Active Directory 域服务中创建用户,请在要放置用户的域的域容器中创建用户对象。 用户可以在域的根目录、组织单位或容器中创建用户。

创建用户对象时,还必须设置下表中列出的属性,将对象设置为由Active Directory 域服务和Windows 安全系统识别的法律用户。

Attribute 说明
快递 之 家 指定目录中用户对象的名称。 这是对象的相对可分辨名称(RDN)。
sAMAccountName 指定一个字符串,该字符串是用于支持以前版本的 Windows 中的客户端和服务器的名称。 sAMAccountName 应小于 20 个字符,以支持以前版本的 Windows 中的客户端。
sAMAccountName 在域中的所有安全主体对象中必须是唯一的。 应对域执行查询,以验证 sAMAccountName 是否在域中是唯一的。
sAMAccountName 是一个可选属性。 如果未指定任何值,服务器将创建随机 sAMAccountName 值。

还可以设置其他属性。 如果未在创建时显式设置这些属性,则使用以下用户属性设置默认值。

Attribute 说明
accountExpires 指定帐户何时过期。 默认值为 TIMEQ_FOREVER,指示帐户永远不会过期。
nTSecurityDescriptor 基于特定规则创建安全描述符。 有关详细信息,请参阅 如何在新目录对象上设置安全描述符。
objectCategory 指定用户类别。 默认值为“Person”。
name 指定用户名。 默认值为 cn 设置的值。
pwdLastSet 指定用户上次设置密码时间。 默认值为零,指示用户在下次登录时必须更改密码。
userAccountControl 包含用于确定用户的多个登录和帐户功能的值。
默认情况下,设置了以下标志:
  • UF_ACCOUNTDISABLE - 帐户已禁用。
  • UF_PASSWD_NOTREQD - 无需密码。
  • UF_NORMAL_ACCOUNT - 表示典型用户的默认帐户类型。
memberOf 指定用户是其直接成员的组或组。 默认值为“域用户”。

用户是通过绑定到所需容器,然后使用下列方法之一创建的。 在用户提交到服务器之前,必须设置 cnsAMAccountName 属性。

方法 说明
IADsContainer.Create cn 属性取自 bstrRelativeName 参数。 必须通过调用 IADs.SetInfo 提交新用户,否则不会创建该对象。 有关详细信息,请参阅 用于创建用户的示例代码。
IDirectoryObject::CreateDSObject cn 属性取自 pszRDNName 参数。 调用 CreateDSObject,将提交新用户。 有关详细信息,请参阅 用于创建用户的示例代码。
DirectoryEntries.Add cn 属性取自名称参数。 必须通过调用 DirectoryEntry.CommitChanges 提交新用户对象,否则不会创建该对象。 有关详细信息,请参阅 “添加目录对象”。

必须先将新用户提交到服务器,然后才能修改 cn sAMAccountName 以外的任何属性。 这是因为在提交用户之前,用户帐户实际上不存在。 如果为服务器上不存在的对象检索或修改属性,将发生错误。 这包括调用 IADsUser.SetPassword 方法。 例如,使用 IADsContainer.Create 创建用户时,将遵循以下序列:

  1. 调用 IADsContainer.Create,以使用指定的 cn 在本地缓存中创建用户。
  2. 使用 IADs.Put 方法将 sAMAccountName 属性设置为所需的值
  3. 现在修改其他属性,例如 userAccountControl 此限制也适用于 ADSI 属性,例如 IADsUser.AccountDisabled 和 IADsUser.SetPassword方法。
  4. 调用 IADs.SetInfo 将新用户提交到服务器。

创建新用户帐户时,默认禁用该帐户。 必须手动或以编程方式启用帐户。 若要以编程方式启用用户帐户,请从 userAccountControl 属性中删除ADS_UF_ACCOUNTDISABLE标志。

创建新用户帐户时,帐户的 userAccountControl 属性会自动设置UF_PASSWD_NOTREQD标志,指示帐户无需密码。 如果创建帐户的域的安全策略需要所有用户帐户的密码,则必须帐户的 userAccountControl 属性中删除UF_PASSWD_NOTREQD标志。

用于创建用户的示例代码