วิธีเพิ่ม sysadmin ให้กับผู้ใช้ใน SQL Server 2008 เมื่อไม่มีบัญชี sysadmin


25

ฉันมีอินสแตนซ์ของ SQL Server 2008 ทำงานอยู่ น่าเสียดายในระหว่างการทดสอบฉันยกเลิกการเลือกสิทธิ์ดูแลระบบสำหรับการเข้าสู่ระบบของฉันและตอนนี้ไม่สามารถอ่านได้ (เพราะฉันไม่มีสิทธิ์ดูแลระบบ)

ไม่มีบัญชีดูแลระบบอื่น ๆ สำหรับอินสแตนซ์ยกเว้น SA

ฉันถูกตั้งค่าสำหรับการพิสูจน์ตัวจริงของ Windows ดังนั้นฉันจึงแฮ็ค LoginMode ในรีจิสตรีถึง 2 ดังนั้นฉันจึงสามารถเข้าสู่ระบบในฐานะ SA โดยใช้การพิสูจน์ตัวตนของ Sql นี่เป็นการตั้งค่าโหมดล็อกอินเป็นแบบผสมอย่างไรก็ตามผู้ใช้ SA ถูกปิดใช้งานโดยค่าเริ่มต้นและฉันไม่สามารถเปิดใช้งานได้อีกครั้งเพราะฉันไม่มีสิทธิ์ดูแลระบบ

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

คำตอบ:


11

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

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

คุณจะต้องกู้คืนวัตถุระดับเซิร์ฟเวอร์ด้วยตนเอง (เช่นการเข้าสู่ระบบ)


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

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

27

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

ดาวน์โหลดเครื่องมือ psexec จากที่นี่ วางสิ่งนี้ไว้บนเซิร์ฟเวอร์จากนั้นในพรอมต์คำสั่งให้เรียกใช้คำสั่งนี้: psexec -i -s SSMS.exeหรือ sqlwb.exe

สิ่งนี้จะเปิด SSMS เป็นบัญชีระบบที่มีการดูแลระบบการเข้าถึงอินสแตนซ์ของ SQL Server สิ่งนี้จะทำในระหว่างการติดตั้ง SQL Server แต่ฉันได้ยินมาว่าจะไม่เป็นเช่นนั้นกับ SQL 2012


1
ไม่มันไม่ทำงานใน SQL Server 2012 RTM ขึ้นไป ในการรับเข้าคุณจะต้องเริ่มบริการ SQL Server ใหม่ในโหมดผู้ใช้คนเดียวในฐานะสมาชิกของกลุ่มผู้ดูแลระบบภายในเครื่องของเซิร์ฟเวอร์
Shawn Melton

15

SQL Server 2008 นั้นแตกต่างจาก SQL Server 2005 ในผู้ดูแลท้องถิ่นนั้นไม่สืบทอดบทบาทเซิร์ฟเวอร์คงที่

เมื่อติดตั้ง SQL Server 2008 ระบบจะแจ้งให้คุณกำหนดบัญชีที่จะเพิ่มลงในบทบาทดูแลระบบ หากคุณได้รับกล่องหลังจากติดตั้งซอฟต์แวร์แล้วสิ่งนี้ไม่ได้ช่วยอะไรคุณมากนัก

