Bir login’in SQL Server Agent’a ulaşabilmesi için msdb veritabanındaki bazı veritabanı rolleri üzerinde yetkisinin olması gerekmektedir. Msdb veritabanındaki bu roller aşağıdaki gibidir.
- SQLAgentUserRole
- SQLAgentReaderRole
- SQLAgentOperatorRole
Login yukarıdaki veritabanı rollerinden 1’ine sahipse ya da sysadmin yetkisi varsa sql agent’ı görebilir.
SQLAgentUserRole: SQL Server Agent veritabanı rollerinden en az yetkisi olan roldür. Bu rol, kullanıcıların yalnızca kendi oluşturdukları işlere erişmesine ve yönetmesine izin verir. Diğer kullanıcıların işlerine erişemezler veya düzenleyemezler. Temel yetkiler arasında iş oluşturma, düzenleme, silme ve kendi işlerini izleme bulunur.
SQLAgentReaderRole: SQLAgentUserRole’ün yetkilerinin tamamına sahiptir. Ekstra bazı yetkileri vardır. Bu rol, kullanıcıların kendi işlerine ek olarak sunucu genelindeki tüm SQL Server Agent işlerini okuyabilmesini sağlar. Diğer kullanıcıların işlerini görebilir, ancak bu işleri düzenleyemez veya çalıştıramaz. Kendi işlerini oluşturma, düzenleme, silme ve izleme yetkileri de vardır.
SQLAgentOperatorRole: SQLAgentReaderRole’ün yetkilerinin tamamına sahiptir. Bu rol en geniş yetkilere sahip olan roldür. Kullanıcılar tüm işlere erişebilir, iş başlatabilir, durdurabilir, düzenleyebilir ve silebilir. Ayrıca, iş uyarılarını ve SQL Server Agent hatalarını izleyebilir ve bu hatalarla ilgili bildirim alabilirler. Bu rol, genellikle sistem yöneticilerine ve veritabanı yöneticilerine atanır. Bu roller, veritabanı yönetiminde yetkilerin güvenli bir şekilde dağıtılmasını ve farklı kullanıcı gruplarının yalnızca ihtiyaç duydukları kadar erişim ve kontrol elde etmelerini sağlar.
Şimdi ilk başta herhangi bir database üzerinde yetkisi olmayan bir login(AGENT1) oluşturalım ve giriş yapalım.

Yukarıdaki resimde görüldüğü gibi yetkisiz bir login oluşturulduğunda sql agent’ı göremediğini görmekteyiz.
Şimdi bu login’e server bazında sysadmin hariç tüm rolleri verelim tekrardan bakalım sql agent’ımız geliyor mu?

Bu rolleri tanımlamama rağmen sql agent göremem sadece sysadmin yetkisinin olması gerekmektedir. İlgili loginin yetki verilmeden önceki durumu.

Sysadmin yetkisi verdikten sonra tekrar bakalım sql agent’ın geldiğini görmekteyiz.

Kullanıcı veritabanı bazında bazı yetkiler verildiğinde ne gibi sonuçları oluyor onu gözlemleyelim.
Server role public yetkisinde olan herhangi bir login’e veritabanı altında tüm yetkiler verildiğinde sql agent servisinin gelmediğini görmekteyiz.


Login’imizin veritabanı bazlı yetki için user mapping kısmından sadece msdb veritabanın seçilmesiyle sql agent servisinin kullanılır olduğunu görmüş olacağız. İlgili kullanıcının server role seviyesinde public yetkisi bulunmaktadır.

İlgili yetkiden sonra sql agent servisinin geldiğini görmüş oluyorum.

SqlAgent servisimiz gelmiş oldu. Dikkat edersek agent servisimiz sınırlı çünkü sınırlı kullanıcı olan SQLAgentUserRole seçmiştik. Şimdi bu role üst seviye bir role yapalım farkı görelim.
Bu sefer farklı bir yoldan yetki verelim msdb veritabanı altında security bölümünde yetki vermek istediğimiz kullanıcıyı seçiyoruz.

AGENT1 kullanıcısına SQLAgentReaderRole yetkisini yetkisini veriyoruz.

Bu yetkiden sonra tekrardan AGENT1 kullanıcı ile login olduktan sonra sql agent ve altında bulunan tüm jobları görebildiğini görmüş oluruz.

AGENT1 kullanıcı ile login olduktan sonra job’lardan herhangi birine girdiğimizde job’ların sadece görüntülendiğini görebiliriz.

Kullanıcımızın yetkili olduğu jobları değiştirmesi için tekrardan yetkili bir kullanıcı ile bağlantı sağlandıktan sonra yetkili olmasını istediğimiz jobın owner’ı AGENT1 kullanıcı yapıldığında ilgili job’a girdiğinde düzenleme yapmasına sebebiyet verecektir.

Yukarıdaki işlemi yaptıktan sonra ilgili kullanıcı ile login olduktan sonra jobımızı güncelleyeceğimiz görülmektedir.

İlgili kullanıcının sahibi olmadığı diğer joblarda sadece okuma yetkisi olduğu görülmektedir.

Yukarıda AGENT1 kullanıcı için yaptığımız işlemleri SQLAgentOperatorRole yetkisi verilerekte yapılabilir. Bu role geniş yetkiye sahip olan sql agent servis rolüdür.
Bundan sonraki makalede bir login’in sql agent’ı göremeyip herhangi bir job çalıştırmasını görmüş olacağız.
Bir sonraki makalede görüşmek dileğiyle..
“Öyle ise emrolunduğun gibi dosdoğru ol.” Hud-112