SQL Server Always On mimarisinde, sunucular arasındaki veri trafiği ve senkronizasyon Hadr_endpoint adı verilen özel bir iletişim kapısı üzerinden yürütülür. Bu yapının sağlıklı çalışabilmesi için SQL Server’ı çalıştıran gerçek servis hesabının, bu endpoint üzerinde CONNECT yetkisine sahip olması bir tercih değil, zorunluluktur.
Sistemde hangi servis hesabının veya kullanıcının Endpoint üzerinde yetkili olduğunu doğrulamak için aşağıdaki sistem sorgusu kullanılır. Bu sorgu, yapılandırma hatalarını ayıklamak için ilk adımdır:
SELECT
e.name AS EndpointName,
p.name AS GranteeName,
p.type_desc AS GranteeType,
perm.permission_name,
perm.state_desc
FROM sys.endpoints e
JOIN sys.server_permissions perm ON perm.major_id = e.endpoint_id
JOIN sys.server_principals p ON p.principal_id = perm.grantee_principal_id
WHERE e.type = 4; -- 4 = Database Mirroring / Always On Endpoint

Yetkilendirmeden önce sql_gMSA hesabının sql server üzerine login olarak eklenmesi gerekmektedir. Herhangi bir sorun ile karşılaşmamak için Server Roles kısmından sysadmin yetkisi veriyorum.

Kullanıcı oluşturulduktan sonra tekrardan aynı sorgu çalıştırıldığında başarılı sonucu almış oluruz.
GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO [YCL2026\sql_gMSA$];

Yukarıda komutla yapılan işlem SSMS arayüzünden de yapılmaktadır.

Tekrar yukarıdaki komut ile baktığımızda artık sql_gMSA hesabının hadr enpoint üzerinde yetkili olduğu görülmektedir.

Önceden yetkili sql server servis hesabını kaldırmak için ssms arayüzünden connect yetkisi elinden alınır.

İlgili işlemin scripti:
use [master]
GO
REVOKE CONNECT ON ENDPOINT::[Hadr_endpoint] TO [YCL2026\SqlUser] AS [S1\Administrator]
GO
İlgili sonucun güncellendiği görülmektedir.

Hadr_endpoint üzerinde farkı hesapların olmasının ne gibi sakıncaları vardır.
SQL Server Always On yapısında Hadr_endpoint, sunucular arasındaki “iletişim kapısıdır.” Eğer SQL Server servis hesabı (yeni oluşturduğumuz sql_gMSA$) bu kapı üzerinde yetkili olmazsa, sistemin tüm “Always On” işlemleri felç olur.
Availability Group (AG) içindeki veritabanları birbirine veri gönderemez. Birincil sunucuda (Primary) yaptığınız işlemler, İkincil sunucuya (Secondary) iletilemez. Veritabanı durumları “Not Synchronizing” veya “Disconnected” olarak görünür.
SQL Server Error Log kayıtlarında sürekli olarak şu tip hatalar döner:
Database Mirroring login attempt by user ‘YCL2026\sql_gMSA$’ failed with error: ‘Connection refused’.
Bu hata, S1 sunucusunun S2’ye bağlanmaya çalıştığını ama S2’nin “Seni tanımıyorum, bu kapıdan (endpoint) geçme yetkin yok” diyerek bağlantıyı reddettiğini gösterir.
Otomatik failover (Automatic Failover) işleminin gerçekleşmesi için sunucuların sürekli “Health Check” (Sağlık Kontrolü) yapması gerekir. Endpoint yetkisi olmayan bir servis hesabı bu kontrolü yapamaz ve sistem kesintiye uğrar.
Kısaca: SQL Server Always On yapısının kalbi Hadr_endpoint ise, bu kalbin anahtarı doğru servis hesabına tanımlanmış CONNECT yetkisidir.
Bu makalede SQL Server Always On Hadr_endpoint Üzerinde Sql Servis Hesabı Yetkilendirme konusunu detaylı bir şekilde görmüş olduk.
Başka makalede görüşmek dileğiyle..
