Sự khác biệt giữa người dùng `dbo` và chủ sở hữu của cơ sở dữ liệu được lưu trữ trong sys.database


11

Chúng tôi gần đây đã có một câu hỏi đưa ra mà người dùng dbotrong một cơ sở dữ liệu đã có một sidđiều đó không phù hợp với owner_sidsys.databases. Tôi hiểu chủ sở hữu của cơ sở dữ liệu khác với các thành viên của vai trò như thế nào db_ownernhưng tôi luôn nghĩ rằng người dùng dbolà chủ sở hữu thực sự của cơ sở dữ liệu. đây không phải là trường hợp à? Và nếu vậy có sự khác biệt thực sự giữa dbovà những gì trong sys.databases?

Câu trả lời:


8

Tôi đã luôn nghĩ rằng người dùng dbolà 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.databasescũ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_sidcột trong sys.databasesvà "dbo" sidtrong sys.database_principalsDB đó.

Theo như tôi biết, bản ghi trong sys.database_principalsmỗi DB là chủ sở hữu thực sựowner_sidcột trong sys.databaseslà vấn đề lưu giữ / thuận tiện (tương tự như không chuẩn hóa; không có sys.databaseshệ 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_ACCESShoặc UNSAFEsẽ 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 TRUSTWORTHYvì nó phụ thuộc vào SID "dbo" vì nó cần khớp với Đăng nhập có EXTERNAL ACCESS ASSEMBLYhoặcUNSAFE ASSEMBLYsự 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 đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.