Joblarımızı Proxy Hesabı ile Çalıştırmak

19 Eyl by NURULLAH ÇAKIR

Joblarımızı Proxy Hesabı ile Çalıştırmak

Bildiğiniz gibi SQL Server Instance kurulumu yaparken ve sql server servisini  ya da sql server agent servisini,sql server configuration manager üzerinden değiştirirken, sql server servisi ve sql server agent servisi için tanımladığımız kullanıcılar, ihtiyaçları olabilecek minimum yetkilerle otomatik olarak yetkilendiriliyorlar. Tavsiye edilmemesine rağmen bazı yerlerde bu hesaplara sysadmin ve Windows üzerinde lokal admin hakları veriliyor. Normal şartlar altında sql server’ın verdiği yetkilerin dışında bu hesaplara Windows üzerinde log on as a service hakkı vermemiz yeterli olacaktır.

Ama kurulumu bu şekilde yaptığınızda ve aşağıdaki işlemlerden birini gerçekleştiren bir job tanımladığınızda job fail edecektir. Çünkü SQL Server Agent servisinin yetkileri kısıtlı olarak oluşturulmuştur.

  1. ActiveX Script
  2. Operating System(Cmd Exec)
  3. Replication Distributor
  4. Replication Merge
  5. Replication Queue Reader
  6. Replication Snapshot
  7. Replication Transaction-Log Reader
  8. Analysis Services Command
  9. Analysis Services Query
  10. SSIS Package Execution
  11. PowerShell
  12. Unassigned Proxies

Yukarıdaki maddelerde listelenen sql server agent subsystem’lerinin detaylı açıklamalarına aşağıdaki linkten ulaşabilirsiniz.

http://technet.microsoft.com/en-us/library/ms187100(v=sql.105).aspx

Proxy; bir job’a ait stepte, yukarıdaki maddelerdeki subsystemler üzerinde gerçekleştirilecek işlemleri, sql server agent servis hesabı dışındaki bir Windows kullanıcısı aracılığıyla gerçekleştiren account’tur diyebiliriz. Proxy oluşturmadan önce bir creadential oluşturmamız gerekir. Credential, bir Windows login’in bilgilerini tutar. Proxy bu Windows kullanıcısını referans göstererek işlemlerini gerçekleştirir. Credential oluşturulmadan önce, tanımlanacak Windows kullanıcısına Windows üzerinde log on as a batch job hakkı verilmelidir. Şimdi Proxy kullanan bir job oluşturarak örnek yapalım.

Öncelikle credential oluşturmak için kullanacağımız kullanıcımıza log on as a batch job hakkı vermek için aşağıdaki gibi secpol.msc’ye girelim.

User Rights Assignment üzerine tıklayarak aşağıdaki gibi log on as a batch job üzerinde sağ tıklayıp özellikler diyelim. Ve açılan kutucukta kullanıcımızı ekleme işlemini gerçekleştirelim. Bu hakkı vermeye yetkili değilseniz sistem grubundaki arkadaşlarınızdan istemeniz gerekir.

Daha sonra aşağıdaki gibi credential oluşturalım.

Bir sonraki adımda aşağıdaki gibi Proxy oluşturmaya başlıyoruz.

Açılan pencereden aşağıdaki gibi Proxy ismimizi yazıyoruz ve kullanacağımız credential’ı seçiyoruz. Ve daha sonra Active to the following subsystems yazan yerden hangi subsystem ‘i kullanacaksak işaretliyoruz. Biz örneğimizde Operating System(Cmd Exec)’i kullanacağız.

Principals ü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. Biz job owner olarak testlogin kullanıcısını atayacağımız için principals sekmesinden testlogin kullanıcımızı ekleyelim.(testlogin kullanıcısının oluşturacağımız job’ın owner yetkisinden başka bir yetkisi yok)  Ok’e basarak Proxy mizi oluşturmuş olduk.

Şimdi yeni bir job oluşturalım ve owner’ını testlogin olarak set edelim. Job’ın ismine herhangi bir isim verebilirsiniz. Ben JobCmdExec olarak isimlendirdim. Step sekmesine geçip step’e de bir isim verelim. Ben CmdExecStep1 olarak isimlendirdim. Daha sonra aşağıdaki gibi type kısmından Operating system(CmdExec) seçimini yapalım. Run as kısmında default olarak sql server agent servis hesabınızı kurulumda ne olarak tanımladıysanız o gelir. İlk etapta Proxy olmadan job’ımızın çalışıp çalışmayacağını denemek için bunu değiştirmeyelim ve command kısmına aşağıdaki gibi xcopy /s c:\test c:\test2 yazalım. Bu işlemi gerçekleştirebilmek için c altında test ve test2 adlarında iki klasör oluşturup c:/test klasörü altında kopyalama işleminin gerçekleşmesi için bir dosya koyalım. Ben deneme.txt ismiyle bir text dosyası oluşturdum.

Job’ımızı çalıştırdığımızda hata aldığını görüyoruz.

Hatanın ne olduğuna bakmak için job history’sine gidelim. Mesajda gördüğümüz hata aşağıdaki gibidir.

Non-SysAdmins have been denied permission to run CmdExec job steps without a proxy account.  The step failed.

Tekrar jobımıza sağ tıklayıp properties diyelim ve CmdExecStep1 stebindeki  run as sekmesinden daha önce tanımladığımız proxy’i seçelim ve jobımızı çalıştıralım.

 

Bu işlem sonrasında jobımızın sağlıklı bir şekilde çalıştığını ve deneme.txt dosyamızın test2 klasörüne kopyalandığını görüyoruz.

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir