我正在编写一个链接到Active Directory的应用程序,我需要将userPrincipalName存储在数据库表中,但我不知道该字段需要多大。
On MSDN,没有给出长度,RFC 822也没有。现在,在我恢复到具有已定义长度(sAMAccountName小于20个字符,NETBIOS域名最多15个字符)的DOMAIN \ Username之前,我想知道是否有人知道标准的限制是什么,或者在Windows 2003和Windows 2008域中实现。
答案 0 :(得分:7)
在Win2k3 SP2上,它允许我创建的最长的userPrincipalName是1013个字符。
答案 1 :(得分:1)
否则无法更改Active Directory登录名中的字符长度。
答案 2 :(得分:1)
今天试图为自己回答这个问题时,我偶然发现了一个已记录的答案。
2.381 Attribute userPrincipalName通过以下方式定义userPrincipalName:
cn: User-Principal-Name
ldapDisplayName: userPrincipalName
attributeId: 1.2.840.113556.1.4.656
attributeSyntax: 2.5.5.12
omSyntax: 64
isSingleValued: TRUE
schemaIdGuid: 28630ebb-41d5-11d1-a9c1-0000f80367c1
systemOnly: FALSE
searchFlags: fATTINDEX
rangeUpper: 1024
attributeSecurityGuid: e48d0154-bcf8-11d1-8702-00c04fb96050
isMemberOfPartialAttributeSet: TRUE
systemFlags: FLAG_SCHEMA_BASE_OBJECT | FLAG_ATTR_REQ_PARTIAL_SET_MEMBER
这根据rangeUpper属性定义将最大长度指定为1024。
在这种情况下,与Unicode代码点相反,1024表示八位字节(字节),因为omSyntax: 64
在LDAP Representations中定义为String(Unicode)
,并引用了描述它的引用RFC 2252 LDAPv3 Attributes 6.10 Directory String如下:
6.10。目录字符串
(1.3.6.1.4.1.1466.115.121.1.15 DESC'目录字符串')
此语法中的字符串以ISO 10646的UTF-8格式编码( Unicode的超集)。服务器和客户端必须做好准备 接收任意Unicode字符的编码,包括 目前尚未分配给任何字符集的字符。
由于UTF-8是可变长度编码,这意味着最大字符串长度是很多代码点,您可以将UTF-8编码为1024个八位字节(字节)。即:对于1024个代码点的纯ASCII字符串,对于任何非ASCII字符的字符串来说,其含义都小于1024个代码点。