Các đối tượng hỗ trợ sơ đồ cơ sở dữ liệu không thể được cài đặt, không có chủ sở hữu hợp lệ


132

Tôi đã cố gắng tạo sơ đồ cơ sở dữ liệu với SQL Server 2008, nhưng đã xảy ra lỗi:

Các đối tượng hỗ trợ sơ đồ cơ sở dữ liệu không thể được cài đặt vì cơ sở dữ liệu này không có chủ sở hữu hợp lệ. Để tiếp tục, trước tiên, hãy sử dụng trang Tệp của hộp thoại Thuộc tính cơ sở dữ liệu hoặc câu lệnh ALTER AUTHORIZATION để đặt chủ sở hữu cơ sở dữ liệu thành thông tin đăng nhập hợp lệ, sau đó thêm các đối tượng hỗ trợ sơ đồ cơ sở dữ liệu.

Sau đó, tôi đã thử như sau:

EXEC sp_dbcmptlevel 'Ariha', '90';
GO
ALTER AUTHORIZATION ON DATABASE::Ariha TO [WIN-NDKPHUPPNFL\Administrator]
GO
USE Ariha
GO
EXECUTE AS USER = N'dbo' REVERT
GO

Erorr tiếp theo bật lên:

Msg 15404, Cấp 16, Trạng thái 11, Dòng 1 Không thể lấy thông tin về nhóm / người dùng Windows NT 'WIN-NDKPHUPPNFL \ Administrator', mã lỗi 0x534.

Vấn đề là tên của PC đã đổi thành "DevPC" Tôi cũng đã thay đổi điều này trong tập lệnh cập nhật, nhưng vẫn cùng một lỗi 15404.

Tôi có thể làm gì để khắc phục lỗi khó chịu này?


4
Bạn cũng gặp vấn đề này khi khôi phục bản sao lưu từ một máy khác.
Tim Abell

Khi bạn khôi phục db từ một máy khác, bạn có thể sửa lỗi này bằng cách chạy hai lệnh: 1) alter authorization on database::[db_name] to [sa]và sau đó 2) chạy lại cùng một lệnh và thay thế [sa]bằng người dùng sở hữu cơ sở dữ liệu ngay sau khi khôi phục.
James L.

Câu trả lời:


182

Bạn nên xem xét tài khoản xác thực SQL để sở hữu cơ sở dữ liệu; sau đó bạn không phải lo lắng về việc tài khoản đến và đi, cơ sở dữ liệu hoặc trường hợp di chuyển đến các máy chủ khác nhau và tên PC tiếp theo của bạn thay đổi. Tôi có một số hệ thống mà chúng tôi sử dụng:

ALTER AUTHORIZATION ON DATABASE::Ariha TO [sa];

Hoặc nếu bạn muốn thay đổi chủ sở hữu thành tài khoản Quản trị viên cục bộ đó, thì nó phải là:

ALTER AUTHORIZATION ON DATABASE::Ariha TO [DevPC\Administrator];

Bởi vì đổi tên máy thành DevPCđã loại bỏ tài khoản cục bộ đã được đặt tên WIN-ND...\Administratorvà điều này cũng đã làm mất hiệu lực của chủ sở hữu hiện tại của cơ sở dữ liệu.

Nếu SELECT @@SERVERNAME;không chính xác (cần phải nói DevPC), thì để đảm bảo rằng việc đổi tên máy chủ của bạn đã được giữ trong SQL Server, bạn cũng có thể muốn đưa ra các điều sau:

EXEC sp_dropserver @server = N'old server name';
GO
EXEC sp_addserver @server = N'DevPC', @local = N'local';
GO

nó hiển thị: "WIN-NDKPHUPPNFL" Tôi đã sử dụng câu lệnh sql của bạn và nó hoạt động ... nhưng thiết lập này có đúng không hoặc tôi có phải làm gì nữa không?
Rookian

Vâng, điều đó thực sự phụ thuộc. Nếu bạn cần cơ sở dữ liệu của mình được sở hữu bởi người dùng miền / nhóm làm việc Windows, thì có lẽ còn nhiều việc phải làm. Cá nhân, tôi thấy điều này có vấn đề. Có thể đọc cái này trước: sqlblog.com/bloss/tibor_karazi/archive/2009/12/30/ Kẻ
Aaron Bertrand

