คุณรีเซ็ตรหัสผ่าน sa ได้อย่างไร


22

ฉันลืมรหัสผ่าน sa บนเครื่องและเมื่อฉันเข้าสู่ระบบโดยตรงโดยใช้บัญชีในกลุ่มผู้ดูแลระบบ SQL Server Management Studio จะไม่อนุญาตให้ฉันเข้าสู่ระบบโดยใช้การรับรองความถูกต้องของ Windows

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

ฉันจะรีเซ็ตรหัสผ่าน sa ได้อย่างไร


พบคำตอบ ฉันไม่สามารถเข้าสู่ระบบในฐานะผู้ดูแลระบบโดเมน แต่การใช้ผู้ดูแลระบบในพื้นที่ทำงานได้ดี
Daniel Williams

คุณหมายความว่าสมาชิกของกลุ่ม 'ผู้ดูแลระบบ' ในเครื่องสามารถทำได้หรือไม่ เพื่อลูกหลานคุณทำตามขั้นตอนอะไรบ้าง?
p.campbell

บัญชีนี้เป็นบัญชีผู้ดูแลท้องถิ่น บัญชีนี้เป็นส่วนหนึ่งของกลุ่มผู้ดูแลระบบท้องถิ่นเช่นเดียวกับบัญชีโดเมนของฉัน แต่มีเพียงบัญชีผู้ดูแลระบบภายในเท่านั้นที่สามารถใช้การรับรองความถูกต้องของ Windows เพื่อเข้าสู่ SQL Server ฉันหวังว่าจะช่วย
Daniel Williams

การเริ่มต้นอินสแตนซ์ในโหมดผู้ใช้คนเดียวจะอนุญาตให้บัญชีท้องถิ่นใด ๆ ที่เป็นส่วนหนึ่งของกลุ่มผู้ดูแลระบบภายในสามารถเข้าถึงอินสแตนซ์ได้ แก้ไข: ลิงค์ @ user1419 ชี้ให้เห็นสิ่งนี้
Shawn Melton

คำตอบ:


10

คุณสามารถทำตามขั้นตอนที่กล่าวถึงในลิงค์ด้านล่างเพื่อรีเซ็ตรหัสผ่าน SA:

สรุปขั้นตอนด้านล่าง:

  1. เปิดตัวจัดการการกำหนดค่าเซิร์ฟเวอร์ SQL จากเมนูเริ่ม> โปรแกรม> Microsoft SQL Server 20xx> เครื่องมือกำหนดค่า> ที่เกี่ยวข้องกับ SQL Server เวอร์ชันล่าสุดที่คุณติดตั้ง (เช่นถ้าคุณติดตั้งปี 2005 และ 2012 ให้ใช้รุ่น 2012) ยังไม่มีเมนูเริ่ม? บนหน้าจอเริ่มของ Windows 8 ให้เริ่มพิมพ์ SQL Server Con ... จนกว่าจะปรากฏขึ้น
  2. หยุดอินสแตนซ์ SQL Server ที่คุณต้องการกู้คืนโดยคลิกขวาที่อินสแตนซ์ในบริการเซิร์ฟเวอร์ SQL และเลือก "หยุด"
  3. คลิกขวาอินสแตนซ์ที่คุณเพิ่งหยุดคลิกคุณสมบัติและในแท็บ“ ขั้นสูง” ในกล่องข้อความคุณสมบัติเพิ่ม“; –m” ต่อท้ายรายการในตัวเลือก“ พารามิเตอร์เริ่มต้น” (บนเวอร์ชั่นใหม่กว่าคุณ สามารถไปที่แท็บ "พารามิเตอร์การเริ่มต้น" โดยตรงพิมพ์ "-m" และคลิกเพิ่มโดยไม่ต้องกังวลเกี่ยวกับไวยากรณ์เซมิโคลอนหรือสิ่งอื่นใด)
  4. คลิกปุ่ม“ ตกลง” และรีสตาร์ทอินสแตนซ์ของเซิร์ฟเวอร์ SQL
  5. หลังจาก SQL Server อินสแตนซ์เริ่มทำงานในโหมดผู้ใช้คนเดียวบัญชีผู้ดูแลระบบ Windows สามารถเชื่อมต่อกับ SQL Server โดยใช้ยูทิลิตี sqlcmd โดยใช้การพิสูจน์ตัวจริงของ Windows คุณสามารถใช้คำสั่ง Transact-SQL เช่น "sp_addsrvrolemember" เพื่อเพิ่มการเข้าสู่ระบบที่มีอยู่ (หรือที่สร้างขึ้นใหม่) ไปยังบทบาทเซิร์ฟเวอร์ sysadmin

ตัวอย่างต่อไปนี้เพิ่มบัญชี "Buck" ในโดเมน "CONTOSO" ในบทบาท sysadmin:

EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';

เมื่อกู้คืนการเข้าถึงดูแลระบบแล้วให้ลบ“; -m” ออกจากพารามิเตอร์เริ่มต้นโดยใช้เครื่องมือจัดการการกำหนดค่าและเริ่มต้นอินสแตนซ์ SQL Server อีกครั้ง

หมายเหตุ:ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างระหว่าง“;” และ“ -m” ตัวแยกวิเคราะห์พารามิเตอร์รีจิสทรีมีความอ่อนไหวต่อการพิมพ์ผิด คุณควรเห็นรายการในไฟล์ ERRORLOG ของเซิร์ฟเวอร์ SQL ที่ระบุว่า“ SQL Server เริ่มทำงานในโหมดผู้ใช้คนเดียว”


แหล่งข้อมูลเพิ่มเติม:

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


9

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


สำหรับอินสแตนซ์ SQL Server 2005, 2008 และ 2008 R2

คุณสามารถเชื่อมต่อโดยใช้NT AUTHORITY\SYSTEMบัญชี (หรือวิธีการลับๆอื่น ๆ ) มีรายละเอียดบางอย่างในคำตอบบางส่วนที่นี่:

ฉันยังมีเคล็ดลับบนMSSQLTips.comที่แก้ไขปัญหานี้:

โดยพื้นฐานแล้วคุณดาวน์โหลดPSExecจาก Microsoft จากนั้นใช้เพื่อเรียกใช้ Management Studio เมื่อคุณติดตั้งแล้ว:

PsExec -s -i "C:\...\Ssms.exe"

สิ่งนี้จะเชื่อมต่อเป็นNT AUTHORITY\SYSTEMและจะอนุญาตให้คุณทำสิ่งต่างๆใน Object Explorer เช่น:

  • เปลี่ยนอินสแตนซ์เป็นโหมดการพิสูจน์ตัวจริงของ SQL Server และ Windows - คลิกขวาที่ชื่อเซิร์ฟเวอร์, คุณสมบัติการเข้าชมและเปลี่ยนปุ่มตัวเลือกหากตั้งค่าเป็น Windows เท่านั้นในปัจจุบัน:

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

  • ตั้งรหัสผ่านสำหรับsaบัญชี - ขยายความปลอดภัยขยายการเข้าสู่ระบบคลิกขวาsaและกดคุณสมบัติและในกล่องโต้ตอบผลลัพธ์จะมีช่องป้อนรหัสผ่านสองช่อง:

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

  • เพิ่มการเข้าสู่ระบบของคุณเองเป็นsysadmin - คลิกขวาเข้าสู่ระบบเข้าสู่ระบบใหม่ ... ป้อนชื่อเข้าสู่ระบบของคุณ (ในรูปแบบDOMAIN\username) จากนั้นย้ายไปที่แท็บบทบาทเซิร์ฟเวอร์แล้วทำsysadminเครื่องหมายในช่องและคลิกตกลง:

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

  • (หรือหากการเข้าสู่ระบบของคุณอยู่ในรายการคลิกขวาคุณสมบัติและตรวจสอบให้แน่ใจว่าได้ทำsysadminเครื่องหมายภายใต้บทบาทเซิร์ฟเวอร์)


สำหรับ SQL Server 2012 และอินสแตนซ์ที่ใหม่กว่า

เริ่มต้นด้วย SQL Server 2012 NT Authority\SYSTEMไม่ได้รับสิทธิ์ให้กับ SQL Server อีกต่อไปตามค่าเริ่มต้น ดังนั้นวิธีการทำเช่นนั้นในเวอร์ชั่นใหม่เหล่านี้ได้รับรายละเอียดโดย Argenis Fernandez :

  1. หากบริการ SQL VSS Writer ทำงานอยู่ให้หยุดและหยุดแผนการบำรุงรักษาทั้งหมดหรือซอฟต์แวร์สำรองข้อมูลของบุคคลที่สามที่อาจใช้งานได้
  2. เปิดregedit.exeและเปลี่ยนค่าของการHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePathที่จะชี้ไปซึ่งเป็นไปได้ในSQLCMD.exe C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binnหลังจากแก้ไขค่ารีจิสทรีควรมีลักษณะดังนี้ (ขออภัยสำหรับการเลื่อน):

    "C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
  3. ลองเริ่มบริการ SQL VSS Writer อีกครั้ง (คุณจะได้รับข้อผิดพลาดไม่เป็นไร)

  4. ตอนนี้คุณควรจะสามารถเชื่อมต่อเป็นใช้sysadmin YourDomain\YourUserNameดังนั้นหยุดบริการ SQL VSS Writer แก้ไขรีจิสตรีและรีสตาร์ทเซอร์วิส (หากคุณต้องการให้รันอยู่หรือรันก่อนที่จะเริ่มต้น)

