Hiçbir sysadmin hesabı yokken SQL Server 2008'de kullanıcıya sysadmin nasıl eklenir


25

Çalışan bir SQL server 2008 örneği var. Maalesef test sırasında giriş bilgilerimin sysadmin haklarının seçimini kaldırdım ve şimdi okuyamıyorum (çünkü sysadmin haklarım yok).

SA dışında örnek için başka bir sysadmin hesabı yok.

Sadece Windows Kimlik Doğrulaması için ayarlandı, bu yüzden kayıt defterinde LoginMode'u 2'ye hackledim, böylece Sql Kimlik Doğrulaması'nı kullanarak SA olarak giriş yapabilirim. Bu gerçekten de giriş modunu Karışık olarak ayarladı, ancak SA kullanıcısı varsayılan olarak devre dışı bırakıldı ve yeniden etkinleştiremiyorum çünkü sysadmin haklarına sahip değilim.

SA girişini nasıl etkinleştiririm, böylece sysadmin'i girip tekrar normal hesabıma atayabilirim? Bunun için bir kayıt defteri ayarı var mı veya ana veritabanında mı saklanıyor?

Yanıtlar:


11

Yalnızca yerel bir bağlantı olarak kullanılabilen ve her türlü kötülüğü geri almanıza izin veren ve hatta her türlü kötülüğü geri almanıza izin veren en uber-admin bağlantı türü seçeneği Dedicated Administrator Connection ( DAC ). Bu yüzden bunu yapmanın resmi bir yolu olduğunu sanmıyorum.

Bu sistemi diriltmenin en hızlı yolu, SQL Server'ı kapatmak, kullanıcı veritabanı dosyalarını güvenli bir yere kopyalamak, kaldırmak, yeniden yüklemek (en azından önceden bulunduğunuz seviyeye kadar hizmet paketi olduğundan emin olmak, dosyaları geri kopyalamak ve eklemek) olabilir. veritabanları. (Kopyalama / geri kopyalamanın gerekli olduğundan emin değil, yalnızca güvende olmak için ...).

Sunucu düzeyinde nesneleri manuel olarak kurtarmanız gerekir (örn. Girişler)


1
Teşekkürler - Örneği kaldırdım ve yeniden yükledim. Veritabanını tekrar yerleştirdim ve her şey tekrar yolunda. Dikkat edilmesi gereken birkaç şey, örneği yeniden yüklemek için tam veritabanı altyapısı yükleyicisini kullanmaktı (bir süredir beni güdükleyen yalnızca bir yükleyici aracım vardı). Ayrıca, veritabanı dosyalarındaki izinleri değiştirmeniz gerekir, bu nedenle eklerken hata alırsınız (hata 5). Bunun dışında - hepsi iyi çalıştı.

Ayrıca, veritabanı dosyalarının bir kopyasını yaptım, ancak bunun gerekli olmadığı ortaya çıktı. Kaldırma veritabanlarını kaldırmadı. Ancak, bu davranışın farklı SQL Server sürümlerinde farklı olması durumunda veritabanı dosyalarını kopyalamanızı yine de tavsiye ederim.

27

SQL Server'daki gerçek bir arka kapı, bir şeyi tek kullanıcı modunda yeniden başlatmayı ve / veya yeniden başlatmayı gerektirmeyen bir durum var. Bunu, erişemediğim ancak bir şeyi kontrol etmem gereken sistemler üzerinde yaptım.

PSexec araçlarını buradan indirin . Bunu sunucuya yerleştirin ve komut istemine şu komutu uygulayın: psexec -i -s SSMS.exeveya sqlwb.exe

Bu, SSMS'yi SQL Server örneğine sysadmin erişimi olan bir sistem hesabı olarak açacaktır. Bu, SQL Server kurulumu sırasında yapılır, ancak bunun SQL 2012 ile böyle olmayacağını duydum.


1
Hayır, SQL Server 2012 RTM ve üzeri sürümlerde çalışmaz. İçeri girmek için, SQL Server hizmetini sunucunun yerel yönetici grubunun bir üyesi olarak tek kullanıcı modunda yeniden başlatmanız gerekir.
Shawn Melton

15

SQL Server 2008, SQL Server 2005'ten farklı, çünkü yerel yöneticiler artık sysadmin sabit sunucu rolünü devralmıyor.

SQL Server 2008 yüklendiğinde, sysadmin rolüne eklenecek bir hesap belirlemenizi ister. Ancak, yazılım yüklendikten sonra kutuyu alırsanız, bu size pek yardımcı olmaz.

