LDAP может запросить на AD, обеспечивают netbios доменное имя для единственной учетной записи при использовании Глобального Каталога?

Понятие "исчерпывания имен" кажется абсолютно внешним мне.

Вы обеспечили бы образец того, как это могло бы произойти?

11
задан 10 February 2011 в 21:48
5 ответов

Для ответа на последний вопрос, необходимо смочь проверить название NetBios вручную путем проверки раздела Configuration и затем Разделов Каталога в ADSIEdit:

CN=MYNETBIOSNAME,CN=Partitions,CN=Configuration,DC=mydomain,DC=internal

Это имеет обоих name и netBIOSName свойства. Иначе я думаю, что необходимо было бы получить его от fqdn/DN, как squillman предполагает.

3
ответ дан 2 December 2019 в 21:52

Я думаю, что понял это. Используя Редактирование ADSI можно посмотреть на свойства на объекте (например, пользователь), но по умолчанию оно отфильтровывало "созданные" атрибуты. Используя кнопку Filter в правом нижнем углу экрана свойств я смог показать эти дополнительные атрибуты.

"msDS-PrincipalName", кажется, имеет" [netbios доменное имя] \[sAMAccountName]" как его значение.

Если я вхожу в AD Пользователей и Компьютеры и меняю "Пользовательское имя входа в систему", от "gwasington@test.kirkdev.local" до "gwash2ington@test.kirk2dev.local" это влияет на атрибут "userPrincipalName", но не атрибут "msDS-PrincipalName". Это хорошо в моем случае, потому что моя другая система (SharePoint) не распознает это изменение также.

Если я вхожу в AD Пользователей и Компьютеры и меняю "Пользовательское имя входа в систему (предварительные Windows 2000)" от "KIRKDEV\gwashington" до "KIRKDEV\g2washington" (примечание, что я не могу изменить первую часть), это не влияет на атрибут "userPrincipalName", но действительно влияет на атрибут "msDS-PrincipalName". Это точно, что я хочу, потому что моя другая система (SharePoint) действительно распознает это изменение.

Примечание стороны: Я сказал, что SharePoint действительно распознает изменение, но это - то, только если пользователь никогда не входил в тот набор сайта SharePoint прежде. После того как пользователь вошел в набор сайта SharePoint, tp_Login поле в таблице UserInfo установлено со значением "msDS-PrincipalName", и это, кажется, не изменяется. Так, мне, вероятно, придется найти способ вынудить это быть измененным или просто сказать, что этот сценарий не поддерживается.

5
ответ дан 2 December 2019 в 21:52

Необходимо будет проанализировать его из любого dn (distinguishedName) или AdsDSPath атрибуты. Объекты доменного имени снабжаются префиксом "DC=" в этих атрибутах. Крайнее левое DC= будет содержать Ваше netbios доменное имя.

Например: cn=myuser,ou=users,dc=mydomain,dc=mycompany,dc=com

mydomain netbios доменное имя.

Править:
Как Brian Desmond указывает, это - не обязательно авторитетный способ найти фактическое имя netbios, это - просто совпадение, что они обычно коррелируют. См. ответ BoyMars для авторитетного пути.

1
ответ дан 2 December 2019 в 21:52

Для приложения? Microsoft делает это довольно простым в.NET. Это должно предоставить Вам список имен домена Netbios, которые можно использовать для создания списка пользовательских объектов с именами домена DN/DNS/Netbios или словарей перекрестных ссылок.

Кроме того, что определяет, доступен ли атрибут в Глобальном Каталоге, (еще один) атрибут, названный isMemberOfPartialAttributeSet. Используя Microsoft SysInternals AD Explorer, можно искать контейнер Схемы в домене и искать любой объект, который имеет isMemberOfPartialAttributeSet = верный для наблюдения всех атрибутов, которые доступны для запроса GC.

using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;

private void GetNetbiosNamesTest()
{
    DomainCollection domains = Forest.GetCurrentForest().Domains;
    foreach (Domain domain in domains)
    {
        Console.WriteLine("Domain Netbios name: {0}", this.GetDomainNetBiosName(domain));
    }
}

private string GetDomainNetBiosName(Domain domain)
{
    ForestRootDirectoryEntry = Forest.GetCurrentForest().RootDomain.GetDirectoryEntry();
    string forestConfigurationBindPath = String.Format("LDAP://CN=Partitions,CN=Configuration,{0}", ForestRootDirectoryEntry.Properties["distinguishedName"].Value);
    ForestRootConfigurationDirectoryEntry = new DirectoryEntry(forestConfigurationBindPath);

    string netBiosName = String.Empty;

    using (DirectorySearcher directorySearcher = new DirectorySearcher(ForestRootConfigurationDirectoryEntry))
    {
        directorySearcher.Filter = String.Format("(&(nETBIOSName=*)(dnsRoot={0}))", domain.Name);
        directorySearcher.PropertiesToLoad.AddRange(new String[] { "dnsRoot", "nETBIOSName" });
        var result = directorySearcher.FindOne();

        if ((result != null) && (result.Properties.Contains("nETBIOSName"))) netBiosName = result.Properties["nETBIOSName"][0].ToString();
    }
    return netBiosName;
}
3
ответ дан 2 December 2019 в 21:52

Если у Вас есть Пользовательское Имя Принципала или DN, можно использовать библиотеку COM ActiveDS для перевода значений. Ниже пример для перевода UserPrincipalName в NT4 (NetBios) имя.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ActiveDs;

namespace Foo.Repository.AdUserProfile
{
    public class ADUserProfileValueTranslate
    {
        public static string ConvertUserPrincipalNameToNetBiosName(string userPrincipleName)
        {
            NameTranslate nameTranslate = new NameTranslate();
            nameTranslate.Set((int)ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_USER_PRINCIPAL_NAME, userPrincipleName);
            return nameTranslate.Get((int) ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_NT4);
        }
    }
}
0
ответ дан 2 December 2019 в 21:52

Теги

Похожие вопросы