ฉันได้ผ่านสิ่งนี้ไปแล้วในรายละเอียดที่มากขึ้นในเคล็ดลับที่สอง:

แม้ว่าเมื่อฉันเขียนคำแนะนำนั้นฉันใช้วิธีที่ยุ่งยากกว่าในการทำสำเนาSQLCMD.exeและแทนที่sqlwriter.exe- ง่ายกว่ามากเพียงแค่ชี้บริการที่SQLCMD.exeโดยตรง


หากคุณสามารถที่จะนำบริการ SQL Server ไปใช้ได้

มีเส้นทางที่ได้รับการสนับสนุนอย่างเป็นทางการจาก Microsoft ที่ต้องเริ่มต้นอินสแตนซ์ใหม่ในโหมดผู้ใช้รายเดียว:

นอกจากนี้ยังมีฟังก์ชั่นในdbatools.ioซึ่งเป็นโซลูชั่น Powershell สำหรับการจัดการ SQL Server ที่เรียกว่าReset-DbaAdmin:


ความปลอดภัยไม่ใช่ปัญหาหลักที่นี่

ฉันเห็นผู้คนจำนวนมากที่เรียกร้องให้ Microsoft "แก้ไข" สิ่งที่เรียกว่า "ช่องโหว่" เหล่านี้ นี่เป็นวิธีการที่ถูกต้องในการกู้คืนการเข้าถึงอินสแตนซ์ของ SQL Server ที่คุณเป็นเจ้าของโดยชอบธรรม พวกเขาทุกคนต้องการสิทธิ์ที่ยกระดับบนโฮสต์ฟิสิคัลที่มี SQL Server อยู่ อย่างที่ฉันพูดกับหลาย ๆ คนถ้าคุณไม่ต้องการให้นักพัฒนาทำกับการติดตั้ง SQL Server อย่าทำให้พวกเขาเป็นผู้ดูแลระบบ


วิธีนี้จะอนุญาตให้ฉันเปิดใช้งานบัญชี SA ด้วยหรือไม่ ฉันติดอยู่ในตำแหน่งที่บัญชี SA ของฉันถูกปิดใช้งานและฉันมีกลุ่มโฆษณาที่มีบทบาทสาธารณะ นอกจากนี้วิธีการของคุณในรายการฉันจะสามารถทำตามขั้นตอนเหล่านี้โดยไม่มีการลบอินสแตนซ์ได้หรือไม่ ฉันถามเพราะเซิร์ฟเวอร์ของฉันอยู่ในสภาพแวดล้อมการใช้งานจริงในขณะนี้
Sean Perkins

1
@Sean ใช่คุณควรจะสามารถเปิดใช้งาน sa และ / หรือสร้างบัญชี SQL auth อีกครั้งหรือเพิ่มผู้ใช้โฆษณาของคุณ (ไม่ใช่กลุ่ม!) โดยเฉพาะเพื่อเพิ่มบทบาท สิ่งเหล่านี้ไม่จำเป็นต้องรีสตาร์ท SQL Server (กรณีเดียวที่จำเป็นต้องมีการเปลี่ยนแปลงระหว่างการตรวจสอบสิทธิ์แบบผสมและ Windows เท่านั้น)
Aaron Bertrand

ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามดำเนินการตามขั้นตอนของคุณ ฉันแน่ใจว่าจะจับภาพหน้าจอของบัญชีที่ระบุไว้เท่านั้น มีการเปลี่ยนแปลงบางอย่างใน SQL 2012 ที่จะไม่อนุญาตให้ใช้วิธีนี้หรือไม่? รุ่นปัจจุบันของฉันคือ11.0.3128 ยิ่งกว่านั้นไม่สำคัญว่าฉันจะเปลี่ยนแปลงรูปแบบใดฉันจะได้รับข้อผิดพลาดบางอย่างที่ระบุว่าฉันไม่มีสิทธิ์ใช้งาน สิ่งสุดท้ายที่ฉันสงสัยว่าสิ่งนี้สร้างความแตกต่าง แต่ฉันเปิด PowerShell ด้วยสิทธิ์ของผู้ดูแลระบบดำเนินการ cmd.exe แล้ว psexec -i -s "C: \ ...... smss.exe"! [ข้อผิดพลาดในการสร้างบัญชี] ( i.stack.imgur.com/ITOja.p
Sean Perkins

รูปที่แนบไม่แสดงอะไรเลยตอนนี้ แต่มันมี "SA" และ "NT AUTHORITY \ SYSTEM" เป็นบัญชีที่ระบุไว้เท่านั้น ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ "ผู้ใช้ไม่ได้รับอนุญาตให้ดำเนินการนี้ (Microsoft SQL Server, ข้อผิดพลาด: 15247)"
Sean Perkins

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