Cara menambahkan sysadmin ke pengguna di SQL Server 2008 ketika tidak ada akun sysadmin

25

Saya memiliki contoh SQL server 2008 berjalan. Sayangnya selama pengujian saya membatalkan hak sysadmin untuk login saya dan sekarang tidak dapat membacanya (karena saya tidak memiliki hak sysadmin).

Tidak ada akun sysadmin lain untuk instance kecuali SA.

Saya dibentuk hanya untuk Otentikasi Windows jadi saya meretas LoginMode di registri menjadi 2 sehingga saya bisa masuk sebagai SA menggunakan Sql Authentication. Ini memang mengatur mode login ke Mixed, namun pengguna SA dinonaktifkan secara default dan saya tidak dapat mengaktifkannya kembali karena saya tidak memiliki hak sysadmin.

Bagaimana saya mengaktifkan login SA sehingga saya bisa masuk dan menetapkan kembali sysadmin ke akun normal saya? Apakah ada pengaturan registri untuk ini juga atau disimpan dalam database master?


sumber

Jawaban:

11

Bahkan jenis opsi koneksi yang paling uber-admin Dedicated Administrator Connection ( DAC ), yang hanya dapat digunakan sebagai koneksi lokal, dan memungkinkan Anda membatalkan semua jenis kejahatan, masih memerlukan kredensial login. Jadi saya tidak berpikir ada cara resmi untuk melakukan ini.

Cara tercepat untuk menghidupkan kembali sistem ini mungkin dengan mematikan SQL Server, menyalin file basis data pengguna di tempat yang aman, mencopot, instal ulang (pastikan untuk mengemas paket layanan setidaknya tingkat Anda sebelumnya), salin file kembali dan lampirkan basis data. (Tidak yakin penyalinan kembali / diperlukan, tetapi hanya untuk aman ...).

Anda masih harus memulihkan objek tingkat server secara manual (mis. Login)

Damien_The_Unbeliever
sumber
1
Terima kasih - saya menghapus instalan dan menginstal ulang. Pasang kembali basis data dan semuanya baik-baik saja lagi. Beberapa hal yang harus diwaspadai adalah menggunakan penginstal engine database lengkap untuk menginstal ulang instansinya (saya mempunyai instalatur alat manajemen saja yang membuat saya bingung untuk sementara waktu). Anda juga perlu mengubah izin pada file database sehingga jika tidak Anda mendapatkan kesalahan saat melampirkan (kesalahan 5). Selain itu - semuanya bekerja dengan baik.
Juga, saya memang membuat salinan file database, tetapi ternyata ini tidak perlu. Penghapusan instalasi tidak menghapus database. Namun, saya masih akan merekomendasikan menyalin file database kalau-kalau perilaku ini berbeda pada versi SQL server yang berbeda.
27

Backdoor aktual ke dalam SQL Server memang ada yang tidak memerlukan restart dan / atau me-reboot apa pun ke mode single-user. Saya telah melakukan ini pada sistem di mana saya tidak memiliki akses tetapi perlu memeriksa barang-barang.

Unduh alat PSexec dari sini . Tempatkan ini di server dan kemudian di prompt perintah, jalankan perintah ini psexec -i -s SSMS.exe:, atau sqlwb.exe

Ini akan membuka SSMS sebagai akun sistem yang memiliki akses sysadmin ke instance dari SQL Server. Ini dilakukan selama instalasi SQL Server, namun saya telah mendengar bahwa ini tidak akan terjadi dengan SQL 2012.

Shawn Melton
sumber
1
Tidak itu tidak berfungsi di SQL Server 2012 RTM dan di atasnya. Untuk masuk, Anda harus me-restart layanan SQL Server dalam mode single-user sebagai anggota grup admin lokal server.
Shawn Melton
15

SQL Server 2008 berbeda dari SQL Server 2005, dalam hal itu administrator lokal tidak lagi mewarisi peran server tetap sysadmin.

Ketika SQL Server 2008 diinstal, ia meminta Anda untuk menunjuk akun yang akan ditambahkan ke peran sysadmin. Namun, jika Anda menerima kotak setelah perangkat lunak diinstal, ini tidak banyak membantu Anda.

