ใน SQL Server ฉันจะสร้างการเข้าสู่ระบบสำหรับผู้ใช้ที่มีอยู่ได้อย่างไร


17

ฉันกู้คืนฐานข้อมูลจากอินสแตนซ์ SQL Server หนึ่งไปยังอินสแตนซ์ SQL Server อื่น ฐานข้อมูล allready มีผู้ใช้เพิ่มไปแล้ว แต่พวกเขาไม่มีล็อกอินสำหรับอินสแตนซ์ SQL Server ใหม่

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

คำตอบ:


9

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

คุณต้องติดตั้งผู้ใช้ฐานข้อมูลอีกครั้งด้วยการล็อกอินเซิร์ฟเวอร์บนอินสแตนซ์ที่คุณกู้คืนฐานข้อมูล

มีสองสามวิธีที่จะไปเกี่ยวกับมัน:

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

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


10

ฉันมักจะรันคำสั่งsp_change_users_loginด้วยการกระทำ 'Update_One' เพื่อเชื่อมโยงผู้ใช้ฐานข้อมูลกับล็อกอินเซิร์ฟเวอร์อีกครั้ง:

sp_change_users_login 'Update_One', 'database user', 'server login'


เจ๋งฉันใช้สิ่งนี้EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';แทน :)
user2173353

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

2

นี่คือสิ่งที่ฉันพบ

ในฐานะที่เป็น squillman หมดอายุผู้ใช้จะได้รับการคัดลอกไปกับฐานข้อมูล แต่การเข้าสู่ระบบไม่ได้ มีร้านค้า procdure เรียกว่า sp_change_users_login คุณสามารถใช้เพื่อแก้ไขปัญหา ขั้นตอนที่ต้องทำมีรายละเอียดในaritcleนี้ รายละเอียดการใช้ procdure ของร้านค้าสามารถพบได้ในหน้านี้


2

ตั้งแต่ SQL Server 2012 มีคำสั่ง T-SQL เพื่อกำหนดผู้ใช้ที่มีอยู่ให้กับการเข้าสู่ระบบใหม่ สร้างการเข้าสู่ระบบ แต่อย่าพยายามทำการแมปผู้ใช้ (มันจะล้มเหลว) จากนั้นดำเนินการ:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

นี่จะแมปล็อกอินที่มีอยู่กับผู้ใช้ใหม่ เอกสารคู่มือ SQL ที่นี่: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

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