Bu makalede sql server failover olduktan sonra kullanıcının failover olan sunucuya login olup giremediği hatası alınmış bunun sebebini ise önceden bu loginin primary sunucusunda oluşturulduğu ama failover olunan yeni sunucuda oluşturulmadığı görülmüştür. Sebebi şu AlwaysOn yapılarında loginler secondary sunucusuna senkron olmaz manuel bir şekilde aynı sid yapısıyla oluşturulması gerekmektedir.

Yukarıdaki resimde primary olan sunucuda FAILOVERLOGIN kullanıcısının ilgili sunucuya girerken herhangi bir sorun yaşamıyor. Ama failover olunca ikinci sunucuda aşağıdaki resimde görüldüğü gibi login işlemini yapamıyor. Çünkü kullanıcılar connection string’e listener ismini yazar hangi sunucu primary ise ona gider. Bağlanmış olduğu primary üzerinde yetkilerini kullanır.


Hata mesajını almış olduk herhangi bir failover sırasında eski sunucudaki kullanıcılar yeni sunucuda tanımlanmamışsa yukarıdaki gibi hata mesajıyla karşılaşmaktayız.
Bunun için aşağıdaki komut kullanılıp FAILOVERLOGIN kullanıcısının olduğu sunucuda çalıştırılır. Gelen ekranda hangi kullanıcı ikinci sunucuda yoksa sağ tarafında bulunan SID değeri kopyalanır. Amaç ikinci sunucuda oluşturmak için.
select name, SID from sys.sql_logins

Aşağıda bulunan komut ile failover olunan ikinci sunucuda yeni kullanıcı oluşturulur.
create login FAILOVERLOGIN with password='Yunus1299',SID= 0x33962E656389E344BA4C5A724E6BB14B
Kullanıcı şifresi paylaşılmaya bilir. Bu yüzden sp_help_revlogin komutundaki yapı gibi password haslenmiş bir şekilde verilmektedir. Aşağıdaki komut ile hashlenmiş password değeri görülmektedir.
select NAME, sid,password_hash from sys.sql_logins

Dikkat ederseniz sadece password kısmında şifre yerine hashlenmiş değer ve HASHED değeri
create login C with password=0x0200BB4B2C6728BA194B405D7D09F694642DC94ED0AE8A02CD2AA96D2A6C3D73FEC9B29779F25BD7E5829E9386817CCC306709A655D97DC5B8F13E09A43FC049CB9D29EF12F9 HASHED ,
sid=0x34B6416C167A0E4394EA0FCB0B02AA8F
İkinci sunucumda login oluşturduktan sonra login ile S2 sunucusuna bağlanmış oldum.

Bağlantı sağladıktan sonra bu kullanıcımın ilk veritabanında hangi yetkileri varsa gelmiş oldu. Sadece AdventureWork2012’i veritabanına yetki vermiştik onunda geldiğini görmüş oluyoruz.

Yukarıdaki iki kod bloğunu çalıştırmayıp microsoft’un sayfasından alacağınız bir stored procedured ile işlemlerimiz kısa bir şekilde yapabiliriz. Bu yapı sp_help_revlogin komutudur. Bu komut ile kullanıcının create script’ini alıp ikinci sunucuda oluşturabiliriz. Password hashlenmiş bir şekilde görülmektedir.
CREATE LOGIN [FAILOVERLOGIN]
WITH PASSWORD = 0x020074FA84EECE0D903B21E785012871DE2030FB6E280EE529CC3F615576EA823BC52A8AD5632F188FBC4F0BB48815992A796DE2B2C8CC1E9769E7D61F597E953003B9C4F0B5 HASHED, SID = 0x33962E656389E344BA4C5A724E6BB14B,
DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english], CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
İlk yaptığımız sid ile yapmada şifremizi yazmamız lazım karşı tarafta password politikalarına göre yapılmamış olabilir. Yeni ekleyeceğimiz sunucuda elle yapacağımız için create scpritte password politikalarına uygun şekilde şifre verilmesini söyler buda her sunucusu için iki şifre olabilir. zaten şifre görülmesi bir güvenlik açığıdır.
Başka bir makalede görüşmek üzere..
De ki: “Ey mülkün sahibi olan Allah’ım! Sen mülkü dilediğine verirsin. Dilediğinden de mülkü çeker alırsın. Dilediğini aziz edersin, dilediğini zelil edersin. Hayır senin elindedir. Şüphesiz sen her şeye hakkıyla gücü yetensin.”Âl-i İmrân-26