1
Có bất kỳ vấn đề nào với việc đặt nó thành sanếu bạn đã tắt xác thực sql không?
Tim Abell

@AaronBertrand Xin chào. Tôi có một câu hỏi. Mặc định của chúng tôi Nếu chúng tôi tạo chủ sở hữu cơ sở dữ liệu được đặt thành người dùng windows hiện tại và nếu người dùng windows hiện tại cũng là quản trị viên. Tại sao chúng ta cần thay đổi nó thành Đăng nhập xác thực Sql. Quả thực tôi không thể hiểu lỗi này. Nếu chúng ta thay đổi nó để đăng nhập thì nó hoạt động. Nhưng Quản trị viên Windows Đăng nhập cũng là Quản trị hệ thống. Bạn có thể xin giúp đỡ?
UfukSURMEN

Tôi đã khôi phục một loạt các cơ sở dữ liệu và tất cả chúng đều hiển thị lỗi trong câu hỏi của OP, mặc dù các thuộc tính của mỗi cơ sở dữ liệu cho thấy một người dùng hợp lệ. Tôi đã sử dụng lệnh thứ 1 để thay đổi nó [sa]và sau đó tôi đã thay đổi lại cho người dùng mà nó đã nói trước đó và viola, không còn lỗi nữa. Không chắc chắn lý do tại sao khôi phục cơ sở dữ liệu không đặt đúng chủ sở hữu cơ sở dữ liệu ...
James L.

208

Trong SQL Server Management Studio, hãy làm như sau:

  1. Nhấp chuột phải vào cơ sở dữ liệu của bạn, chọn thuộc tính
  2. Chuyển đến trang Tùy chọn
  3. Trong phần Thả xuống ở bên phải có nhãn "Mức độ tương thích", chọn "SQL Server 2005 (90)" 3-1. chọn "SQL Server 2008" nếu bạn gặp lỗi so sánh.
  4. Chuyển đến trang Tệp
  5. Nhập "sa" vào hộp văn bản của chủ sở hữu. 5-1 hoặc nhấp vào dấu chấm lửng (...) và chọn chủ sở hữu hợp pháp.
  6. Nhấn OK

Sau khi làm điều này, bây giờ bạn sẽ có thể truy cập Sơ đồ cơ sở dữ liệu.

nhập mô tả hình ảnh ở đây


2
Có bất kỳ lý do tại sao cơ sở dữ liệu KHÔNG nên có chủ sở hữu? Tôi đang truy cập vào cơ sở dữ liệu sản phẩm của người khác và không có chủ sở hữu. Đây có phải là cố ý? (Không có ai ở khách hàng sẽ biết).
Jason Kleban

Cơ sở dữ liệu nên có chủ sở hữu. Chọn "sa" thay vì chủ sở hữu hợp pháp chỉ đơn giản là một lựa chọn dễ dàng để khắc phục lỗi ở trên. Nhưng chọn một chủ sở hữu hợp pháp cũng khắc phục vấn đề.
Trả thù Lesly

3
Ai đó có thể giải thích mục đích thay đổi mức độ tương thích trong các bước này? Chỉ cần đặt chủ sở hữu trong các tệp thành 'sa' là đủ cho tôi (mặc dù tôi không bật tính năng xác thực sql, kỳ quặc).
Tim Abell

Điều này làm việc cho tôi. Tôi đã cần phải xóa người dùng của tôi khỏi Databasename> Security.
Gezim

Điều này làm việc với tôi, trên SQL Server 2017, sử dụng Management Studio 17.9, không cần bước 1
Giorgio Barchiesi

7
USE [ECMIS]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO

Nó hoạt động.


5

Nhập "SA" thay vì "sa" trong hộp văn bản của chủ sở hữu. Điều này làm việc cho tôi.


5

Tôi đã từng gặp vấn đề tương tự.
Tôi muốn xem sơ đồ của tôi, mà tôi đã tạo ra cùng ngày tại nơi làm việc, ở nhà. Nhưng tôi không thể vì tin nhắn này.
Tôi phát hiện ra rằng chủ sở hữu của cơ sở dữ liệu là người dùng máy tính của tôi - như mong đợi. nhưng vì máy tính thuộc miền của công ty và tôi không được kết nối với mạng của công ty nên cơ sở dữ liệu không thể giải quyết chủ sở hữu.

