SIDs na forma de 0x01020000000000052000000021020000
não são SIDs "SQL Server". Esse é simplesmente o valor binário subjacente do SID. Outro formato que pode assumir (e ainda ter o mesmo valor) é o formato "string" ( SID String Format Syntax ), que parece S-1-5-32-545
(referido como sendo o formato "SDDL" em algumas documentações do MSDN, embora o SDDL cubra mais do que apenas SIDs). Ambos são os mesmos Windows SID. Essa configuração é semelhante à maneira como os GUIDs têm uma representação de sequência diferente do valor binário subjacente.
Há uma função interna não documentada SID_BINARY
, que faz essa conversão do formulário SDDL para o formato binário:
SELECT SID_BINARY(N'S-1-5-21-408552231-458724953-3089381293-513');
-- 0x01050000000000051500000027035A185996571BAD3724B801020000
Essa função deve funcionar na maioria dos tipos de SID. As duas consultas a seguir mostram que ele funciona corretamente para certificados e chaves assimétricas (você pode verificar a tradução adequada, pois essas duas visualizações de catálogo do sistema têm as duas formas do SID). E funcionaria para todos os logins criados a partir de certificados e chaves assimétricas, pois os SIDs desses (logins e usuários) são os SIDs de certificado / chave:
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;
Observe que os princípios dos tipos "S" (Logon do SQL Server / Usuário do SQL Server) e "R" (Função do servidor / Função do banco de dados) não possuem uma representação SDDL, pois não são SIDs do Windows. Estes dois tipos de diretores têm SQL Server SID properietary, então eu acho que estes seriam "Servidor SID SQL", embora a distinção (entre o Windows SID e SQL Server SID) é de valor e não a forma.
Se você não deseja usar uma função não documentada, isso também pode ser realizado via SQLCLR usando a classe SecurityIdentifier do .NET .
As funções SQLCLR pré-fabricadas para fazer essas traduções podem ser encontradas na versão gratuita da biblioteca SQL # (que eu criei): Convert_SddlSidToBinary (faz a mesma tradução que SID_BINARY
) e Convert_BinarySidToSddl .