Bu makalede Proxy hesabı ile job tanımlama işlemini ele almış olacağız. Sql Server kurulumu yaparken servis hesaplarını Active directory üzerinde oluşturmuş olduğumuz minumum yetkilere sahip bir kullanıcı tanımlarız. Bu kullanıcı sadece sql servisleri için oluşturulur ve minumum seviyede yetki verilmesi gerekir. Oluşturulan bu kullanıcının farklı bir işlemde kullanılmaması tavsiye edilmektedir.
Servis hesaplarına tanımladığımız kullanıcıların Windows üzerinde sahip olması gereken bazı yetkiler haricinde sysadmin vb. bir yetki verilmesi tavsiye edilmez.
Not olması açısından Sql server servis hesabına verilecek minumum yetkilerden bazıları aşağıda belirtilmiştir.
Windows arama yerine Run yazıyoruz. Gelen ekranda secpol.msc yazarak Local Security Policy bölümüne giriyoruz. Gelen ekranda Local Policies>User Rights Assignment bölümünde gerekli bazı konfigürasyonların yapılması gerekmektedir. Şimdi bu yetkilendirmelere değinelim.
Bypass traverse checking: Bu yapı Windows dosyaları arasında geçişler ve yapılacak işlemler için izin almadan çalışabilmesini sağlar.
Log on as a service: Windows üzerinde tanımladığınız uygulamamın bir servis gibi çalışabilmesine izin verir. Bu yüzden sql server servis hesabını ve sql server agent servis hesabının burada tanımlanması gerekmektedir.
Lock Pages In Memory: Bu yapı ile sql server’ın sahip olduğu memory’in Windows’a geri verilmesi engellenmiş olur. Bu yapıda buffer pool için windows’dan almış olduğu memory’i bir daha windows’a iade etmez. Bu ayarı yapmadan önce windows’a gerekli ram miktarı bırakmalıyız.
Log on as a batch job: SQL Server üzerinden windows üzerinde bir işlem yapılması gerektiğinde(örneğin bazı scriptler içeren bir bat dosyası çalıştırmak) sql server’ın kullanacağı hesabın burada tanımlanması gerekir.
Servis hesaplarının yukarıda belirtilen yetkilendirmelerinden sonra kaldığımız yerden devam edelim.
Sql Agent Servis hesabı aşağıdaki belirtilen işlemlerden birini job aracılığıyla yapmaya çalıştığı zaman hata mesajıyla karşılaşırız. Bu hata yapısının önüne geçmek için Proxy yapısı kullanılmaktadır.
SQL Server Agent altında bulunan Proxy, bir SQL Server Agent görevinin (job step) başka bir kullanıcı hesabı ya da güvenlik bağlamında çalışmasını sağlar. Bir SQL Server Agent job’ının adımlarını (job step) farklı güvenlik kimlikleri ile çalıştırmak gerekebilir, bu durumda proxy devreye girer. Proxy, belirli bir job adımının çalıştırılmasında credential’ı kullanır. Proxy, bir ya da birden fazla SQL Server Agent alt sistemini kullanabilir (Transact-SQL, ActiveX Script, PowerShell, vb.). Proxy’ye tanımlanan kimlik bilgileri, proxy’nin hangi job adımlarını çalıştıracağını kontrol eder. SQL Server Agent job’larına proxyler atayarak, hassas yetkiler gerektiren işlemleri sınırlayabilir ve güvenliği artırabilirsiniz.
Credential, SQL Server’daki oturum açma bilgilerini depolayan bir nesnedir. Bu nesne, SQL Server dışındaki bir kaynağa erişim sağlamak için kullanılabilir. Örneğin, dosya paylaşımı, ağ kaynağı gibi sistem dışı bir kaynağa erişmek için bir credential tanımlanabilir. Credential’lar, bir kullanıcı adı ve parolayı güvenli bir şekilde depolar ve SQL Server, bu bilgilere ihtiyaç duyduğunda kullanır.
Credential oluşturulmadan önce, tanımlanacak Windows kullanıcısına Windows üzerinde log on as a batch job hakkı verilmelidir. Alacağımız hatalar doğrultusunda Login’e bazı ekstra yetkiler de verebilir. Makalenin başında Active directory üzerinde kullanıcı oluşturmalıyız demiştik. Kullanıcıyı local bilgisayar üzerinde de oluşturulur. Oluşturulan kullanıcının engellemelere takılmasını istemiyorsanız kullanıcının administrator grubuna eklenmesi gerekmektedir.
Şimdi Proxy kullanan bir job oluşturarak örnek yapalım.
Windows üzerinde oluşturulmuş olan kullanıcıya Log on as a batch job yetkisi verilmektedir. Oluşturduğunuz kullanıcıya bu yetkiler verilmeye bilir. Hata sunucu yetkilendirilmelerin yapılması gerekir.
Windows arama yerine secpol.msc yazılır. Daha sonra gelen ekranda Local Policies kısmında User Rights Assignment kısmına girilir. Gelen kısımda Log on as a batch job ifadesi çift tıklanıp Add user or Group.. kısmından Active Directory tarafında oluşturulmuş olan YCL2024\ProxyUser kullanıcısı eklenir.
Not: YCL2024\ProxyUser kullanıcısı sql server üzerine login eklenir. Local’imizde oluşturduğumuz kullanıcının da sql server’a eklenmesi gerekir. Sql server üzerinde oluşturulan loginler de herhangi bir yetkilendirme veya General sekmesinde credential seçilmez. Boş bir login olarak yapılandırılır.
Yukarıdaki ayarlamalardan sonra Security sekmesi altında Credential.. kısmında bir credential oluşturulur. Sql Server dışındaki bir ortama bağlanmak için kullanacağımız yapı. Aslında 2. Bir Sql Server servis kullanıcısı da diyebiliriz. Bunu kendimiz oluşturuyoruz.
Gelen ekranda active directory üzerinde oluşturduğumuz ve Windows üzerinde Log on as a batch job yetkisi verdiğimiz kullanıcı olarak karşımıza çıkmaktadır. Sql Agent servis yerini görecek kullanıcımız.
Yukarıdaki işlemleri tamamladıktan sonra OK deyip bir sonraki adıma geçiyoruz. Sql Server Agent altında bulunan Proxies kısmına sağ tıklanır ve New Proxy.. denilir. Genel olarak Proxy oluşturabildiğimiz gibi her bir subsystem altında da özel olarak oluşturulabilir.
Gelen ekranda Proxy ismimizi yazıyoruz ve kullanacağımız Credential’ı 3 noktaya tıklayıp seçiyoruz. Daha sonra Active to the following subsystems yazan yerden hangi subsystem ‘i kullanacaksak işaretliyoruz. Tüm Subsystem’leri seçebiliriz. Ya da istediğimiz Subsystem’i seçip yükleme yapılmaktadır.
Yukarıdaki resimde ilgili ayarlamaları yaptıktan sonra Principals kısmına tıklanır. Add denilerek belirli konfigürasyonlar yapılabilir.
Gelen ekranda Principals type üzerine tıklayıp SQL Server loginleri, Server rolleri ya da msdb veritabanındaki rolleri, proxy’i kullanacak şekilde ayarlayabiliriz. Sysadmin’ler için bu işlemi yapmaya gerek yoktur. Principal kısmında herhangi bir işleme gerek yoktur. Boş da bırakılabilir. Credential ismi ile gelen login’e ekstra bazı haklar verilir.
Job’ın owner’ı olarak A kullanıcısını seçmiş olduk. Bu kullanıcının ekstra yetkilere gerek yoktur. Vekil olarak A kullanıcısı Job’ı çalıştırmış olacak. Burası boşta bırakılabilir.
Tüm bu adımlardan sonra işlemimizi oluşturuyoruz. Aktif olan subsystemler üzerinde oluşturduğumuz proxy’in geldiğini görmüş oluyoruz. Genel bir şekilde Proxy oluşturduğumuz için tüm subsystemleri seçtiğimiz için tüm subsystem altına gelmiş oldu.
Yukarıdaki adımlardan sonra bir Job oluşturalım. Bu job Operating system(CmdExec) ile Windows üzerinden Sql Server’ın bir işlem yapmasını sağlamış olacağız. Yukarıda da belirtmiştik Job’ın Owner’ı yukarıda tanımlamış olduğum A kullanıcısı üzerinde gitmiş olacaktır. Herhangi yetkisiz bir login’de olabilir.
Sql Agent altında Jobs bölümünde sağ tıklayıp New Jobs diyiyoruz.
Gelen ekranda Job’a bir isim verdikten sonra Job’ın owner’ını A login’i olarak değiştiriyorum. Sa, A veya başka bir kullanıcı yeter ki Job çalıştıran bir kullanıcı olsun.
Steps bölümünde Job’ımın adımını tanımlıyorum. Step name kısmında bir CMD1 adında bir isim belirlemiş olduk. Type kısmında Operating system(CmdExec)’ı seçiyoruz. Run as kısmında ise tanımlamış Proxy üzerinde çalışmasını istediğimiz için ProxyJob’ı seçiyorum. Run as kısmından Sql Agent servisi’de seçilebilirdi. Hiyerarşiyi takip ederseniz ProxyJob ismi bir Credential değerine bağlı Credential ise dış dünyaya açılan bir yapı olarak karşımıza çıkmaktadır.
İlgili kopyalama komutunu Command bölümüne yapıştırıyorum.
xcopy /s c:\C2 c:\C1
Job’ımızı oluşturduktan sonra çalıştırdığımızda Hata mesajı almış olduk.
View History’den ilgili job’a baktığımızda aşağıdaki hata mesajını almış oldum.
İlgili hatayı incelediğimde YCL2024\ProxyUser kullanıcısına Log on as a batch job üzerinde yetki verilmediğini gözlemliyorum. Secpol.msc altında ilgili uzantıya kullanıcımızı tanımlıyoruz.
Credential altında oluşturduğumu kullanıcı klasörlere ulaşamıyor diye klasör bazlı yetki vermiş oldum. Aslında minumum yetkilere sahip olan sql servisinde de bu yetkilendirmeler yapılabilir.
Yukarıdaki tanımlamaları yaptıktan sonra Proxy aracılığıyla Job çalıştırmayı başarılı bir şekilde gerçekleştirmiş olduk.
Başka bir makalede görüşmek dileğiyle..
0 Yorum