โชคดีที่ Microsoft ยังคงใช้งานฟังก์ชัน 2005 เมื่อ SQL Server ทำงานในโหมดผู้ใช้คนเดียว นี่คือสิ่งที่คุณทำ:

  • ล็อกอินเข้าสู่เซิร์ฟเวอร์ในฐานะผู้ดูแลท้องถิ่นของ windows
  • หยุดเซิร์ฟเวอร์ sql
  • ที่คอมมานด์พรอมต์ในไดเรกทอรีที่มี sqlservr.exe อยู่ให้พิมพ์ sqlservr.exe -m และกด enter - สิ่งนี้จะเริ่ม SQL Server ในโหมดผู้ใช้คนเดียว
  • เปิด SQL Server EM และเพิ่มบัญชีของคุณไปยังหน้าที่ดูแลระบบเซิร์ฟเวอร์แบบถาวร
  • หยุดเซิร์ฟเวอร์ sql รีสตาร์ท (ที่บรรทัดคำสั่งหรือใน SQL Server EM

วิธีนี้ใช้ได้ผลอย่างสวยงาม แค่อยากจะเพิ่มว่าคุณไม่จำเป็นต้องเข้าสู่ระบบในฐานะผู้ดูแลระบบในท้องถิ่นเพื่อเรียกใช้ sqlservr.exe ในโหมดผู้ใช้คนเดียวเมื่อคุณจำเป็นต้องลงชื่อเข้าใช้ผ่านทาง SSMS หรือ osql หรืออะไรก็ตาม
AbeyMarquez

5

นี่เป็นคำถามที่ยอดเยี่ยมและมีคนอยู่ในสถานการณ์เช่นนี้และต้องการความช่วยเหลือจาก ..

เครดิตทั้งหมดไปที่codykonior

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

สคริปต์ด้านล่างจะย้ำบริการ SQL Server และจะเพิ่มคุณเข้าสู่บทบาทดูแลระบบทุกที่ที่คุณหายไป:

#GITHUB Link : https://github.com/codykonior/HackSql
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$services = Get-Service | Where { ($_.Name -eq 'MSSQLSERVER' -or $_.Name -like 'MSSQL$*') -and $_.Status -eq "Running" }
foreach ($service in $services) {
    if ($service.Name -eq "MSSQLSERVER") {
        $sqlName = ".\"
    } else {
        $sqlName = ".\$($service.Name.Substring(6))"
    }

    Write-Host "Attempting $sqlName"
    $serviceProcess = Get-WmiObject -Class Win32_Service -Filter "Name = '$($service.Name)'"

    Invoke-TokenManipulation -ProcessId $serviceProcess.ProcessID -ImpersonateUser | Out-Null
    $impersonatedUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Write-Host "Service $($service.Name) on PID $($serviceProcess.ProcessID) will connect to $sqlName as $impersonatedUser"

    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection("Data Source=$sqlName;Trusted_Connection=True")
    $sqlConnection.Open()
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand("If Not Exists (Select Top 1 0 From sys.server_principals Where name = '$userName')
Begin
    Create Login [$userName] From Windows
End

If Not Exists (Select Top 1 0 From master.sys.server_principals sp Join master.sys.server_role_members srp On sp.principal_id = srp.member_principal_id Join master.sys.server_principals spr On srp.role_principal_id = spr.principal_id Where sp.name = '$userName' And spr.name = 'sysadmin')
Begin
    Exec sp_addsrvrolemember '$userName', 'sysadmin'
End", $sqlConnection)
    $sqlCommand.ExecuteNonQuery() | Out-Null
    $sqlConnection.Close()
    Invoke-TokenManipulation -RevToSelf | Out-Null
}

2

คุณยังสามารถสร้างการเข้าสู่ระบบด้วยการเข้าถึง 'sysadmin' ขอบคุณอาจารย์ใหญ่ Data Data ที่ Microsoft (Saleem Hakani) ได้เขียนคำแนะนำด้านล่างของ SQL Server & Trick

ฉันพบสิ่งนี้ในขณะที่ฉันติดอยู่ในสถานะคล้ายกันเมื่อฉันลืมรหัสผ่าน sa สำหรับเครื่องทดสอบของฉัน

ลิงก์: https://blogs.technet.microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/

นี่คือขั้นตอนที่คุณจะต้องดำเนินการ:

  1. เริ่มอินสแตนซ์ SQL Server โดยใช้โหมดผู้ใช้คนเดียว (หรือการกำหนดค่าขั้นต่ำซึ่งจะทำให้ SQL Server ในโหมดผู้ใช้คนเดียว)

จากพรอมต์คำสั่งพิมพ์: SQLServr.Exe –m (หรือ SQLServr.exe –f)

หมายเหตุ: หากโฟลเดอร์ Binn ไม่ได้อยู่ในเส้นทางสิ่งแวดล้อมของคุณคุณจะต้องไปที่โฟลเดอร์ Binn

(โดยปกติโฟลเดอร์ Binn จะอยู่ที่: C: \ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

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

SQLCMD –S

ตอนนี้คุณจะเข้าสู่ระบบ SQL Server ในฐานะผู้ดูแลระบบ

  1. เมื่อคุณเข้าสู่ระบบ SQL Server โดยใช้ SQLCMD ให้ใช้คำสั่งต่อไปนี้เพื่อสร้างบัญชีใหม่หรือเพิ่มการเข้าสู่ระบบที่มีอยู่ให้กับบทบาทเซิร์ฟเวอร์ SYSADMIN

หากต้องการสร้างการเข้าสู่ระบบใหม่และเพิ่มการลงชื่อเข้าใช้ในบทบาทเซิร์ฟเวอร์ SYSADMIN

1> สร้างการเข้าสู่ระบบ '' ด้วย PASSWORD = ''

2> ไป

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> ไป

ในการเพิ่มการเข้าสู่ระบบที่มีอยู่ในบทบาทเซิร์ฟเวอร์ SYSADMIN ให้ดำเนินการดังนี้

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

การดำเนินการข้างต้นจะดูแลการให้สิทธิ์ SYSADMIN กับการเข้าสู่ระบบที่มีอยู่หรือการเข้าสู่ระบบใหม่

  1. เมื่อดำเนินการตามขั้นตอนข้างต้นสำเร็จแล้วขั้นตอนต่อไปคือการหยุดและเริ่มบริการ SQL Server โดยใช้ตัวเลือกการเริ่มต้นปกติ (เวลานี้คุณไม่จำเป็นต้องใช้ –f หรือ –m)

0

คุณสามารถทำสิ่งต่อไปนี้:
1) สร้างบัญชีผู้ใช้ windows ด้วยสิทธิ์ระดับผู้ดูแลระบบ
2) ลงชื่อเข้าใช้ในหน้าต่างด้วยบัญชีผู้ดูแลระบบใหม่
3) เปิดสตูดิโอจัดการเซิร์ฟเวอร์ Sql โดยใช้ Windows Authentication
4) ตอนนี้คุณเข้าสู่ระบบ SQL Server แล้ว คุณสามารถสร้างบัญชีใหม่หรืออัพเดทผู้ใช้ sa


2
ลองใช้วิธีนี้และใช้งานไม่ได้ ฉันสร้างบัญชีเข้าสู่ระบบผู้ดูแลระบบใหม่บนเครื่องนั้น เซิร์ฟเวอร์ SQL ใช้บทบาท BUILTIN \ Users (ซึ่งไม่รวม sysadmin) เพื่อเข้าสู่ระบบดังนั้นฉันยังไม่สามารถเปลี่ยนแปลงประเภทผู้ดูแลระบบได้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.