Đăng nhập đã có một tài khoản dưới một tên người dùng khác


29

Khi tôi thực thi SQL này:

USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO

Tôi nhận được lỗi sau đây:

Đăng nhập đã có một tài khoản dưới một tên người dùng khác.

Làm cách nào để biết tên người dùng khác nhau này là gì đối với tài khoản đăng nhập của tôi?

Câu trả lời:


31

Điều này có nghĩa là đăng nhập [R2Server \ AAOUser] đã được ánh xạ tới người dùng trong cơ sở dữ liệu đó. Hay nói cách khác, một người dùng cơ sở dữ liệu khác đang sử dụng thông tin đăng nhập này. Bạn có thể xem người dùng cơ sở dữ liệu nào đang sử dụng thông tin đăng nhập của mình với truy vấn sau:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login

PS: phiên bản của tập lệnh không sử dụng chế độ xem tương thích:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login

Ok, tôi thấy giá trị dbođược hiển thị. Kỳ lạ, tôi không nhớ rằng tôi đã sử dụng dbotài khoản của mình R2Server\AAOUser. Tự hỏi tôi nên làm gì tiếp theo.
Jack

4
Bạn đã tạo cơ sở dữ liệu bằng cách sử dụng thông tin đăng nhập đó để kết nối với máy chủ? Nếu có, thì bạn là chủ sở hữu db của nó và không cần tạo người dùng khác. Bạn đã thiết lập.
Mary

Trên thực tế, tôi đã sử dụng lệnh aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssaddđể tạo ASPStatecơ sở dữ liệu. Tôi nghĩ có lẽ, tôi đã sẵn sàng, mặc dù, tôi thậm chí không nhận ra điều đó ngay từ đầu.
Jack

Đoán xem: "-E -> Xác thực bằng thông tin đăng nhập Windows hiện tại." :-)
Mary

4
Tôi sẽ sử dụng sys.server_principalssys.database_principals. sysuserssysloginschỉ có ở đó để tương thích ngược.
Aaron Bertrand

4

Đó là một 'siêu dữ liệu' ...

Đôi khi người dùng cơ sở dữ liệu bị 'hỏng' trong quá trình xảy ra bất cứ điều gì đang xảy ra trong DB đó. .

  1. Mở các thuộc tính Đăng nhập trong SSMS -> (Bảo mật | Đăng nhập | không thành công UserID | Thuộc tính | Ánh xạ người dùng). Bạn có thể sẽ thấy DB đã được kiểm tra và có các Vai trò được gán (giống như hoàn toàn bình thường).

  2. Lưu ý các quyền trên DB đưa ra lỗi, chỉ để tham khảo.

  3. Bỏ chọn DB đó và lưu thông tin đăng nhập.
  4. Bây giờ chạy lại truy vấn của bạn để thêm Đăng nhập / Vai trò vào DB đích. Nó nên hoạt động tốt.

2
Khi tôi đến bước 3, tôi nhận được:Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
bkwdesign

Tôi cũng nhận được thông Cannot drop the user 'dbo'.báo lỗi. Tôi đã chạy tập lệnh này, nó đã loại bỏ ánh xạ người dùng có vấn đề và khắc phục sự cố : USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]. Để biết thêm thông tin, đây là nguồn tôi đã sử dụng: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockS
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.