Как я могу преобразовать от SID до имени учетной записи в C#

Выполните следующие шаги:

  1. Перейдите в PHPMyAdmin
  2. Выберите свою базу данных
  3. Выберите свою таблицу
  4. Вверху menu Нажмите «Triggers»
  5. Нажмите «Изменить», чтобы отредактировать триггер
  6. Измените определитель с [user @ localhost] на root @ localhost

Надеюсь, это поможет

52
задан 31 January 2009 в 15:56
поделиться

7 ответов

Объект SecurityReference Переводит метод, действительно работает над нелокальным SIDs, но только для учетных записей домена. Для учетных записей, локальных для другой машины или в недоменной установке, Вам был бы нужен к PInvoke функциональный LookupAccountSid, указывающий определенное название машины, на котором должен быть выполнен взгляд.

18
ответ дан Stephen Martin 7 November 2019 в 19:30
поделиться

Получить текущий домен:

System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain();

Получить запись каталога от ldap и имя домена:

DirectoryEntry de = new DirectoryEntry(string.Format("LDAP://{0}", domain));

Получить sid от ActiveDirectoryMembershipProvider ActiveDirectoryMembershipUser:

ActiveDirectoryMembershipUser user = (ActiveDirectoryMembershipUser)Membership.GetUser();
var sid = (SecurityIdentifier)user.ProviderUserKey;

Получить имя пользователя из SecurityIdentifier:

(NTAccount)sid.Translate(typeof(NTAccount));

Выполните поиск в каталоге ActiveDirectory с записью в каталоге домена и именем пользователя:

DirectorySearcher search = new DirectorySearcher(entry);
        search.Filter = string.Format("(SAMAccountName={0})", username);
        search.PropertiesToLoad.Add("Name");
        search.PropertiesToLoad.Add("displayName");
        search.PropertiesToLoad.Add("company");
        search.PropertiesToLoad.Add("homePhone");
        search.PropertiesToLoad.Add("mail");
        search.PropertiesToLoad.Add("givenName");
        search.PropertiesToLoad.Add("lastLogon");
        search.PropertiesToLoad.Add("userPrincipalName");
        search.PropertiesToLoad.Add("st");
        search.PropertiesToLoad.Add("sn");
        search.PropertiesToLoad.Add("telephoneNumber");
        search.PropertiesToLoad.Add("postalCode");
        SearchResult result = search.FindOne();
        if (result != null)
        {
            foreach (string key in result.Properties.PropertyNames)
            {
                // Each property contains a collection of its own
                // that may contain multiple values
                foreach (Object propValue in result.Properties[key])
                {
                    outputString += key + " = " + propValue + ".<br/>";
                }
            }
        }

В зависимости от данных в вашем активном каталоге вы получите различные ответы на выходе.

Вот сайт, на котором есть все необходимые мне пользовательские свойства:

0
ответ дан 7 November 2019 в 09:30
поделиться

Посмотрите здесь для хорошего ответа:

лучший способ разрешить имя пользователя дисплея SID?

суть его является этим битом:

string sid="S-1-5-21-789336058-507921405-854245398-9938";
string account = new System.Security.Principal.SecurityIdentifier(sid).Translate(typeof(System.Security.Principal.NTAccount)).ToString();

Этот подход работает на меня для нелокального SID по активному каталогу.

41
ответ дан Community 7 November 2019 в 19:30
поделиться

Ох, затем возможно, что вызов LDAP не работает, потому что Вы не могли бы быть в среде Active Directory. Если это верно, затем каждая из Ваших машин ответственна за свое собственное хранилище идентификационных данных. И Ваш первый пример кода не работает по сети, потому что машина, на которой Вы выполняете свой код, не знает, как разрешить SID, который только имеет смысл на удаленной машине.

действительно необходимо проверить, являются ли машины частью Active Directory. Вы знали бы это во время процесса входа в систему. Или можно проверить щелчок правой кнопкой по "My Computer", выбрать "Свойства", вкладку "Computer Name", затем видеть, является ли компьютер частью домена.

1
ответ дан barneytron 7 November 2019 в 19:30
поделиться

Большой. Я запер некоторый LookupAccountSid () код отсюда:

http://www.pinvoke.net/default.aspx/advapi32.LookupAccountSid

И это работало, хотя я должен был обеспечить имя хоста сам. В случае пути UNC я могу просто взять первый компонент его. Когда это - сетевой диск, я использую этот код для преобразования пути к UNC один:

http://www.wiredprairie.us/blog/index.php/archives/22

Это, кажется, работает, таким образом, это - то, как я сделаю это, если кто-то не придумает ситуацию, в которой первый компонент пути UNC не является именем хоста...

Спасибо всем за Вашу справку.

1
ответ дан 7 November 2019 в 19:30
поделиться

Я совершенно уверен, что Вы сможете использовать принятый ответ отсюда: Определяют имя учетной записи LocalSystem с помощью C#

В основном, можно перевести экземпляр класса SecurityIdentifier для ввода NTAccount, от которого можно получить имя пользователя. В коде:

using System.Security.Principal;

SecurityIdentifier sid = new SecurityIdentifier("S-1-5-18");
NTAccount acct = (NTAccount)sid.Translate(typeof(NTAccount));
Console.WriteLine(acct.Value);
-3
ответ дан Community 7 November 2019 в 19:30
поделиться

Этот - stumper. Вы находитесь в праве среды Active Directory? Просто проверка:)

Во всяком случае, вместо того, чтобы связать с sid. Значение,

string str = "LDAP://<SID=" + sid.Value + ">";

я попытался бы преобразовать массив байтов SID в Строка Октета и связал бы с этим вместо этого.

существует сладкий пример здесь на странице 78. Это получит Вас ближе. Честно говоря, я не попытался связать с SID прежде. Но у меня была привязка успеха с GUID пользователя, хотя :)

Удача и сообщила мне, как это идет.

0
ответ дан barneytron 7 November 2019 в 19:30
поделиться
Другие вопросы по тегам:

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