ข้อผิดพลาดของ SQL Server 2008 R2: 15023 ผู้ใช้กลุ่มหรือบทบาทมีอยู่แล้ว


16

ฉันมีฐานข้อมูลทดสอบที่ฉันมีปัญหาเกี่ยวกับการอนุญาต
ฉันไม่สามารถเข้าถึงฐานข้อมูลการรายงานและเอกสารความช่วยเหลือของแอปพลิเคชันบอกว่าต้องทำสิ่งต่อไปนี้:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

เมื่อฉันทำสิ่งนี้ฉันได้รับข้อผิดพลาดต่อไปนี้:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

ฉัน googled ข้อผิดพลาดนี้และลองคำสั่งต่อไปนี้ในแต่ละฐานข้อมูล:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

ข้อความระบุว่าคำสั่งดำเนินการเสร็จสมบูรณ์ แต่ฉันยังคงได้รับข้อผิดพลาดด้านบนเมื่อฉันพยายามแมปแต่ละฐานข้อมูลตามคำแนะนำด้านบน

ฉันกำลังคิดถึงอะไร

ความคิดเห็นของ Kin ต่อ (ขอบคุณ) ฉันลองนี้: - ฉันคลิกขวาที่ผู้ใช้และเลือก: เข้าสู่ระบบสคริปต์เป็น> วางและสร้างไปที่> หน้าต่างแบบสอบถามใหม่ - ฉันเรียกใช้คิวรีที่เป็นผลลัพธ์และพยายามแมปบทบาทผู้ใช้โดยเลือกอีกสองฐานข้อมูลและ db_owner อีกครั้ง แต่ฉันยังคงได้รับข้อความแสดงข้อผิดพลาดเหมือนเดิมด้านบน

คิด ??

คำตอบ:


12

มีหลายสิ่งที่คุณสามารถลองได้และความสำเร็จของแต่ละอย่างอาจขึ้นอยู่กับบทบาทของเซิร์ฟเวอร์ที่คุณมี

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

ตัวเลือกถัดไป: หากคุณกำลังย้ายผู้ใช้จำนวนมากให้ใช้ sp_help_revlogin sp_help_revlogin เป็นกระบวนการที่จัดเก็บโดย Microsoft ซึ่งจะช่วยโยกย้ายการเข้าสู่ระบบจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่นรวมถึงรหัสผ่านและ SID นี่คือบทความที่ดีเกี่ยวกับเรื่องนี้SP_HELP_REVLOGIN


ดูที่ support.microsoft.com/en-us/kb/918992วิธีการถ่ายโอนการเข้าสู่ระบบและรหัสผ่านระหว่างอินสแตนซ์ของ SQL Server
James Jenkins

3

ฉันใช้Auto_Fixกับsp_change_users_loginสภาพแวดล้อมการพัฒนาของฉันเพื่อแก้ไขปัญหาดังกล่าว (ข้อผิดพลาด 15023) หลีกเลี่ยงการใช้ Auto_Fix ในสถานการณ์ความปลอดภัย

Auto_Fix: เชื่อมโยงรายการผู้ใช้ในมุมมองแคตาล็อกระบบ sys.database_principals ในฐานข้อมูลปัจจุบันไปยังการเข้าสู่ระบบ SQL Server ในชื่อเดียวกัน หากการเข้าสู่ระบบด้วยชื่อเดียวกันนั้นไม่มีอยู่ระบบจะสร้างขึ้นใหม่ ตรวจสอบผลลัพธ์จากคำสั่ง Auto_Fix เพื่อยืนยันว่าลิงก์ที่ถูกต้องนั้นเกิดขึ้นจริง หลีกเลี่ยงการใช้ Auto_Fix ในสถานการณ์ความปลอดภัย

sp_change_users_login 'AUTO_FIX', 'myuser'

นอกจากนี้โปรดทราบว่าคุณลักษณะนี้อาจถูกลบใน Microsoft SQL Server รุ่นในอนาคต

การอ้างอิงอื่น ๆ :

  1. ผู้ใช้กลุ่มหรือบทบาทของ SQL Server 2008 มีอยู่แล้วในฐานข้อมูลปัจจุบัน
  2. การแก้ไข: ข้อผิดพลาด 15023: ผู้ใช้มีอยู่แล้วในฐานข้อมูลปัจจุบัน
  3. SQL แมปล็อกอินกับผู้ใช้ที่มีอยู่

0
ALTER USER [<username>] WITH LOGIN=[<username>]

เป็นแนวทางที่ถูกต้อง

มิฉะนั้นไปที่:

ความปลอดภัย> การเข้าสู่ระบบ> (ชื่อผู้ใช้ของคุณ)> คุณสมบัติ> การจับคู่ผู้ใช้

ป้อนคำอธิบายรูปภาพที่นี่

และทำการแมปผู้ใช้นั้นกับฐานข้อมูลที่คุณต้องการ

คุณสามารถใช้แบบสอบถามต่อไปนี้ในบริบทของฐานข้อมูลของคุณเพื่อตรวจสอบเด็กกำพร้า:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.