Какова максимальная длина SID в формате SDDL - PullRequest
18 голосов
/ 17 июля 2009

Я встроил проверку подлинности Active Directory в свое приложение и планирую связать внутренние учетные записи моего приложения с SID домена пользователя. Мне проще работать со строковым форматом sid, чем с байтовым массивом, поэтому я планировал сохранить его в базе данных в виде строки. Как долго я должен заполнить поле, чтобы SID не обрезался?

Ответы [ 2 ]

31 голосов
/ 25 ноября 2009

У меня был тот же вопрос, и я считаю, что правильный ответ:

  • ID в виде строки: 184 символа или varchar (184) в SQL Server
  • SID в виде строки шестнадцатеричных цифр: 136 символов или varchar (136) в SQL Server
  • SID в двоичном виде: 68 байт или varbinary (68) в SQL Server

Я сам не проверял математику, но техника, использованная здесь, выглядит корректно: https://groups.google.com/d/msg/microsoft.public.dotnet.security/NpIi7c2Toi8/31SVhcepY58J

См. Программу, написанную Расселом Мангелем 19 августа 2006 г., также скопированную сюда для справки:

Итак, ответ на мой вопрос:

varbinary (68) - чистый двоичный файл
varchar (136) - (68 * 2) = hexString
varchar (184) - строка SID

Я написал небольшую программу для тестирования, обратите внимание, что .NET 2.0 имеет SecurityIdentifier.MaxBinaryLength, I не знал об этом.

Console.WriteLine("SID Min. num Bytes: {0}",
SecurityIdentifier.MinBinaryLength);
Console.WriteLine("SID Max. num Bytes: {0}",
SecurityIdentifier.MaxBinaryLength);
Byte[] bytes = new byte[SecurityIdentifier.MaxBinaryLength];
for (Int32 i = 0; i < bytes.Length; i++)
{
    bytes[i] = 0xFF;
}
bytes[0] = 0x01; // Must be 1
bytes[1] = 0x0F; // Max 15 (base10)
SecurityIdentifier sid = new SecurityIdentifier(bytes, 0);
String sidString = sid.ToString();
Console.WriteLine("Max length of SID in String format: {0} ", sidString.Length);
Console.WriteLine(sidString);

Результаты

SID Min. num Bytes: 8
SID Max. num Bytes: 68
Max length of SID in String format: 184
S-1-281474976710655-4294967295-4294967295-4294967295-4294967295-4294967295-
  4294967295-4294967295-4294967295-4294967295-4294967295-4294967295-
  4294967295-4294967295-4294967295-4294967295 
0 голосов
/ 31 декабря 2018
  1. Для строкового формата общий ответ 184 неверен. Если авторитетность составляет от 32 до максимум 48 битов, то она должна быть представлена ​​в виде шестнадцатеричной строки, а не десятичной, с добавлением «0x». Это означает, что вместо 15-символьной строки, необходимой для представления максимальных 48 битов в десятичной системе, вам фактически нужна строка (48 бит / 4 бита + 2) из ​​14 символов, то есть (184 - 15 + 14) для всех целых 183 символа Строка SID. Для менее 32 бит используется десятичный формат (максимум 10 десятичных символов).
...