สิทธิ์ของผู้ใช้สับสนขึ้นหลังจากการสำรองข้อมูล -> การดำเนินการคืนค่า


11

ฉันต้องย้ายฐานข้อมูล SQL Server 2008 หลายตัวไปยังเซิร์ฟเวอร์ db ใหม่ของเราดังนั้นฉันจึงสำรองข้อมูลทั้งหมด (เป็นไฟล์. bak) คัดลอกไฟล์เหล่านี้ไปยังกล่องใหม่และเรียกคืนพวกเขา (ทั้งหมดทำได้โดยใช้ SQL Management Studio)

ทุกอย่างก็โอเค แต่ตอนนี้ฉันพบว่าฉันไม่สามารถลงชื่อเข้าใช้ฐานข้อมูลใด ๆ โดยใช้บัญชี SQL Server ที่ยังคงทำงานบน RDBMS เก่าได้ การเข้าสู่ระบบที่ได้รับการรับรองความถูกต้องของ windows ของฉันยังคงทำงานได้ดี

ฉันมีความคิดนี้ผู้ใช้และสิทธิ์ทั้งหมดจะถูกทำซ้ำอย่างราบรื่นบนเซิร์ฟเวอร์ฐานข้อมูลใหม่ แต่ดูเหมือนว่ามีบางอย่างผิดปกติ ฉันขอขอบคุณความเห็น / ข้อเสนอแนะ / ข้อเสนอการช่วยเหลือ ;-)

คำตอบ:


7

ฉันเห็นคุณพบวิธีแก้ไขปัญหาของคุณแล้วสิ่งหนึ่งที่ฉันสังเกตเห็นในคำถามเดิมของคุณคือคุณยังสามารถเข้าถึงเซิร์ฟเวอร์เก่าได้

คำถามต่อไปนี้ของ SO มีปัญหาที่คล้ายกันและมีลิงก์ไปยังบทความ Microsoft พร้อมสคริปต์เพื่อสร้างสิทธิ์ผู้ใช้

/programming/461385/restoring-a-backup-to-a-different-server-user-permissions

(ทรัพยากรที่ระบุไว้สำหรับคำถามนั้นhttp://support.microsoft.com/kb/918992 )

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


ฉันแน่ใจว่านี่จะไม่เป็นครั้งแรกที่ฉันจัดการกับ SQL Server มากกว่าผู้ใช้ / การอนุญาตดังนั้นฉันจะคั่นหน้าบทความสำหรับลูกหลาน ขอบคุณมากสำหรับการโพสต์
5arx

6

สิ่งนี้เรียกว่า "ผู้ใช้ที่ไม่ได้ใช้งาน" นี่คือ 2 วิธีในการแก้ไข

  1. หากคุณทำได้ให้คืนค่าฐานข้อมูลหลักเดิมเป็น "loginsource" และ sys.server_principals มีข้อมูลเพียงพอที่จะสร้างการเข้าสู่ระบบ SQL Server และ Windows ทั้งหมด นั่นคือ SID และรหัสผ่านที่เข้ารหัส

  2. หากคุณใช้การเข้าสู่ระบบ Windows เท่านั้นคุณสามารถเรียกใช้สิ่งนี้ต่อฐานข้อมูลเพื่อสร้างสคริปต์

สคริปต์:

SELECT
    'CREATE LOGIN [' + SUSER_SNAME(sid) + '] FROM WINDOWS'
FROM
    sys.database_principals
WHERE
    [type] IN ('G', 'U')

ขอบคุณสำหรับการตอบกลับของคุณ - แอพพลิเคชั่นเว็บของฉันใช้การเข้าสู่ระบบ SQL ในขณะที่บัญชี windows ของเราถูกใช้เพื่อการบริหาร ฉันไม่เห็นวิธีการคืนค่าเป็น 'แหล่งเข้าสู่ระบบ' ตามที่คุณแนะนำ - คุณช่วยอธิบายรายละเอียดได้ไหม? ฉันหวังว่าทั้งหมดนี้สามารถทำได้โดยใช้ Managment Studio?
5arx

PS ฉันติดตามเอกสารนี้: support.microsoft.com/kb/274188 และเรียกใช้สคริปต์ทั้งหมด (อย่างชัดเจน) สำเร็จ แต่ไม่มีอะไรเปลี่ยนแปลง
5arx

5

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

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

คุณสามารถแก้ไขผู้ใช้ที่ไม่ได้ใช้งานโดยใช้บางอย่างที่คล้ายกับต่อไปนี้:

DECLARE @username varchar(25), @loginsid varbinary(85)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name 
    FROM sysusers
    WHERE issqluser = 1 
    and (sid is not null and sid <> 0x0)
    and suser_sname(sid) is null
    and name in (select name from master..syslogins)
    ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_change_users_login 'update_one', @username, @username

    FETCH NEXT FROM fixusers
    INTO @username
END CLOSE fixusers
DEALLOCATE fixusers 

รหัสนี้จะใช้งานได้กับ SQL2008 แต่เขียนเพื่อให้เข้ากันได้กับ SQL2000 แบบย้อนหลัง


ขอบคุณสำหรับสคริปต์ ฉันสามารถสมมติว่าไม่มีวิธีการทำสิ่งนี้ใน Management Studio หรือไม่? นอกจากนี้บางคนกำลังแนะนำให้ฉันลบและสร้างผู้ใช้ระดับฐานข้อมูลอีกครั้ง - สิ่งนี้แนะนำหรือไม่
5arx

สิ่งนี้ถือว่าการเข้าสู่ระบบมีอยู่แล้วและจัดการกับ SID ได้เท่านั้น
gbn

ไม่ sp_change_users_login อัปเดต SID หรือไม่ msdn.microsoft.com/en-us/library/ms174378.aspx
SQLRockstar

5arx - ไม่มีวิธีการทำเช่นนี้ใน SSMS อย่างที่ฉันได้กล่าวไปแล้วในสถานการณ์ที่เหมาะสมคุณจะต้องเขียนสคริปต์การอนุญาตของคุณก่อนทำการกู้คืน ณ จุดนี้คุณต้องสร้างด้วยมือหรือพยายามที่จะทำสิ่งต่าง ๆ ด้วยกันด้วยตนเอง ถ้าฉันเป็นคุณฉันจะคืนค่าฐานข้อมูลเก่าออกสคริปต์สิทธิ์ทำการคืนค่าจากเซิร์ฟเวอร์อื่นแล้วทำซ้ำสิทธิ์ของคุณ
SQLRockstar

"Update_One: เชื่อมโยงผู้ใช้ที่ระบุในฐานข้อมูลปัจจุบันกับการเข้าสู่ระบบ SQL Server ที่มีอยู่ต้องระบุผู้ใช้และการเข้าสู่ระบบรหัสผ่านต้องเป็น NULL หรือไม่ได้ระบุ" ดังนั้นจึงถือว่าการเข้าสู่ระบบมีอยู่แล้ว
gbn


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