Untungnya, Microsoft mempertahankan fungsi 2005 ketika SQL Server berjalan dalam mode pengguna tunggal. Inilah yang Anda lakukan:

  • masuk ke server sebagai admin windows lokal
  • hentikan sql server
  • pada prompt perintah, di direktori tempat sqlservr.exe berada, ketik sqlservr.exe -m, dan tekan enter - ini akan memulai SQL Server dalam mode single-user
  • buka SQL Server EM, dan tambahkan akun Anda ke peran server tetap sysadmin
  • hentikan sql server, mulai ulang (pada baris perintah atau dalam SQL Server EM

sumber
Solusi ini bekerja dengan indah. Hanya ingin menambahkan bahwa Anda tidak harus masuk sebagai admin lokal untuk menjalankan sqlservr.exe dalam mode pengguna tunggal, hanya ketika Anda perlu masuk ke dalamnya melalui SSMS atau osql atau apa pun.
AbeyMarquez
5

Ini adalah pertanyaan yang bagus dan seseorang akan berada dalam situasi ini dan membutuhkan penyelamatan darinya ..

Semua kredit diberikan ke codykonior

Jika Anda seorang Administrator Windows di server maka Anda dapat menggunakan skrip PowerShell v2 untuk mendapatkan akses tanpa pemadaman dan tanpa risiko yang diketahui. Itu melakukan ini dengan menduplikasi token masuk dari layanan SQL Server bahkan jika itu berjalan di bawah akun layanan AD, akun virtual, atau dilindungi dengan SID per layanan

Skrip di bawah ini akan mengulangi layanan SQL Server dan akan menambahkan Anda ke peran sysadmin di mana pun Anda hilang:

#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
}
Kin Shah
sumber
2

Anda masih dapat membuat login dengan akses 'sysadmin'. Terima kasih kepada Principal Data Engineer di Microsoft (Saleem Hakani) yang menulis di bawah ini Tips & Trick SQL Server.

Saya menemukan ini ketika saya terjebak dalam keadaan yang sama ketika saya lupa kata sandi sa untuk mesin uji saya.

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

Inilah langkah-langkah yang perlu Anda lakukan:

  1. Mulai contoh SQL Server menggunakan mode pengguna tunggal (atau konfigurasi minimal yang juga akan menempatkan SQL Server dalam mode pengguna tunggal)

Dari command prompt ketik: SQLServr.Exe –m (atau SQLServr.exe –f)

Catatan: Jika folder Binn tidak ada di jalur lingkungan Anda, Anda harus menavigasi ke folder Binn.

(Biasanya folder Binn terletak di: C: \ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. Setelah layanan SQL Server telah dimulai dalam mode pengguna tunggal atau dengan konfigurasi minimal, Anda sekarang dapat menggunakan perintah SQLCMD dari command prompt untuk menyambungkan ke SQL Server dan melakukan operasi berikut untuk menambahkan diri Anda kembali sebagai Admin pada contoh SQL Server.

SQLCMD –S

Anda sekarang akan masuk ke SQL Server sebagai Admin.

  1. Setelah Anda masuk ke SQL Server menggunakan SQLCMD, terbitkan perintah berikut untuk membuat akun baru atau menambahkan login yang ada ke peran server SYSADMIN.

Untuk membuat login baru dan menambahkan login itu ke peran server SYSADMIN:

1> BUAT LOGIN '' dengan PASSWORD = ''

2> pergi

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> pergi

Untuk menambahkan login yang ada ke peran server SYSADMIN, jalankan yang berikut ini:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

Operasi di atas akan mengurus pemberian hak istimewa SYSADMIN untuk login yang ada atau login baru.

  1. Setelah langkah-langkah di atas berhasil dilakukan, langkah selanjutnya adalah berhenti dan memulai layanan SQL Server menggunakan opsi startup biasa. (Kali ini Anda tidak perlu –f atau –m)
Ramakant Dadhichi
sumber
0

Anda dapat melakukan yang berikut:
1) Buat akun pengguna windows dengan hak administratif
2) Login di windows dengan akun administratif baru
3) Buka Studio Sql Server Mangement menggunakan Windows Authentication
4) Sekarang Anda masuk dalam SQL Server sebagai sysadmin, jadi Anda dapat membuat akun baru atau memperbarui pengguna sa

Juan Carlos Velez
sumber
2
Mencoba ini dan tidak berhasil. Saya membuat akun login admin baru di mesin itu. SQL server menggunakan peran BUILTIN \ Users (yang tidak termasuk sysadmin) untuk login saya. Oleh karena itu saya masih tidak dapat membuat perubahan jenis admin.