Đó là vấn đề rất phổ biến sau khi khôi phục. Một người dùng (cơ sở dữ liệu cụ thể) và một đăng nhập (toàn bộ máy chủ) đều có một SID. Vấn đề có thể là thông tin đăng nhập bạn đã tạo có SID khác với thông tin đăng nhập trên cơ sở dữ liệu sản xuất. Bạn có thể kiểm tra tên đăng nhập và sử dụng SID như:
select UserSid from sysusers where name = 'UserName'
select LoginSid from master.dbo.syslogins where name = 'UserName'
Dưới đây là một kịch bản chúng tôi chạy sau mỗi lần sao lưu để sửa chữa các đăng nhập - liên kết cơ sở dữ liệu:
declare user_cursor cursor forward_only read_only for
SELECT distinct u.name
FROM sysusers u
JOIN master.dbo.syslogins l ON u.name = l.name
WHERE u.issqluser <> 0
declare @user sysname;
open user_cursor
fetch next from user_cursor into @user;
while @@fetch_status = 0
begin
if @user <> 'dbo'
begin
print ''
print 'Updating user "' + @user + '"'
exec sp_change_users_login 'Auto_Fix', @user
end
fetch next from user_cursor into @user
end;
close user_cursor
deallocate user_cursor
ok, tôi đã quản lý để xóa người dùng bằng cách thay đổi giản đồ. Vì vậy, tôi đã thêm một đăng nhập và người dùng mới nhưng tôi vẫn nhận được cùng một lỗi: Chi tiết ngoại lệ: System.Data.SqlClient.SqlException: Đăng nhập thất bại cho người dùng 'xx'. – user441365
Tôi đã kiểm tra trên trình xem sự kiện và eventid lỗi: 1309 – user441365
@ user441365 - Kiểm tra liên kết này tại đây để biết thêm chi tiết về lỗi này. Tiểu bang là gì? http://msdn.microsoft.com/en-us/library/ms366351.aspx – codingbadger