Tôi đã luôn nghĩ rằng người dùng dbo
là chủ sở hữu thực sự của cơ sở dữ liệu.
Đó là (hoặc ít nhất nên là) chính xác. Tên "dbo" của Người dùng đó không bao giờ thay đổi, nhưng SID cơ bản không phụ thuộc vào người đã tạo cơ sở dữ liệu hoặc ai được đặt thông qua sp_changedbowner (mặc dù, và bao gồm, SQL Server 2005) hoặc ALTER AUTHORIZATION (bắt đầu bằng SQL Máy chủ 2008).
Trong cả ba trường hợp đó, bản ghi trong sys.databases
cũng được thay đổi để chúng được giữ đồng bộ. Tuy nhiên, khi khôi phục Cơ sở dữ liệu, từ một hệ thống khác hoặc từ cùng một Trường hợp nhưng từ một DB được sao lưu / tách ra trước một trong hai lệnh SQL đó được thực thi để thay đổi chủ sở hữu, sau đó khi RESTORE hoặc đính kèm, sẽ có là một sự không phù hợp giữa owner_sid
cột trong sys.databases
và "dbo" sid
trong sys.database_principals
DB đó.
Theo như tôi biết, bản ghi trong sys.database_principals
mỗi DB là chủ sở hữu thực sự và owner_sid
cột trong sys.databases
là vấn đề lưu giữ / thuận tiện (tương tự như không chuẩn hóa; không có sys.databases
hệ thống sẽ cần thực hiện các truy vấn riêng biệt trên tất cả các DB có được thông tin đó, mỗi lần được yêu cầu!) và bảo mật. Một điều được sử dụng là để xác định một DB có khả năng gây hại / không được khôi phục / đính kèm là những hồ sơ không khớp. Cố gắng truy cập các Tập hợp SQLCLR được đánh dấu là EXTERNAL_ACCESS
hoặc UNSAFE
sẽ không tải nếu người ta chọn đi theo con đường kích hoạt kém an toàn hơn TRUSTWORTHY
vì nó phụ thuộc vào SID "dbo" vì nó cần khớp với Đăng nhập có EXTERNAL ACCESS ASSEMBLY
hoặcUNSAFE ASSEMBLY
sự cho phép Và khi có sự không phù hợp trong SID giữa hai chế độ xem danh mục hệ thống đó, không thể xác định nên sử dụng cái nào và sử dụng làm cờ đỏ cho vấn đề bảo mật tiềm ẩn. Trên thực tế, tôi đã kiểm tra điều kiện này trong tập lệnh cài đặt cho SQL # để cảnh báo ai đó thực hiện thay đổi phù hợp, để họ không phải lãng phí thời gian để tìm kiếm nó trong trường hợp SQL Server phàn nàn về điều đó.