การเข้าสู่ระบบมีบัญชีภายใต้ชื่อผู้ใช้อื่นแล้ว


29

เมื่อฉันรัน SQL นี้:

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

ฉันได้รับข้อผิดพลาดต่อไปนี้:

การเข้าสู่ระบบมีบัญชีภายใต้ชื่อผู้ใช้อื่นแล้ว

ฉันจะรู้ได้อย่างไรว่าชื่อผู้ใช้ที่แตกต่างกันนี้สำหรับบัญชีเข้าสู่ระบบของฉันได้อย่างไร

คำตอบ:


31

ซึ่งหมายความว่าการล็อกอิน [R2Server \ AAOUser] ถูกแมปกับผู้ใช้ในฐานข้อมูลนั้นแล้ว หรือกล่าวอีกนัยหนึ่งคือผู้ใช้ฐานข้อมูลรายอื่นกำลังใช้การเข้าสู่ระบบนี้ คุณสามารถดูว่าผู้ใช้ฐานข้อมูลใดกำลังใช้ล็อกอินของคุณด้วยเคียวรีต่อไปนี้:

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: เวอร์ชันของสคริปต์ที่ไม่ได้ใช้มุมมองที่เข้ากันได้:

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

ตกลงฉันเห็นค่าdboกำลังแสดง แปลกผมจำไม่ได้ว่าฉันมีใช้สำหรับบัญชีของฉันdbo R2Server\AAOUserสงสัยในสิ่งที่ฉันควรทำต่อไป
แจ็ค

4
คุณสร้างฐานข้อมูลโดยใช้การเข้าสู่ระบบนั้นเพื่อเชื่อมต่อกับเซิร์ฟเวอร์หรือไม่ ถ้าใช่แสดงว่าคุณเป็นเจ้าของ db และไม่จำเป็นต้องสร้างผู้ใช้รายอื่น คุณได้ตั้งค่าไว้แล้ว
แมเรียน

จริงๆแล้วฉันใช้คำสั่งaspnet_regsql -E -S .\MSSQLSERVER_R2 -ssaddเพื่อสร้างASPStateฐานข้อมูล ฉันคิดว่าคงเป็นไปได้ว่าฉันถูกตั้งไว้แล้วแม้ว่าฉันจะไม่ได้ตระหนักถึงมันตั้งแต่แรก
แจ็ค

คาดเดาสิ่งที่: "-E -> ตรวจสอบสิทธิ์ด้วยข้อมูลรับรอง Windows ปัจจุบัน" :-)
Marian

4
ผมจะใช้และsys.server_principals และมีเพียงสำหรับความเข้ากันได้ย้อนหลัง sys.database_principalssysuserssyslogins
Aaron Bertrand

4

มันเป็น 'ข้อมูลเมตา'

บางครั้งผู้ใช้ฐานข้อมูลจะ 'เสียหาย' ในช่วงเวลาใดก็ตามที่เกิดขึ้นในฐานข้อมูลนั้น (ฉันเคยเห็นพฤติกรรมที่คล้ายกันถ้าฐานข้อมูลได้รับการกู้คืนและบทบาทในสำเนาที่กู้คืนแตกต่างจากสิ่งที่คุณซ้อนทับอยู่นี่คือสาเหตุที่ฉันลองด้านล่างซึ่งแก้ไขปัญหาให้ฉัน)

  1. เปิดคุณสมบัติการเข้าสู่ระบบใน SSMS -> (ความปลอดภัย | การเข้าสู่ระบบ | การล้มเหลวของผู้ใช้ | คุณสมบัติ | การแมปผู้ใช้) คุณอาจจะเห็นฐานข้อมูลที่ตรวจสอบแล้วและกำหนดบทบาท (เช่นปกติอย่างสมบูรณ์)

  2. หมายเหตุสิทธิ์บนฐานข้อมูลที่ให้ข้อผิดพลาดเพียงเพื่อการอ้างอิง

  3. ยกเลิกการเลือก DB นั้นและบันทึกการเข้าสู่ระบบ
  4. ตอนนี้เรียกใช้แบบสอบถามของคุณอีกครั้งเพื่อเพิ่มเข้าสู่ระบบ / บทบาทในฐานข้อมูลเป้าหมาย มันควรจะทำงานได้ดี

2
เมื่อฉันไปถึงขั้นตอนที่ 3 ฉันได้รับ:Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
bkwdesign

ฉันยังได้รับCannot drop the user 'dbo'.ข้อความแสดงข้อผิดพลาด USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]ฉันวิ่งสคริปต์นี้ซึ่งออกแมปผู้ใช้มีปัญหาและการแก้ไขปัญหา: สำหรับข้อมูลเพิ่มเติมนี้เป็นแหล่งที่ฉันใช้: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.