SID ở dạng 0x01020000000000052000000021020000
không phải là SID "SQL Server". Đó chỉ đơn giản là giá trị nhị phân cơ bản của SID. Một dạng khác mà nó có thể có (và vẫn là cùng một giá trị) là dạng "chuỗi" ( Cú pháp định dạng chuỗi SID ), trông giống như S-1-5-32-545
(được gọi là định dạng "SDDL" trong một số tài liệu MSDN, mặc dù SDDL không chỉ bao gồm SID). Cả hai đều là Windows SID giống nhau. Thiết lập này tương tự như cách GUID có biểu diễn chuỗi khác với giá trị nhị phân cơ bản của chúng.
Có một hàm dựng sẵn không có giấy tờ SID_BINARY
, dịch này chuyển từ dạng SDDL sang dạng nhị phân:
SELECT SID_BINARY(N'S-1-5-21-408552231-458724953-3089381293-513');
-- 0x01050000000000051500000027035A185996571BAD3724B801020000
Chức năng này sẽ hoạt động trên hầu hết các loại SID. Hai truy vấn sau đây cho thấy nó hoạt động chính xác cho Chứng chỉ và Khóa không đối xứng (bạn có thể xác minh bản dịch phù hợp vì hai chế độ xem danh mục hệ thống này có cả hai dạng SID trong đó). Và nó sẽ hoạt động đối với mọi Thông tin đăng nhập được tạo từ Chứng chỉ và Khóa không đối xứng vì SID cho những người đó (cả Đăng nhập và Người dùng) đều là Chứng chỉ / Khóa 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;
Xin lưu ý rằng các nguyên tắc loại "S" (Đăng nhập máy chủ SQL / Người dùng máy chủ SQL) và "R" (Vai trò máy chủ / Vai trò cơ sở dữ liệu) không có đại diện SDDL vì chúng không phải là SID Windows. Hai loại hiệu trưởng này có SIDs thích hợp của SQL Server, vì vậy tôi đoán chúng sẽ là "SIDs SQL Server", mặc dù sự khác biệt (giữa SID của Windows và SID của SQL Server) có giá trị và không phải là hình thức.
Nếu bạn không muốn sử dụng một chức năng không có giấy tờ, điều này cũng có thể được thực hiện thông qua SQLCLR bằng cách sử dụng lớp SecurityIdentifier của .NET .
Các hàm SQLCLR được tạo sẵn để thực hiện các bản dịch này có thể được tìm thấy trong phiên bản Miễn phí của thư viện SQL # (mà tôi đã tạo): Convert_SddlSidToBinary (thực hiện cùng một bản dịch như SID_BINARY
) và Convert_BinarySidToSddl .