Bu makalede Always-On mimarisinde SQL Server Engine ve Agent kullanıcı hesaplarının domainde gMSA kullanıcı hesabı olarak değiştirme işlemlerinin yapılması anlatılmıştır.
Step 1: gMSA kullanıcı Tanımlamak için ilk önce tanımlanacak cluster’a bağlı sunucularda server manager kısmında role administration kısmından tanımlama yapılır.
Step 2: Active Directory den gMSATEST (Kullanıcı adı SQL Server Engine üzerinde görüneceğinden bu ad tamamen sizin isteğinize bağlıdır.) kullanıcısı oluşturulur.
Step 3: Active Directory’den aşağıdaki komutla gMSA kullanıcıları için yeni oluşturulacaklar dâhil otomatik SPN yapılması için ayar yapılır.
1 |
-- dsacls (Get-ADServiceAccount -Identity gMSATEST).DistinguishedName /G "SELF:RPWP;servicePrincipalName" |
Step 4: PowerShell üzerinden (Her bir clustera bağlı sunucular üzerinden tek tek yapmaya gerek yok tek birinde yapmamız tüm cluster’a bağlı sunucularda ayar uygulanmakta)
Step 5: Server Manager’dan Role feature’lardan Remote Server Administration altında ad-ds kısmı yüklenir.
1 |
PS C:Windowssystem32> Install-ADServiceAccount gMSATEST |
1 |
PS C:Windowssystem32> Test-ADServiceAccount gMSATEST |
True
1 |
PS C:Windowssystem32> Get-ADServiceAccount -Identity gMSATEST -Properties PasswordLastset |
Yukarıdaki scriptlerden dönüş alınması önemli alınmadığı takdirde;
1 |
get-adserviceaccount -Identity gMSATEST-properties PrincipalsAllowedToRetrieveManagedPassword |
script ile sunucu isimleri kontrol edilir. Sunucular doğru ise devam edilir (değer olarak 0’lı bir guid Id basacaktır) farklı ise AD Ekibinden değişiklik istenir.
Script Çıktısı Örn.
DistinguishedName : CN=gMSATEST,CN=Managed Service Accounts,DC=intranet,DC=intra
Enabled: True
Name: gMSATEST
ObjectClass: msDS-GroupManagedServiceAccount
ObjectGUID: 2z1c887ep-52a5-4dd2-3125-101s6c8c1453
PasswordLastSet: 07.06.2021 10:58:42 AM
SamAccountName: gMSATEST$
SID: S-8-2-31-2884678545-789615522-620645608-1474186
Step 6: SQL Server Configuration Manager’dan sunucu için servis hesapları değiştirilecektir. Değişim sonrası engine restart edilir.
Step 7: gMSA hesabı oluşturulan Instance’da kullanıcıları oluşturup endpoint ayarı yapılması gerekiyor. (Bu ayar yapılmazsa AlwaysOn endpoint’ler değiştirmeden önce disconnect oluyor);
1 |
select * from sys.endpoints |
1 2 3 4 5 6 |
USE [master] GO CREATE LOGIN [DomaingMSATEST$] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english] GO |
ALTER AUTHORIZATION ON ENDPOINT:: Hadr_endpoint TO [DomaingMSATEST$];
1 2 3 4 5 |
alter endpoint Hadr_endpoint state=stopped go alter endpoint Hadr_endpoint state=started |
Step 8: Kullanıcının (Engine Kullanıcısı, bizim Engine Kullanıcımız ‘Domaintestuser’) tüm sahiplikleri kaldırıldıktan sonra aşağıdaki işlemler yapılır.
–
-1-) Database Owner Change Script; Kullanıcının sahip olduğu tüm database sahiplikleri [sa] olarak değiştirilir.
1 |
SELECT'ALTER AUTHORIZATION ON DATABASE::[' + name + '] to [sa]' FROM sys.databases WHERE SUSER_SNAME(owner_sid) = 'Domaintestuser' |
–2-) Database Jobs Change Script; Agent kullanıcısında gMSA yapacağımız için buradaki tüm sahiplikleri [sa] olarak değiştirilir.
1 2 3 4 5 6 7 |
select'EXEC msdb.dbo.sp_update_job @job_id=N'''+convert(varchar(250),s.job_id)+''', @owner_login_name=N''sa''' frommsdb..sysjobs s leftjoin master.sys.syslogins l on s.owner_sid = l.sid wherel.name = ’Domaintestuser ' |
–3-) Availability Group Sahiplik Scripti; ile eski kullanıcı eğer availability group sahibi ise sahiplikleri değiştirilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT' alter authorization on availability group::'+ ag.name + ' to sa' FROMsys.availability_replicas ar LEFTJOIN sys.server_principalssp ON sp.sid = ar.owner_sid INNERJOIN sys.availability_groups ag ON ag.group_id = ar.group_id WHERE ar.replica_server_name =SERVERPROPERTY('ServerName') and sp.name= ' Domain testuser '; |
–4-) Schema ve Object Sahiplik Scripti; ile eski kullanıcı eğer schema ve object sahibi ise sahiplikleri değiştirilir. Bu değişikliği loop döngüsünde yapan sistem sp’si ile yapılır.
1 2 3 |
EXECUTE MASTER.sys.sp_MSforeachdb 'use [?]; SELECT db_name(),name FROM sys.schemas WHERE principal_id = USER_ID('' Domaintestuser'')' EXECUTE MASTER.sys.sp_MSforeachdb 'use [?]; SELECT db_name(),name FROM sys.objects WHERE principal_id = USER_ID(testuser'')' |
–5-) Login Açık olan Kullanıcı Scripti; aşağıdaki script ile tespit edilip kill edilir.
1 |
Sp_WhoIsActive @show_sleeping_spids=2 |
Step 9: Tüm bu işlemler bittikten sonra aşağıdaki adımlar kontrol edilir, varsa değiştirilmesi gereken adımlar değiştirilir.
- Eski servis kullanıcısın bilgisayarlarda sign off olduğundan emin olunmalı.
- Alınan Son backup kontrollerinin çalışması için credential hesabının değiştirilmesi ve bu kullanıcı veri tabanlarında sysadmin olarak eklenmeli.
- Backup Alınan dosyalarda eski servis kullanıcısın yetkisi olduğundan yeni bir folder oluşturulup advance share yaparak. Yeni servis hesabına full control verilmeli ve everyone yetkisi kaldırılmalı.
- Eski servis hesabının, yeni servis hesabı eklenen sunucuların computer management=>Local User and Groups kısmından kaldırılması.
0 Yorum