September 7, 2026
SQL Server 2022'de Unutulan SA Parolasını Kurtarma: Windows Administrator’ı SYSADMIN Yapmak
SQL Server ortamlarında zaman zaman sa hesabının parolasının unutulması veya mevcut SQL Server sysadmin hesabına erişilememesi gibi…
By Emrah SEMİZ
3 min read
SQL Server ortamlarında zaman zaman sa hesabının parolasının unutulması veya mevcut SQL Server sysadmin hesabına erişilememesi gibi durumlarla karşılaşabiliriz.
Özellikle production ortamında çalışan bir SQL Server için ilk tercihimiz mümkün olduğunca servisi restart etmeden problemi çözmektir.
Ancak ortamda:
saparolası bilinmiyorsa,- Windows hesabımız SQL Server üzerinde
sysadmindeğilse, - başka bir
sysadminhesabına erişimimiz yoksa,
SQL Server'ın single-user mode özelliği kullanılarak erişim yeniden kazanılabilir.
Bu yazıda SQL Server 2022 üzerinde Windows Administrator hesabını sysadmin rolüne ekleyerek erişimi geri kazanacağız.
1. Öncelikle Problemi Doğru Tanımlayalım
Örneğin elimizde aşağıdaki gibi bir yapı olduğunu düşünelim:
SQL Server 2022
│
├── sa
│ └── Parola bilinmiyor
│
└── Windows Administrator
└── SQL Server sysadmin değilSQL Server 2022
│
├── sa
│ └── Parola bilinmiyor
│
└── Windows Administrator
└── SQL Server sysadmin değilBurada önemli bir ayrım var:
Windows Administrator olmak, SQL Server'da otomatik olarak
sysadminolmak anlamına gelmez.
SQL Server kurulumu sırasında hangi Windows kullanıcı veya grubuna sysadmin yetkisi verildiyse SQL Server normal modda o hesaplar üzerinden yönetilebilir.
2. SQL Server Servis Hesabını Karıştırmayalım
Örneğin SQL Server servisinin şu hesapla çalıştığını görebiliriz:
NT SERVICE\MSSQLSERVERNT SERVICE\MSSQLSERVERBu, SQL Server'ın Windows servis hesabıdır.
sa ile aynı şey değildir.
sa
↓
SQL Server Authentication login
NT SERVICE\MSSQLSERVER
↓
SQL Server Windows servis hesabısa
↓
SQL Server Authentication login
NT SERVICE\MSSQLSERVER
↓
SQL Server Windows servis hesabıDolayısıyla amacımız NT SERVICE\MSSQLSERVER hesabını yönetici yapmak değil.
Amacımız:
Windows Administrator
↓
SQL Server sysadminWindows Administrator
↓
SQL Server sysadminilişkisini oluşturmaktır.
3. Önce Kesintisiz Yöntemi Deneyin
Single-user mode'a geçmeden önce mutlaka mevcut Windows hesabıyla SQL Server'a bağlanmayı deneyin.
SSMS:
Authentication:
Windows AuthenticationAuthentication:
Windows Authenticationile bağlanmayı deneyin.
Bağlandıktan sonra:
SELECT
ORIGINAL_LOGIN() AS LoginName,
IS_SRVROLEMEMBER('sysadmin') AS IsSysadmin;SELECT
ORIGINAL_LOGIN() AS LoginName,
IS_SRVROLEMEMBER('sysadmin') AS IsSysadmin;Sonuç:
IsSysadmin
----------
1IsSysadmin
----------
1ise zaten sysadmin yetkimiz vardır.
Bu durumda hiçbir restart yapmadan:
ALTER LOGIN [sa]
WITH PASSWORD = 'YeniGucluSifre!2026';
ALTER LOGIN [sa] ENABLE;ALTER LOGIN [sa]
WITH PASSWORD = 'YeniGucluSifre!2026';
ALTER LOGIN [sa] ENABLE;komutlarıyla sa parolası değiştirilebilir.
Bu, production ortamı için en güvenli ve en az kesintili yöntemdir.
4. Hiçbir SYSADMIN Hesabına Erişemiyorsak
Bu durumda SQL Server'ın single-user mode özelliğini kullanabiliriz.
Single-user mode'da SQL Server yalnızca tek bağlantıya izin verir.
Burada kritik nokta budur.
SQL Server single-user modda açıldığında SQL Server Agent, monitoring yazılımları veya başka uygulamalar bağlantıyı bizden önce alırsa SQLCMD ile bağlantı kuramayabiliriz.
Bu nedenle:
-m-myerine mümkün olduğunca:
-mSQLCMD-mSQLCMDkullanmak daha kontrollü bir yöntemdir.
Böylece yalnızca SQLCMD bağlantısına izin verilir.
5. SQL Server Instance Bilgisini Kontrol Edelim
PowerShell'i Administrator olarak açalım:
Get-Service | Where-Object {$_.Name -like "MSSQL*"}Get-Service | Where-Object {$_.Name -like "MSSQL*"}Default instance örneği:
MSSQLSERVERMSSQLSERVERNamed instance örneği:
MSSQL$SQL2022MSSQL$SQL2022olabilir.
Default instance için:
MSSQLSERVERMSSQLSERVERkullanacağız.
6. SQL Server'ı Single-User Mode'da Başlatmak
SQL Server Configuration Manager'ı açıyoruz.
Şuraya gidiyoruz:
SQL Server Configuration Manager
↓
SQL Server Services
↓
SQL Server (MSSQLSERVER)
↓
PropertiesSQL Server Configuration Manager
↓
SQL Server Services
↓
SQL Server (MSSQLSERVER)
↓
PropertiesSQL Server'ın startup parametrelerine:
-mSQLCMD-mSQLCMDekliyoruz.
Ardından SQL Server servisini yeniden başlatıyoruz.
Default instance için PowerShell:
Restart-Service MSSQLSERVERRestart-Service MSSQLSERVERKontrol:
Get-Service MSSQLSERVERGet-Service MSSQLSERVERServisin:
RunningRunningolduğunu görmeliyiz.
7. SQLCMD ile Bağlanalım
SQL Server'ın bulunduğu sunucuda Administrator yetkili CMD veya PowerShell açıyoruz.
Default instance:
sqlcmd -E -S localhostsqlcmd -E -S localhostNamed instance:
sqlcmd -E -S localhost\SQL2022sqlcmd -E -S localhost\SQL2022Bağlantı başarılıysa:
1>1>şeklinde SQLCMD prompt'u gelir.
8. Administrator Hesabını SQL SYSADMIN Yapmak
Örneğin bilgisayarımızın adı:
SERVERNAMESERVERNAMEise Windows hesabımız:
SERVERNAME\AdministratorSERVERNAME\Administratorolacaktır.
SQLCMD içerisinde:
CREATE LOGIN [SERVERNAME\Administrator] FROM WINDOWS;
GO
ALTER SERVER ROLE [sysadmin]
ADD MEMBER [SERVERNAME\Administrator];
GOCREATE LOGIN [SERVERNAME\Administrator] FROM WINDOWS;
GO
ALTER SERVER ROLE [sysadmin]
ADD MEMBER [SERVERNAME\Administrator];
GOBurada iki işlem yapıyoruz:
1. Windows login oluşturuyoruz
CREATE LOGIN [...]
FROM WINDOWS;CREATE LOGIN [...]
FROM WINDOWS;2. Login'i sysadmin rolüne ekliyoruz
ALTER SERVER ROLE [sysadmin]
ADD MEMBER [...];ALTER SERVER ROLE [sysadmin]
ADD MEMBER [...];9. Login Zaten Varsa
Eğer:
CREATE LOGINCREATE LOGINkomutu login'in zaten mevcut olduğunu söylerse, login oluşturmak yerine doğrudan:
ALTER SERVER ROLE [sysadmin]
ADD MEMBER [SERVERNAME\Administrator];
GOALTER SERVER ROLE [sysadmin]
ADD MEMBER [SERVERNAME\Administrator];
GOçalıştırabiliriz.
10. Yetkiyi Kontrol Edelim
Şimdi:
SELECT
SUSER_SNAME() AS LoginName,
IS_SRVROLEMEMBER('sysadmin') AS IsSysadmin;
GOSELECT
SUSER_SNAME() AS LoginName,
IS_SRVROLEMEMBER('sysadmin') AS IsSysadmin;
GOveya:
SELECT
sp.name,
IS_SRVROLEMEMBER('sysadmin', sp.name) AS IsSysadmin
FROM sys.server_principals sp
WHERE sp.name LIKE '%Administrator%';
GOSELECT
sp.name,
IS_SRVROLEMEMBER('sysadmin', sp.name) AS IsSysadmin
FROM sys.server_principals sp
WHERE sp.name LIKE '%Administrator%';
GOile kontrol edebiliriz.
Beklenen sonuç:
IsSysadmin
----------
1IsSysadmin
----------
111. Artık SA Parolasını Değiştirebiliriz
Administrator hesabımızı sysadmin yaptıktan sonra:
ALTER LOGIN [sa]
WITH PASSWORD = 'YeniGucluSifre!2026';
GOALTER LOGIN [sa]
WITH PASSWORD = 'YeniGucluSifre!2026';
GOEğer sa disabled durumdaysa:
ALTER LOGIN [sa] ENABLE;
GOALTER LOGIN [sa] ENABLE;
GOKontrol:
SELECT
name,
is_disabled
FROM sys.sql_logins
WHERE name = 'sa';
GOSELECT
name,
is_disabled
FROM sys.sql_logins
WHERE name = 'sa';
GOBeklenen:
is_disabled
-----------
0is_disabled
-----------
012. Single-User Mode'dan Çıkmayı Unutmayın
En önemli adımlardan biri burasıdır.
İşlem bittikten sonra SQL Server Configuration Manager'a tekrar giriyoruz.
Startup Parameters içerisinden:
-mSQLCMD-mSQLCMDparametresini kaldırıyoruz.
Sonrasında SQL Server'ı tekrar başlatıyoruz.
Default instance:
Restart-Service MSSQLSERVERRestart-Service MSSQLSERVERNamed instance:
Restart-Service 'MSSQL$SQL2022'Restart-Service 'MSSQL$SQL2022'Böylece SQL Server tekrar normal multi-user mode ile çalışmaya başlar.
13. Son Test
Artık SSMS üzerinden:
Authentication:
Windows Authentication
User:
SERVERNAME\AdministratorAuthentication:
Windows Authentication
User:
SERVERNAME\Administratorile bağlanabiliriz.
Ayrıca sa hesabını da test edebiliriz:
Authentication:
SQL Server Authentication
Login:
sa
Password:
Yeni parolaAuthentication:
SQL Server Authentication
Login:
sa
Password:
Yeni parolaSQL içerisinde:
SELECT
SUSER_SNAME() AS LoginName,
IS_SRVROLEMEMBER('sysadmin') AS IsSysadmin;SELECT
SUSER_SNAME() AS LoginName,
IS_SRVROLEMEMBER('sysadmin') AS IsSysadmin;sonucu:
LoginName = sa
IsSysadmin = 1LoginName = sa
IsSysadmin = 1olmalıdır.
14. Production Ortamında Dikkat Edilmesi Gerekenler
Bu yöntem bir emergency recovery yöntemidir.
Production SQL Server üzerinde uygulamadan önce:
- Change kaydı oluşturulmalı.
- Restart için bakım penceresi planlanmalı.
- SQL Server Agent durumu kontrol edilmeli.
- Monitoring sistemlerinin bağlantı kurması engellenmeli.
-mSQLCMDparametresinin işlem sonunda kaldırıldığından emin olunmalı.- İşlem sonrasında SQL Server'ın normal multi-user modda çalıştığı doğrulanmalı.
- Oluşturulan geçici/yardımcı Windows login'ler kontrol edilmeli.
sahesabı gerekiyorsa güçlü bir parola kullanılmalı.- Kurum politikası izin veriyorsa
sahesabının kullanımı yerine kişisel/domain DBA hesapları tercih edilmelidir.
Özet
Senaryomuz:
SA şifresi unutuldu
↓
Windows hesabı SQL SYSADMIN değil
↓
Başka SYSADMIN hesabına erişilemiyor
↓
SQL Server -mSQLCMD ile başlatılır
↓
SQLCMD ile Windows Administrator bağlanır
↓
Administrator → SYSADMIN yapılır
↓
SA password reset edilir
↓
-mSQLCMD kaldırılır
↓
SQL Server normal modda başlatılır
↓
Windows Administrator ile SQL yönetimiSA şifresi unutuldu
↓
Windows hesabı SQL SYSADMIN değil
↓
Başka SYSADMIN hesabına erişilemiyor
↓
SQL Server -mSQLCMD ile başlatılır
↓
SQLCMD ile Windows Administrator bağlanır
↓
Administrator → SYSADMIN yapılır
↓
SA password reset edilir
↓
-mSQLCMD kaldırılır
↓
SQL Server normal modda başlatılır
↓
Windows Administrator ile SQL yönetimiBuradaki en önemli bilgi şudur:
Windows Administrator hesabının SQL Server'da önceden sysadmin olması gerekmez. SQL Server single-user recovery senaryosunda erişim yeniden kazanılarak Windows hesabı sysadmin rolüne eklenebilir.
Ancak production ortamında single-user mode kullanmadan önce mutlaka mevcut bir sysadmin hesabıyla erişim olup olmadığı kontrol edilmelidir. Çünkü erişim varsa SQL Server'ı restart etmeye hiç gerek yoktur.