Info masuk sudah memiliki akun dengan nama pengguna yang berbeda

29

Ketika saya menjalankan SQL ini:

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

Saya mendapatkan kesalahan berikut:

Info masuk sudah memiliki akun dengan nama pengguna yang berbeda.

Bagaimana saya tahu apa nama pengguna yang berbeda ini untuk akun login saya?

Mendongkrak
sumber

Jawaban:

31

Ini berarti bahwa login [R2Server \ AAOUser] sudah dipetakan ke pengguna dalam database itu. Atau, dengan kata lain, pengguna basis data lain menggunakan login ini. Anda dapat melihat pengguna basis data apa yang menggunakan login Anda dengan permintaan berikut:

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: versi skrip yang tidak menggunakan tampilan kompatibilitas:

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
Marian
sumber
Ok, saya melihat nilai dboyang ditampilkan. Aneh, saya tidak ingat bahwa saya telah menggunakan dboakun saya R2Server\AAOUser. Ingin tahu apa yang harus saya lakukan selanjutnya.
Jack
4
Sudahkah Anda membuat database menggunakan login itu untuk terhubung ke server? Jika ya, maka Anda adalah pemilik db dan tidak perlu membuat pengguna lain. Anda sudah siap.
Marian
Sebenarnya, saya menggunakan perintah aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssadduntuk membuat ASPStatedatabase. Saya pikir mungkin, saya sudah siap, meskipun, saya bahkan tidak menyadarinya sejak awal.
Jack
Coba tebak: "-E -> Otentikasi dengan kredensial Windows saat ini." :-)
Marian
4
Saya akan menggunakan sys.server_principalsdan sys.database_principals. sysusersdan sysloginshanya ada untuk kompatibilitas ke belakang.
Aaron Bertrand
4

Itu adalah 'hal metadata' ...

Kadang-kadang pengguna database 'rusak' selama apa pun yang terjadi di DB itu. (Saya telah melihat perilaku serupa jika DB dipulihkan, dan peran dalam salinan yang dipulihkan berbeda dari apa yang Anda isi. Inilah sebabnya saya mencoba di bawah ini, yang memperbaiki masalah bagi saya.)

  1. Buka properti Login di SSMS -> (Keamanan | Login | gagal UserID | Properti | Pemetaan Pengguna). Anda mungkin akan melihat DB sudah dicentang dan Peran telah ditetapkan (seperti normal).

  2. Perhatikan izin pada DB yang memberikan kesalahan, hanya untuk referensi.

  3. Hapus centang DB itu dan simpan login.
  4. Sekarang jalankan kembali permintaan Anda untuk menambahkan Login / Peran ke dalam target DB. Seharusnya itu berjalan baik baik saja.
CK di CLE
sumber
2
ketika saya sampai ke langkah 3, saya mendapatkan:Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
bkwdesign
Saya juga mendapat Cannot drop the user 'dbo'.pesan kesalahan. Aku berlari script ini, yang dihapus pemetaan pengguna bermasalah dan tetap masalah: USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]. Untuk informasi lebih lanjut, ini adalah sumber yang saya gunakan: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets