gpt4 book ai didi

sql-server - ADsDSOObject和.NET为objectSID返回不同的值(类型)

转载 作者:行者123 更新时间:2023-12-03 00:04:51 26 4
gpt4 key购买 nike

我在数据库服务器中有一个用户创建的存储过程,该存储过程查询 Activity 目录以获取用户信息并将数据插入表中。我们希望从数据库服务器中删除该操作,并在外部调用(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表示形式转换为十六进制?

最佳答案

这是一个解决方案:

PS> $sid = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-105005785-2143699225-541720777-501")
PS> $c = New-Object 'byte[]' $sid.BinaryLength
PS> $sid.GetBinaryForm($c, 0)

$ c包含您需要的字节数组。

关于sql-server - ADsDSOObject和.NET为objectSID返回不同的值(类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com