データベースサーバーにユーザーが作成したストアドプロシージャがあり、Active Directoryにユーザー情報を照会し、データをテーブルに挿入します。データベースサーバーから操作を削除し、外部呼び出し(PowerShellまたはC#)で最初のADクエリとデータ挿入を実行したいと思います。
ストアドプロシージャは、sp_OAプロシージャを使用して、実際のADクエリを実行するADsDSOObjectを作成します。ADsDSOObjectはデフォルトでobjectSIDを16進数で返しているようです。以下は出力値の例です。
-- ADsDSOObject: 0x010500000000000515000000D94242061941C67FC9004A20EE030000
<objectSID>
PowerShellを介してADSIクエリを実行すると、objectSIDのバイト配列が取得され、.NET System.Security.Principal.SecurityIdentifier( 、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#を使用して、バイト配列を16進数に変換する方法、または文字列SID表現を16進数に変換する方法を知っている人はいますか?