SIDs in Form von 0x01020000000000052000000021020000
sind keine "SQL Server" -SIDs. Das ist einfach der zugrunde liegende Binärwert der SID. Eine andere Form, die es annehmen kann (und immer noch den gleichen Wert hat), ist die "Zeichenfolge" -Form ( SID- Zeichenfolgenformatsyntax ), die aussieht S-1-5-32-545
(in einigen MSDN-Dokumentationen als "SDDL" -Format bezeichnet), obwohl SDDL mehr als nur behandelt SIDs). Beide haben dieselbe Windows SID. Dieses Setup ähnelt dem, wie GUIDs eine Zeichenfolgendarstellung haben, die sich von ihrem zugrunde liegenden Binärwert unterscheidet.
Es gibt eine undokumentierte integrierte Funktion, SID_BINARY
die diese Übersetzung vom SDDL-Formular in das Binärformular ausführt:
SELECT SID_BINARY(N'S-1-5-21-408552231-458724953-3089381293-513');
-- 0x01050000000000051500000027035A185996571BAD3724B801020000
Diese Funktion sollte für die meisten SID-Typen funktionieren. Die folgenden beiden Abfragen zeigen, dass es für Zertifikate und asymmetrische Schlüssel ordnungsgemäß funktioniert (Sie können die ordnungsgemäße Übersetzung überprüfen, da diese beiden Systemkatalogansichten beide Formen der SID enthalten). Und es würde für alle Anmeldungen funktionieren, die aus Zertifikaten und asymmetrischen Schlüsseln erstellt wurden, da die SIDs für diese (sowohl Anmeldungen als auch Benutzer) die SIDs für Zertifikate / Schlüssel sind:
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;
Beachten Sie, dass Principals vom Typ "S" (SQL Server-Anmeldung / SQL Server-Benutzer) und "R" (Serverrolle / Datenbankrolle) keine SDDL-Darstellung haben, da es sich nicht um Windows-SIDs handelt. Diese beiden Arten von Principals haben die entsprechenden SQL Server-SIDs. Ich denke, dies wären "SQL Server-SIDs", obwohl die Unterscheidung (zwischen Windows-SIDs und SQL Server-SIDs) von Wert und nicht von Form ist.
Wenn Sie keine undokumentierte Funktion verwenden möchten, kann dies auch über SQLCLR mithilfe der SecurityIdentifier-Klasse von .NET erfolgen .
Vorgefertigte SQLCLR-Funktionen für diese Übersetzungen finden Sie in der kostenlosen Version der SQL # -Bibliothek (die ich erstellt habe): Convert_SddlSidToBinary (führt dieselbe Übersetzung aus wie SID_BINARY
) und Convert_BinarySidToSddl .