31 Mart 2008 Pazartesi

System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCr

HATA MESAJI:
"System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\xxx.mdf'. (Microsoft.SqlServer.Smo)"

AÇIKLAMASI:
Bir yedek dosyasını bir SQL Server Instance' ına açmaya çalıştığınızda, eğer SQL Server Servisinizin, yedeği açmaya çalıştığınız klasör için gerekli izinleri yoksa bu hata mesajıyla karşılaşırsınız.

ÇÖZÜM:
Veritabanı yedeklerinin açma işlemini SQL Server servisi gerçekleştirir. Yedek dosyasının açılması demek, SQL Server servisinin, veritabanınızın dosyalarını yedek dosyasından hedef klasöre açması demektir. Yani SQL Server servis hesabınızın, veritabanı dosyalarının oluşturulacağı hedef klasörde yazma izinlerinin olması gerekiyor.

Bu işlem için SQL Server servisine, hedef klasör üstünde vermeniz gereken yetki ise Yazma (Write) yetkisidir.

2 yorum:

Musa Doğramacı dedi ki...

Bir diğer çözüm: Sql Server 2005 için:
SQL Server Configuration Manager/Sql Server 2005 Services/Sql Server(SQLExpress) sağ tık özellikler, Log On tabında "Built-in Action" Local System seç servisi yeniden başlat restore gerçekleşecektir.

Musa Doğramacı

Ekrem Önsoy dedi ki...

Bu çözüm önerisi pek sağlıklı değildir. Çünkü Local System hesabı, SQL Server servisinin sağlıkı çalışabilmesi için kullanacağı haklardan çok daha fazlasını içermektedir.

Bu konudaki en iyi pratik, eğer bir etki alanınız yoksa, SQL Server Instance' larınız için o Instance' a özel yerel bir Windows hesabı oluşturup, SQL Server Configuration Manager' dan bu oluşturduğunuz hesabı SQL Server servisi olarak tanımlamaktır.

Local System hesabı, Yerel Bilgisayar Yöneticisi hesabının tüm haklarına sahiptir. Bu nedenle sorun çözülmüştür. Ama tekrar vurguluyorum; bu servis, SQL Server servisine gereğinden fazla yetki vererek güvenliği tehlikeye atar.