Vì vậy, những gì tôi đã làm là thay đổi chủ sở hữu thành một người dùng địa phương và nó đã hoạt động !!
Hy vọng điều này sẽ giúp được ai đó.

Bạn thay đổi người dùng bằng cách nhấp chuột phải vào cơ sở dữ liệu, thuộc tính, tệp, chủ sở hữu


3

CÁi này đã sửa nó giúp tôi. Nó đặt chủ sở hữu được tìm thấy trong phần 'tệp' của cửa sổ thuộc tính cơ sở dữ liệu và được biên kịch bởi studio quản lý.

USE [your_db_name]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO

Theo tài liệu sp_changedbowner, điều này hiện không được chấp nhận.

Dựa trên câu trả lời của Israel. Câu trả lời của Aaron là biến thể không phản đối của điều này.


3

Chọn cơ sở dữ liệu của bạn - Nhấp chuột phải - Chọn Thuộc tính

Chọn TẬP TIN ở bên trái của trang

Trong hộp SỞ HỮU, chọn nút có ba dấu chấm (Mạnh) trong đó

Bây giờ chọn người dùng và bấm OK


0

Tôi chỉ trải nghiệm điều này. Tôi đã đọc các đề xuất trên trang này, cũng như các đề xuất của Cơ quan SQL (cũng giống như vậy) và không có cách nào ở trên hoạt động.

Cuối cùng, tôi đã xóa tài khoản và tạo lại (với cùng tên người dùng / mật khẩu). Chỉ cần như vậy, tất cả các vấn đề đã biến mất.

Đáng buồn thay, điều này có nghĩa là tôi không biết điều gì đã xảy ra nên tôi không thể chia sẻ bất cứ điều gì khác.


0

1. Nhấp chuột vào Cơ sở dữ liệu của bạn, 2.Sau đó chọn thuộc tính. 3. Chọn tùy chọn trong các mức độ tương thích, chọn sql 2008 [100] nếu bạn đang làm việc với Microsoft sql 2008.

4.Sau đó chọn tệp và ghi (sa) vào hộp văn bản của chủ sở hữu

100% làm việc cho tôi.


0

Một cách dễ dàng hơn để giải quyết vấn đề này là nhấp chuột phải vào tên cơ sở dữ liệu của bạn, chọn "Truy vấn mới", nhập "exec sp_changedbowner 'sa'" và thực hiện truy vấn. Sau đó, bạn sẽ tốt để đi.


0

bạn phải nhập với tư cách quản trị viên nhấp chuột phải vào studio quản lý máy chủ microsofft sql và chạy với tư cách quản trị viên


0

Chỉ cần thực thi nó trong trình soạn thảo truy vấn THAY ĐỔI AUTHORIZATION ON DATABASE :: YourDatabase TO [domain \ account];


-3

Vấn đề thực sự là chủ sở hữu mặc định (dbo) hoàn toàn không có thông tin đăng nhập được ánh xạ tới nó. Tôi đã cố gắng ánh xạ thông tin đăng nhập vào chủ sở hữu cơ sở dữ liệu Tôi nhận được một lỗi khác ghi "Người dùng, nhóm hoặc vai trò 'dbo' đã tồn tại ... ". Tuy nhiên, nếu bạn thử mã này, nó sẽ thực sự hoạt động:

EXEC sp_dbcmptlevel 'yourDB', '90';

đi

THAY ĐỔI ỦY QUYỀN TRÊN NỀN TẢNG :: yourDB ĐẾN "yourLogin"

đi

sử dụng [yourDB]

đi

EXECUTE AS USER = N'dbo 'REVERT

đi


-3

nhấp chuột phải vào Cơ sở dữ liệu của bạn, sau đó chọn thuộc tính. chọn tùy chọn ở mức độ tương thích, chọn sql 2005 [90] thay vì 2008 nếu bạn đang làm việc với Microsoft sql 2008, sau đó chọn tệp và ghi (sa) vào hộp văn bản của chủ sở hữu. nó sẽ hoạt động

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.