Заметки о Windows и других программных продуктах Microsoft...

Сколько имен у пользователя в Active Directory

Сколько имен у пользователя в Active Directory

Одной из проблем в Active Directory является множество имен, которые можно использовать для обозначения или описания объекта. Большинство этих имен являются атрибутами (или свойствами) объекта. Путаница возникает из-за того, что один и тот же атрибут может иметь разное имя, в зависимости от используемого провайдера. Кроме того, имя одного атрибута может ссылаться на другой атрибут, что также не добавляет ясности. Ну и наконец, у атрибутов существуют методы (функции), которые вычисляют значение имени из других атрибутов.

Попробуем разобраться в этой ситуации на примере объекта пользователя. Для этого откроем оснастку Active Directory Users and Computers (ADUC) и создадим новую учетную запись. При создании мы указываем Имя (First name), Фамилию (Last name) и инициалы (Initials), из которых формируется полное имя (Full name). Ну и целых два имени для входа — User logon name и User logon name (pre-Windows 2000).

Создание учетной записи пользователя

 

А теперь перейдем к редактору атрибутов и посмотрим что получилось.  Для этого необходимо в оснастке ADUC в меню View отметить пункт Advanced Features.

включение отображения дополнительных опций в оснастке ADUC

 

Открываем редактор атрибутов и видим знакомые имена, но под совершенно разными названиями.

редактор атрибутов

 

Полному имени здесь соответствуют целых три атрибута —  name, displayName и cn. Можно подумать, что это одно и то же, но нет — это совершенно разные атрибуты пользователя.

Полное имя (name) и общее имя (Common name, cn) — это два разных атрибута, хотя возвращают они одно и то же значение. Это происходит потому, что атрибут name аналогичен относительному отличительному имени (Relative Distinguished Name, RDN), а RDN — это часть отличительного имени (Distinguished Name, DN). Так если DN равно ″CN=Иванов Иван Иванович,CN=Users,DC=Test,DC=local″, то RDN будет ″CN=Иванов Иван Иванович″. Отсюда получаем, что если cn = ″Иванов Иван Иванович″, то name = ″cn=Иванов Иван Иванович″. 

Получается довольно запутанно. Но если посмотреть с практической точки зрения, то можно сказать так — изменить значение атрибута cn мы не можем, оно всегда будет равно значению атрибута name.

Отображаемое имя (displayName) по умолчанию формируется по такому же принципу, как полное (name) и общее (cn) имена, однако не зависит от их значений. Для проверки изменим полное имя нашего пользователя. Как видите, полное и отображаемое имена изменяются независимо друг от друга.

Изменение имени пользователя

 

А в редакторе атрибутов видим, что вместе со значением атрибута name изменилось и значение cn, хотя его мы и не меняли.

изменение атрибутов name и cn

 

Кстати, кроме отображаемого имени (displayName) у пользователя есть еще отображаемое имя для печати (displayNamePrintable). Это два разных, независимых друг от друга атрибута.

отображаемое имя для печати

 

Примечание. Атрибут displayNamePrintable используется почтовым сервером Exchanhe при отправке сообщений вне организации. Его можно использовать в том случае, если необходимо в письме показывать имя пользователя, отличное от DisplayName (напр. англоязычный вариант).

Идем дальше. Имя соответствует атрибуту givenName, а фамилия — атрибуту sn (Surname). Может найдется и отчество? Давайте попробуем поискать его с помощью PowerShell, командой:

Get-ADUser ivanov_ii -Properties * | select *name

Нашелся атрибут с названием OtherName, возможно это оно и есть?

Вывод атрибутов с помощью powershell

 

Зададим этому атрибуту значение:

Get-ADUser ivanov_ii -Properties * | Set-ADUser -OtherName "Иванович"

и проверим что получилось. А получилось сразу два новых атрибута — OtherName и MiddleName, оба с заданным значением.

изменение атрибута с помощью powershell

 

На самом деле это просто два названия одного и того же атрибута:

cn: OtherName
ldapDisplayName: MiddleName

При этом если в PowerShell мы видим оба имени, то в оснастке ADUC отображается только одно MiddleName.

