Apa yang Anda lakukan akan tergantung pada versi SQL Server Anda, serta apakah Anda mampu menurunkan layanan SQL Server untuk membangun kredensial baru. Dua metode pertama di sini tidak perlu memulai kembali instance:
Untuk contoh SQL Server 2005, 2008, dan 2008 R2
Anda dapat terhubung menggunakan NT AUTHORITY\SYSTEM
akun (atau metode backdoor lainnya). Ada beberapa detail dalam beberapa jawaban di sini:
Saya juga memiliki tip tentang MSSQLTips.com yang membahas masalah ini:
Pada dasarnya, Anda mengunduh PSExec dari Microsoft, lalu menggunakannya untuk meluncurkan Management Studio setelah Anda menginstalnya:
PsExec -s -i "C:\...\Ssms.exe"
Ini akan terhubung sebagai NT AUTHORITY\SYSTEM
dan akan memungkinkan Anda untuk melakukan hal-hal di Object Explorer, seperti:
Ubah instance ke mode SQL Server dan Windows Authentication - klik kanan nama Server, tekan properti, dan ubah tombol radio jika saat ini disetel ke Windows saja:
Tetapkan kata sandi untuk sa
akun - perluas Keamanan, perluas Login, klik kanan sa
dan tekan Properti, dan dalam dialog yang dihasilkan akan ada dua bidang entri kata sandi:
Tambahkan login Anda sendiri sebagaisysadmin
- klik kanan Login, Login Baru ... masukkan nama login Anda (dalam formulir DOMAIN\username
) kemudian pindah ke tab Peran Server dan centang sysadmin
kotak dan klik OK:
(atau, jika login Anda sudah terdaftar, klik kanan, Properties, dan pastikan sysadmin
dicentang di bawah Peran Server)
Untuk SQL Server 2012 dan contoh yang lebih baru
Dimulai dengan SQL Server 2012, NT Authority\SYSTEM
tidak lagi diberikan hak untuk SQL Server secara default. Jadi cara lain untuk melakukannya dalam versi yang lebih baru ini telah dirinci oleh Argenis Fernandez :
- Jika layanan SQL VSS Writer sedang berjalan, hentikan, dan tunda semua paket perawatan atau perangkat lunak cadangan pihak ketiga yang mungkin mengandalkannya.
Buka regedit.exe
dan ubah nilai HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath
to point to SQLCMD.exe
, yang akan masuk C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn
. Setelah diedit, nilai registri akan terlihat seperti berikut (maaf untuk pengguliran):
"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];"
Cobalah untuk memulai layanan SQL VSS Writer lagi (Anda akan mendapatkan kesalahan; tidak apa-apa).
Anda sekarang harus dapat terhubung sysadmin
menggunakan YourDomain\YourUserName
. Jadi hentikan layanan SQL VSS Writer, perbaiki registri, dan mulai ulang layanan (jika Anda perlu menjalankannya, atau jika sudah berjalan sebelum Anda memulai ini).
Saya telah membahas hal ini secara lebih rinci dalam tip kedua:
Meskipun ketika saya menulis tip itu, saya menggunakan pendekatan yang lebih rumit untuk membuat salinan SQLCMD.exe
dan mengganti sqlwriter.exe
- lebih mudah untuk hanya mengarahkan layanan SQLCMD.exe
langsung.
Jika Anda mampu mengambil layanan SQL Server
Ada jalur yang didukung secara resmi dari Microsoft yang mengharuskan memulai kembali instance dalam mode pengguna tunggal:
Ada juga fungsi di dbatools.io , solusi Powershell untuk mengelola SQL Server, yang disebut Reset-DbaAdmin
:
Keamanan bukanlah masalah utama di sini
Saya melihat banyak orang yang meminta Microsoft untuk "memperbaiki" apa yang disebut "kerentanan" ini. Ini adalah pendekatan yang valid untuk memulihkan akses ke contoh SQL Server yang Anda miliki. Mereka semua memerlukan hak yang lebih tinggi pada host fisik di mana SQL Server berada; seperti yang saya katakan kepada beberapa orang, jika Anda tidak ingin pengembang mengacaukan instalasi SQL Server, jangan menjadikannya administrator.