access denied Arşiv

SPSecurity.RunWithElevatedPrivileges Kullanımına Rağmen Access Denied Mesajı Almak

SharePoint üzerinde yazılım geliştirme işlemleri yaparken zaman zaman bağlı olan kullanıcının yetki seviyesinin üzerinde bir işlemi kontrollü şekilde daha yüksek bir yetki seviyesinde gerçekleştirmek isteyebilirsiniz. Örneğin arayüz üzerinden bir webpart yardımıyla seçilen kullanıcılara yetki vermek istiyorsunuz. Varsayılan olarak webpartınız o anda bağlı olan kullanıcının yetki seviyesinde çalışacak ve eğer bağlı kullanıcının “Full Control” yetkisi yoksa hata mesajı almasına neden olacaktır.

Bu durumda kodlarınızı aşağıdaki blok içerisine almanız kodlarınızın daha yüksek bir yetki seviyesi ile çalıştırılmasına yardımcı olur ve yaşanan sorunu ortadan kaldırabilirsiniz. Şüphesiz dikkatli kullanılması gereken bir kod bloğu.

Ancak bazen bu blokları kullanmanıza rağmen işlemin gerçekleşmediğini ve arka planda logları incelediğinizde alınan hatanın Access Denied olduğunu gözlemleyebilirsiniz. Bu durumun büyük olasılıkla nedeni bu kod bloğu dışında oluşturulmuş olan bir SPWeb veya SPSite nesnesini kullanıyor olmanızdır. Yani örneğin aşağıdaki gibi kullandığınızda sorun yaşayabilirsiniz.

Bu kullanım yerine SPSite ve SPWeb‘in bir instance’ının da SPSecurity.RunWithElevatedPrivileges içerisinde yaratılması ve bu nesnelerin kullanılması sorununuzu çözecektir. Yani kod bloğunu aşağıdaki gibi yapılandırabilirsiniz.

 

Hata: Failed to update database “DBNAME” because the database is read-only

Kodladığınız uygulamanız içerisinde, bir batch işlemi çalıştırırken veya bir SSIS paketini çalıştırdığınızda, yani veritabanı üzerinde yazma işlemi yapmak istediğiniz herhangi bir zamanda bu hata ile karşılaşabilirsiniz.

“Failed to update database “DBNAME” because the database is read-only”

Yaptığınız kontrollerde database’in read-only modda olmadığını gözlemlemiş olabilirsiniz. Bunun için pek çoğunuzun bildiği üzere management studio üzerinden ilgili veritabanı ismi üzerinde sağ tıklamanız ve özellikler ekranında “Options” bölümüne gelmeniz ve en alta inmeniz yeterli. Burada “Read-Only” özelliğinin “False” olmasını bekliyoruz. “True” ise zaten hatanın sebebi açıkça ortadadır. Değeri değiştirmeniz yeterli olacaktır.

Biz bu bölümün “False” olmasına rağmen hatayı aldığımızı varsayalım. Bu durumda yapmanız gereken kontroller için aşağıdaki kod bloğunu kullanabilirsiniz. “AdventureWorks” örnek olarak kullanılmıştır. Bu bölümde kendi veritabanı isminizi verebilirsiniz.

 

 

Son olarak SQL Server Express versiyonunu kullananlar için bir ek hatırlatma. Burada AttachDbFileName kullanıyorsanız SQL Server servis hesabınızın Connection String’de belirttiğiniz dosya yoluna erişim ve yazma için izni olduğundan da emin olmalısınız.

Hata: SSIS Access Denied

SQL Server Integration Services kurulumunu yapmanızın ardından kurulum aşamasında servis hesabı olarak verdiğiniz kullanıcı ile bile SSIS instance’ına bağlantı kurarken aşağıdaki şekilde yetki hatası alabilirsiniz.

“Connecting to the Integration Service on the computer ”[SERVERNAME]’ failed with the following error. Access is denied”

Esas olarak SQL Server Integration Services kurulumlarında varsayılan olarak server administrator grubu yetki sahibidir ancak bazen bu kullanıcı ile bile yetki hatası alabilir ve SSIS instance’ına bağlantı sağlayamayabilirsiniz. Bu durumda aşağıdaki adımları takip etmek işinize yarayacaktır. (SQL Server 2014 ve SQL Server 2016 için test edilmiştir)

  • Component Services ekranını açın. Bunun için Start > Run  kısmına “dcomcnfg” yazarak ilerleyebilirsiniz.
  • Sol bölümdeki panelden Computers > My Computer > DCOM Config bölümüne kadar gelin.
  • Burada “Microsoft SQL Server Integration Services 12.0” (Bu SQL Server 2014 için, SQL Server 2016’da versiyon numarası 13.0 olacaktır)
  • Üzerinde sağ tıklayarak “Properties” > “Security” tabına gelin ve ekrandaki bölümlere istediğiniz yetki seviyelerine göre kullanıcınızı veya grubunuzu ekleyin.
  • İşlemden sonra SQL Server Integration Services servisini yeniden başlatın.

Bazen buna rapmen yetkilendirmede sorun yaşıyor olabilirsiniz. Bu durumda ek bir adım olarak aşağıdakini de uygulayabilirsiniz.

  • Server Manager > Computer Management > Local Users and Groups > Groups kısmında “Distributed COM Users” grubunu bulun ve kullanıcınızı buraya ekleyin.