атрибут middleName

 

Переходим к именам входа (logon names), которых у пользователя тоже два.

имена входа пользователя

 

Если посмотреть в редакторе атрибутов, то User logon name (pre-Windows 2000) скрывается под именем sAMAccountname, а User logon name соответствует атрибуту userPrincipalName.

атрибуты имен входа пользователя

 

Давайте немного углубимся в детали и посмотрим, чем же отличаются эти два имени.

sAMAccountName — имя учетной записи SAM. Предназначено для для совместимости со старыми (до Windows 2000) операционными системами. Впрочем это не означает, что sAMAccountName не используется в качестве имени для входа в современных системах Windows. sAMAccountname должно быть уникальным в рамках домена, имеет ограничение в 20 символов и работает в сочетании с NETBIOS именем домена, например TEST\ivanov_ii. sAMAccountName является обязательным атрибутом пользователя.

userPrincipalName (UPN) — имя участника-пользователя. Это новый формат указания имени пользователя для входа в систему, основанный на интернет-стандарте RFC 822. Для входа используется сочетание имени пользователя с доменным суффиксом, например ivanov_ii@test.local. Имя участника-пользователя должно быть уникальным среди всех объектов-участников безопасности в лесу доменов. Максимальная длина UPN составляет 1024 символа. UPN не является обязательным атрибутом, оно может быть не назначено при создании учетной записи пользователя.

И еще два важных имени, которые есть у пользователя. Это DistinguishedName (различающееся имя) и CanonicalName (каноническое имя). Оба эти атрибута однозначно определяют объект в Active Directory.
Различающееся имя включает в себя относительное отличительное имя объекта (RDN), а также полный путь к контейнеру, содержащему объект в Active Directory, например  ″
CN=Иванов Иван Иванович,CN=Users,DC=Test,DC=local″. Каноническое имя — это то же различающееся имя объекта, но в каноническом виде, например ″test.local/Users/Иван Иванович Иванов″.

различающееся и каноническое имя

 

Примечание. CanonicalName является конструируемым атрибутом (constructed attribute). Такие атрибуты не хранятся явным образом в AD, а вычисляются на лету при получении соответствующих запросов.

 

Как видите, у пользователя в Active Directory множество различных имен. Чтобы немного их упорядочить я составил небольшую табличку, в которую внес все атрибуты пользователя, так или иначе имеющие отношение к его имени.

Имя атрибута Имя в оснастке ADUC Описание Значение (пример)
givenName First name Имя Иван
sn (SurName) Last name Фамилия Иванов
OtherName (middleName) Дополнительное имя (напр. отчество) Иванович
Initials Initials Инициалы И
CommonName (cn) Общее имя Иванов Иван Иванович
name Full name Полное имя Иванов Иван Иванович
displayName Display name Отображаемое имя Иванов Иван Иванович
DisplayNamePrintable Отображаемое имя для печати Иванов Иван Иванович
DistinguishedName (DN) Отличительное (уникальное) имя CN=Иванов Иван Иванович,CN=Users,DC=Test,DC=local
sAMAccountName User logon name (pre-Windows 2000) Имя входа пользователя (пред-Windows 2000) Ivanov_ii
userPrincipalName User logon name Имя входа пользователя Ivanov_ii@test.local
CanonicalName Canonical Name Имя объекта в каноническом формате test.local/Users/Иван Иванович Иванов
 

Ну а теперь главное) Как вы думаете, нужны ли все эти имена для создания учетной записи пользователя. Чтобы выяснить это, откроем редактор атрибутов и отфильтруем все атрибуты кроме обязательных (Mandatory). И оказывается, что для пользователя обязательными являются всего два имени — CommonName (cn) и sAMAccountName. Безо всех остальных пользователь может легко обойтись.

 необходимые атрибуты пользователя

 

На этом все. А все возможные атрибуты пользователя в схеме Active Directory можно посмотреть вот здесь : https://learn.microsoft.com/en-us/windows/win32/adschema/c-user?redirectedfrom=MSDN

 
 
Комментарии
Сергей

Спасибо, интересно!

Ответить