SQL Server’da bir veritabanını farklı bir sunucuya taşıdığınızda veya geri yüklediğinizde (Restore), Login ile User arasındaki SID bağlantısı kopabilir. Bu durumdaki kullanıcılara “Orphaned Users” (Yetim Kullanıcılar) denir.
Sunucu seviyesindeki SID
SELECT name, sid FROM sys.server_principals WHERE name = 'LoginAdınız';
Veritabanı seviyesindeki SID
SELECT name, sid FROM sys.database_principals WHERE name = 'KullanıcıAdınız';

Aşağıdaki komut ile veritabanı altında bulunan kullanıcı ile sql server login kullanıcısı birbirlerine bağlanır. İlgili komut user’ın olduğu veritabanı altında çalıştırılmaktadır.
ALTER USER [veritabanı_kullanıcı_adı] WITH LOGIN = [server_login_adı];
Bu komutu çalıştırdığınızda SQL Server şunları yapar:
- Veritabanı içindeki User kaydını inceler.
- Onun bakmakta olduğu eski (geçersiz) SID değerini siler.
- Yerine sp_help_revlogin ile oluşturduğunuz yeni Login’in SID değerini yazar.
- Böylece “İsimler aynı ama ruhlar farklı” durumu çözülmüş olur.
Sunucu seviyesindeki Login (giriş) zaten mevcuttur; biz veritabanı seviyesindeki kullanıcıyı mevcut olan bu girişe “bağlarız”. Bu yüzden komut ALTER USER ile başlar.
Eski SQL sürümlerinde (SQL 2005/2008 öncesi) bu işlem için şu prosedür kullanılırdı:
EXEC sp_change_users_login 'Update_One', 'KullanıcıAdı', 'LoginAdı';
Eğer otomatik olarak loginin veritabanı altında aynı isimdeki user’a otomatik bağlanması için kullanılır.
EXEC sp_change_users_login 'Auto_Fix', 'KullanıcıAdınız';
Not: Microsoft bu yöntemi artık desteklememektedir ve ALTER USER kullanımını önermektedir.
Önce hangi kullanıcıların bağlantısının koptuğunu şu komutla görebilirsiniz. İlgili komut veritabanı altında çalıştırılmaktadır.
EXEC sp_change_users_login 'Report';
Veritabanı altında bulunan 4 kullanıcının Login ile bağlantısının koptuğu görülmektedir.

klnTEST kullanıcısına server üzerinde bulunan sid değerini kontrol ettiğimizde veritabanı altında bulunan user ile uyumlu olmadığı görülmektedir.
Select*from sys.sql_logins where name='klnTEST'

Tespit ettiğiniz kullanıcıyı Login ile bağlıyoruz. User’ın olduğu veritabanı altında çalıştırılması gerekmektedir.
ALTER USER klnTEST WITH LOGIN = klnTEST;
Tekrar veritabanı altında kontrol işlemi yapıldığında klnTEST kullanıcısının kaybolduğu görülmektedir.
EXEC sp_change_users_login 'Report';

Not: Yukarıdaki işlemler sorunu çözmenize yardımcı olmuyorsa sp_help_revlogin procedure ile kullanıcıyı sercondary sunucusundan tekrar oluşturulması gerekmektedir.
Not: Enforce password politikaları ile oluşturulan bir login primary ve secondary sunucularında farklı şifre ile bağlanmaktadır. Aynı sid olmasına rağmen şifrelerinin farklı olması login failed hatası almamıza sebep olacaktır. Bu sorunla karşılaşılırsa ya iki kullanıcının şifresinin eşitlenmesi gerekmektedir. Ya da aynı sid ile kullanıcının oluşturulması gerekmektedir.
Bu makalede Orphaned Users ile SID bağlanma konusunu detaylı değerlendirmiş olduk. Başka makalede görüşmek dileğiyle..
Boş konuşmalardan kaçının. Müminin-3
