我在数据库服务器中有一个用户创建的存储过程,它查询活动目录以获取用户信息并将数据插入表中。我们希望从数据库服务器中删除该操作,并在外部调用(PowerShell 或 C#)中执行初始 AD 查询和数据插入。
存储过程使用 sp_OA 过程创建 ADsDSOObject 来执行实际的 AD 查询。默认情况下,ADsDSOObject 似乎以十六进制返回 objectSID。以下是示例输出值。
-- ADsDSOObject: 0x010500000000000515000000D94242061941C67FC9004A20EE030000
当我通过 PowerShell 运行 ADSI 查询时,我得到了 objectSID 的字节数组,我可以通过 .NET System.Security.Principal.SecurityIdentifier ( <objectSID>
, 0) 将其转换为字符串。
这会以正确的 SID 形式返回实际的字符串 SID 标识符。
-- Byte Array: {1, 5, 0, 0, 0, 0, 0, 5, 21, 0, 0, 0, 217, 66, 66, 6, 25, 65, 198, 127, 201, 0, 74, 32, 245, 1, 0, 0}
-- .NET SID: S-1-5-21-105005785-2143699225-541720777-501
但是,我需要将数据存储为二进制,以便用 .NET 解决方案替换数据库中的过程,以避免应用程序发生任何更改。
使用 PowerShell 或 C#,有谁知道如何将字节数组转换为十六进制或如何将字符串 SID 表示转换为十六进制?