Có bao giờ có hại khi đặt chủ sở hữu cơ sở dữ liệu trong SQL Server không?


8

Có một loạt các cơ sở dữ liệu trên một trong các máy chủ SQL của chúng tôi không có chủ sở hữu. Nói chung, có hại khi cho họ một cái không? Ví dụ:

USE dbName;
GO

EXEC sp_changedbowner 'sa';
GO

Tôi biết sa có thể không phải là lựa chọn tốt nhất, nhưng nó chỉ là một ví dụ. Mối quan tâm chính của tôi là liệu có tạo chủ sở hữu hay không khi không có vấn đề gì với phần mềm hiện có thể kết nối OK.


tác động nếu cơ sở dữ liệu không có chủ sở hữu là gì?

Câu trả lời:


11

Bạn nên sử dụng DDL thay vì các thủ tục lưu trữ tương thích ngược:

ALTER AUTHORIZATION ON DATABASE::dbName TO sa;

Và chủ sở hữu của cơ sở dữ liệu (không bao giờ sabận tâm ) có lẽ không nên là tài khoản mà các ứng dụng của bạn sử dụng, vì vậy điều này thực sự không có bất kỳ ảnh hưởng nào đến các ứng dụng của bạn. Nếu đúng như vậy, bạn nên cập nhật chuỗi kết nối mà ứng dụng của bạn sử dụng (không phải là thay đổi lớn) và đảm bảo tài khoản có đủ - nhưng không phải là đặc quyền của Chúa.


Cám ơn bạn đã cho lời khuyên. Tuy nhiên, "Mối quan tâm chính của tôi là liệu có tạo chủ sở hữu hay không khi không có vấn đề gì với phần mềm hiện có thể kết nối OK."
bopapa_1979

@Eric vấn đề là có sự khác biệt giữa "không" và "không hợp lệ" - tại sao bạn nghĩ KHÔNG có chủ sở hữu?
Aaron Bertrand

Tôi nghĩ bạn đúng. Tôi nhận thấy vấn đề với Nhấp chuột phải -> Thuộc tính và có hộp thoại "Không thể hiển thị được yêu cầu. Chủ sở hữu tài sản không khả dụng cho Cơ sở dữ liệu 'dbName'. Thuộc tính này có thể không tồn tại cho đối tượng này hoặc có thể không truy xuất được do không đủ quyền truy cập. " Nhưng tôi chỉ chạy một truy vấn: chọn tên, own_sid từ sys.database. Tôi đã nhận được một sid cho cơ sở dữ liệu, nhưng khi tôi sử dụng SUSER_SNAME (own_sid), tôi nhận được một NULL trong cột thứ 2. Vậy, chủ sở hữu không hợp lệ, đúng không? Cảm ơn!
bopapa_1979

@Eric đúng rồi.
Aaron Bertrand

4
Không, luôn có một chủ sở hữu (nó chỉ có thể không hợp lệ). Tình huống của bạn có nghĩa là nó được sở hữu bởi một thông tin đăng nhập tồn tại trên máy chủ cũ nhưng chưa được di chuyển sang máy chủ mới. Chỉ cần đặt tất cả chúng savà được thực hiện với nó trừ khi bạn cần những thông tin đăng nhập đó vì những lý do khác (tuy nhiên nếu đăng nhập không quan trọng tồn tại trên máy chủ hiện tại, bạn nên đặt câu hỏi liệu có nên sở hữu cơ sở dữ liệu không, không bao giờ tâm trí nên sở hữu nó ngay bây giờ khi nó đã được di chuyển).
Aaron Bertrand

6

Bằng cách khai báo chủ sở hữu cơ sở dữ liệu, bạn cung cấp cho người dùng đó toàn quyền kiểm soát cơ sở dữ liệu. Chủ sở hữu cơ sở dữ liệu có quyền truy cập đầy đủ vào tất cả dữ liệu trong tất cả các bảng, có thể CREATE/ALTER/DROPcác đối tượng trong cơ sở dữ liệu, v.v ... Điều này có thể tốt hoặc xấu, tùy thuộc vào yêu cầu của bạn. Thông thường, tôi đặt tất cả chủ sở hữu cơ sở dữ liệu thành 'sa' để cung cấp chủ sở hữu mặc định. Vì 'sa' đã có quyền sysadmin, việc cấp quyền sở hữu cơ sở dữ liệu không cấp quyền bảo mật leo thang.


Vì vậy, tôi nghe nói rằng việc thêm chủ sở hữu vào cơ sở dữ liệu mà không có quyền truy cập ADDS duy nhất vào cơ sở dữ liệu. Nó sẽ không làm hỏng bất kỳ quyền hiện có. Đúng không? Điều này có vẻ tầm thường rõ ràng. Tuy nhiên, tôi thực sự hiểu điều này hơn là xin lỗi.
bopapa_1979

@Eric nếu chủ sở hữu hiện tại không hợp lệ thì ứng dụng của bạn không thể được sử dụng. Cơ sở dữ liệu đến từ đâu?
Aaron Bertrand

1

Tôi đề nghị luôn luôn cung cấp cho một chủ sở hữu cơ sở dữ liệu. Vì một số công cụ phàn nàn khi cơ sở dữ liệu không có chủ sở hữu, ví dụ công cụ sơ đồ .

Công cụ sơ đồ, chủ sở hữu hình ảnh khiếu nại Cũng sử dụng người dùng đã mạnh mẽ như "sa" cho mục đích này tốt hơn như Mike Fal đề xuất.


Có một sự khác biệt giữa KHÔNG CÓ CHỦ SỞ HỮU và NGƯỜI SỞ HỮU. Đây không phải là trường hợp KHÔNG CÓ CHỦ SỞ HỮU.
Aaron Bertrand
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.