当前位置:  开发笔记 > 编程语言 > 正文

SDDL格式的SID的最大长度是多少

如何解决《SDDL格式的SID的最大长度是多少》经验,为你挑选了1个好方法。

我正在将Active Directory身份验证构建到我的应用程序中,并且我计划将应用程序的内部帐户链接到用户的域SID.我更容易使用sid的字符串格式而不是字节数组,所以我打算将它作为字符串存储在数据库中.我应该多长时间来确保SID不会被截断?



1> Emil Lerch..:

我有同样的问题,我相信正确的答案是:

ID为字符串:184个字符,或SQL Server中的varchar(184)

SID为十六进制数字的字符串:136个字符,或SQL Server中的varchar(136)

SID为二进制:68字节,或SQL Server中的varbinary(68)

我没有检查算算自己,但这里所使用的技术看起来有效: https://groups.google.com/d/msg/microsoft.public.dotnet.security/NpIi7c2Toi8/31SVhcepY58J

参考Russell Mangel于2006年8月19日撰写的程序,也在此处复制以供参考:

所以我的问题的答案是:

varbinary(68) - 纯二进制
varchar(136) - (68*2)= hexString
varchar(184) - SID字符串

我写了一个小程序来测试,注意.NET 2.0有SecurityIdentifier.MaxBinaryLength,我不知道这个.

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 

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有