Neyse ki, SQL Server tek kullanıcı modunda çalışırken Microsoft 2005 işlevselliğini korumuştur. İşte yaptığınız şey:

  • sunucuya windows yerel yönetici olarak giriş yap
  • sql sunucusunu durdur
  • komut isteminde sqlservr.exe dosyasının bulunduğu dizinde sqlservr.exe -m yazın ve enter tuşuna basın - bu SQL Server'ı tek kullanıcı modunda başlatır
  • SQL Server EM'i açın ve hesabınızı sysadmin sabit sunucu rolüne ekleyin
  • sql sunucusunu durdur, yeniden başlat (komut satırında veya SQL Server EM'de

Bu çözüm güzel çalışıyor. Sadece tek bir kullanıcı modunda sqlservr.exe'yi çalıştırmak için yerel yönetici olarak oturum açmanıza gerek olmadığını, sadece SSMS veya osql veya herhangi bir şekilde oturum açmanız gerektiğinde eklemek istedik.
AbeyMarquez

5

Bu harika bir soru ve birisi bu durumda olacak ve ondan kurtarılması gerekiyor.

Tüm kredi codykonior gider

Sunucudaki bir Windows Yöneticisiyseniz, kesinti ve bilinen bir risk olmadan erişim elde etmek için PowerShell v2 betiğini kullanabilirsiniz. Bunu, bir AD hizmet hesabı, sanal hesap altında çalışıyorsa veya hizmet başına SID ile korunsa bile, SQL Server hizmetinin giriş belirtecini çoğaltarak yapar.

Aşağıdaki komut dosyası, SQL Server hizmetlerini yineleyecek ve sizi eksik olduğunuz her yerde sysadmin rolüne ekleyecektir :

#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

Hala 'sysadmin' erişimi olan bir giriş oluşturabilirsiniz. Microsoft'ta Asıl Veri Mühendisi'ne (Saleem Hakani), aşağıdaki SQL Server İpuçları ve Püf Noktası'nı yazmıştı.

Bunu, test makinemin sa şifresini unuttuğumda benzer bir durumda sıkıştığımda buldum.

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

İşte gerçekleştirmeniz gereken adımlar:

  1. Tekli kullanıcı modunu kullanarak SQL Server örneğini başlatın (ya da SQL Server'ı tekli kullanıcı moduna sokacak minimal konfigürasyon)

Komut isteminden şunu yazın: SQLServr.Exe –m (veya SQLServr.exe –f)

Not: Binn klasörü çevre yolunuzda değilse, Binn klasörüne gitmeniz gerekir.

(Genellikle Binn klasörü şu adreste bulunur: C: \ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. SQL Server hizmeti tek kullanıcı modunda veya en az yapılandırmayla başlatıldığında, SQL Server'a bağlanmak için komut isteminden SQLCMD komutunu kullanabilir ve SQL Server örneğinde Yönetici olarak geri eklemek için aşağıdaki işlemleri gerçekleştirebilirsiniz.

SQLCMD –S

Artık SQL Server'da Yönetici olarak oturum açacaksınız.

  1. SQLCMD kullanarak SQL Server'a giriş yaptıktan sonra, yeni bir hesap oluşturmak veya SYSADMIN sunucu rolüne mevcut bir giriş eklemek için aşağıdaki komutları verin.

Yeni bir giriş oluşturmak ve bu girişi SYSADMIN sunucu rolüne eklemek için:

1> CREATE LOGIN '' PASSWORD = '' ile

2> git

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

2> go

SYSADMIN sunucu rolüne varolan bir giriş eklemek için aşağıdakileri yürütün:

1> SP_ADDSRVROLEMEMBER '', 'SYSADMIN'

Yukarıdaki işlem, mevcut bir giriş bilgisine veya yeni bir giriş bilgisine SYSADMIN ayrıcalıkları verilmesine özen gösterecektir.

  1. Yukarıdaki adımlar başarıyla gerçekleştirildiğinde, sonraki adım düzenli başlatma seçeneklerini kullanarak SQL Server hizmetlerini durdurmak ve başlatmaktır. (Bu sefer –f veya –m'ye ihtiyacınız olmayacak)

0

Daha sonra şunları yapabilirsiniz:
1) Yönetici ayrıcalıklarına sahip bir Windows kullanıcı hesabı oluşturun
2) Yeni yönetim hesabı olan pencerelerde oturum açın
açın 3) Windows Kimlik Doğrulaması'nı kullanarak Sql Server Mangement Studio'yu açın
4) Şimdi SQL Server'da sysadmin olarak giriş yaptınız, yani yeni hesaplar oluşturabilir veya kullanıcı


2
Bunu denedim ve işe yaramadı. Bu makinede yeni bir yönetici giriş hesabı oluşturdum. SQL server, oturum açmak için BUILTIN \ Users rollerini (sysadmin içermeyen) kullanıyor. Bu nedenle, yönetici türü değişiklikleri yapamıyorum.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.