SID dalam bentuk 0x01020000000000052000000021020000
bukan SID "SQL Server". Itu hanyalah nilai biner yang mendasari SID. Bentuk lain yang dapat diambil (dan masih bernilai sama) adalah bentuk "string" ( SID String Format Syntax ), yang terlihat seperti S-1-5-32-545
(disebut sebagai format "SDDL" dalam beberapa dokumentasi MSDN, meskipun SDDL mencakup lebih dari sekadar SID). Keduanya adalah Windows SID yang sama. Setup ini mirip dengan bagaimana GUID memiliki representasi string yang berbeda dari nilai biner yang mendasarinya.
Ada fungsi built-in tidak berdokumen SID_BINARY
,, yang melakukan terjemahan ini dari bentuk SDDL ke dalam bentuk biner:
SELECT SID_BINARY(N'S-1-5-21-408552231-458724953-3089381293-513');
-- 0x01050000000000051500000027035A185996571BAD3724B801020000
Fungsi ini harus bekerja di sebagian besar tipe SID. Dua kueri berikut ini menunjukkan bahwa ia berfungsi dengan benar untuk Sertifikat dan Kunci Asimetris (Anda dapat memverifikasi terjemahan yang tepat karena kedua tampilan katalog sistem ini memiliki kedua bentuk SID di dalamnya). Dan itu akan bekerja untuk setiap Login yang dibuat dari Sertifikat dan Kunci Asimetris sebagai SID untuk mereka (baik Login dan Pengguna) adalah Cert / Kunci SID:
SELECT [name], [string_sid], [sid], SID_BINARY([string_sid])
FROM [master].sys.certificates;
SELECT [name], [string_sid], [sid], SID_BINARY([string_sid])
FROM [master].sys.asymmetric_keys;
Harap dicatat bahwa prinsipal tipe "S" (SQL Server Login / Pengguna SQL Server) dan "R" (Peran Server / Peran Database) tidak memiliki representasi SDDL karena mereka bukan Windows SID. Kedua jenis prinsipal ini memiliki SIDs layak SQL Server, jadi saya kira ini akan menjadi "SIDs SQL Server", meskipun perbedaannya (antara SID Windows dan SID Server SQL) bernilai dan bukan bentuk.
Jika Anda tidak ingin menggunakan fungsi tidak berdokumen, ini juga dapat dilakukan melalui SQLCLR menggunakan kelas .Identifier SecurityIdent .NET .
Fungsi SQLCLR yang sudah dibuat sebelumnya untuk melakukan terjemahan ini dapat ditemukan di versi gratis dari perpustakaan SQL # (yang saya buat): Convert_SddlSidToBinary (melakukan terjemahan yang sama seperti SID_BINARY
) dan Convert_BinarySidToSddl .