SQL Server İşletim sistemi hatası 5: “5 (Erişim engellendi.)”


153

SQL öğrenmeye başlıyorum ve üzerinde çalışmak için bir veritabanı sağlayan bir kitabım var. Aşağıdaki bu dosyalar dizinde ama sorun sorguyu çalıştırdığınızda, bana bu hatayı verir:

Msg 5120, Seviye 16, Durum 101, Satır 1 "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf" fiziksel dosyası açılamıyor. İşletim sistemi hatası 5: "5 (Erişim reddedildi.)".

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

Kitapta yazar çalışması gerektiğini söylüyor, ancak benim durumumda çalışmıyor. Aradım ama sorunun tam olarak ne olduğunu bilmiyorum, bu yüzden bu soruyu gönderdim.


Yedekleme dosyası zaten varsa, lütfen hizmetin yazma iznine sahip olduğundan emin olmanın yanı sıra "salt okunur" özelliğine sahip olmadığından emin olun.
jumxozizi

Yanıtlar:


133

SQL Server veritabanı motoru hizmet hesabının yeni klasörde okuma / yazma izinleri olmalıdır.

Check out bu

Düzeltmek için aşağıdakileri yaptım:

Veri grubu (S :) ve Günlük Dosyası (T :) için tam denetime sahip Administrators Group dosya güvenliği izinlerine eklendi.

Veritabanı ekli ve iyi çalışıyor.

resim açıklamasını buraya girin

resim açıklamasını buraya girin


4
Bazen SQL sunucusuAdministrators Group
JDandChips

57
Ayrıca, SQL Server Management Studio'yu yalnızca sunucu hizmetini değil Yönetici olarak başlatmanız da yararlı olabilir.
david.barkhuizen

1
Benim için aşağıdaki bağlantıdaki çözüm işe yaradı: stackoverflow.com/a/19061137/365188
Ozair Kafray

3
Benim için SQL Server Agent Service hesabını Yerel Sistem olarak değiştirmek çalıştı.
singhm0077

22
SQL Server örneğiniz bir hizmet hesabı altında çalışıyorsa (ör. Benimki MSSQL$SQLEXPRESS), hesabı klasör izinleri listesine şu şekilde eklemeniz gerektiği açık olmayabilir:NT Service\MSSQL$SQLEXPRESS
Brian Lacy

109

Eski bir yazı, ancak burada Windows 7 altında çalışan SQL Server 2014 için çalışan adım adım:

  • Kontrol Paneli ->
  • Sistem ve Güvenlik ->
  • Yönetimsel Araçlar ->
  • Hizmetler ->
  • SQL Server'ı (SQLEXPRESS) çift tıklayın -> sağ tıklayın, Özellikler
  • Oturum Açma Sekmesini Seçin
  • "Yerel Sistem Hesabı" nı seçin (varsayılan, bazı geniş Windows Sistem hesabıdır)
  • -> Tamam
  • sağ tıklama, Durdur
  • sağ tıklama, Başlat

Voilá!

Oturum açma hesabının ayarlanmasının kurulumda bir seçenek olabileceğini düşünüyorum, ancak öyleyse bu varsayılan değildi ve bu sorunun farkında değilseniz kaçırmak kolaydı.


5
Birçok seçenek denedim ama cevabınız iyi çalışıyor. Teşekkürler mickeyf.
vicky

2
Win 10 altında SQL Server 2014 için de çalışır. Teşekkürler.
Johan Foley

7
-1 Bunu yapmak, bu kullanıcıyı ilk etapta kurma fikrine aykırıdır. Bu bir güvenlik özelliğidir ve bunu yapmak onu engeller.
NullUserException

2
WOW .. İnsanlar bu "cevap" atladı inanamıyorum .. Bu büyük bir güvenlik sorunu yaratabilir .. Aksi takdirde, ilk başta bu kullanıcı ayarlamak için bir neden olmaz, değil mi? Her neyse, bu, kendi durumlarında bir güvenlik sorunu olarak görmeyen insanlar için bir "çözüm" dür.
curiousBoy

2
Güvenliğin bazı işleri yapmaktan daha önemli olduğunu düşünen herkes SQL sunucularını kapatabilir!
Ivan

44

Erişim reddedildi sorununu aşmak için SSMS'yi yönetici olarak başlattım ve bu, yerel sürücümden bir veritabanı eklememe izin verdi. Veritabanı başka bir SQL ve windows örneğinde oluşturuldu.


3
bu benim için ... Ben sadece tamamen yerel bir kuruluma bakıyorum ve bu sorunu, Windows 10 Home üzerinde aldım ve daha önce mdf & ldf "sahibi" kendimi başka bir nedenden dolayı yaptım - belki alakalı
Mike M

3
Bu benim için de geçerli. Windows 10 ve Microsoft SQL Server 2012 kullanıyorum. SQL Management Studio'yu Yönetici olarak çalıştırdım ve sonra Adventure Work Sample veritabanını ekleyebiliyorum.
arsho

1
Bu, bir çalışma etki alanı ortamında çalışırken Windows 10 Pro ile ilgili sorunu da çözdü.
PerPlexSystem

Same - Domain Env, SSMS 2017.x, Win10 Pro. Diğer makineden ayrılır ve yeni makineye takılır.
TravisWhidden

44

Bu, SQL Server'ın .bak dosyasını içeren klasöre uygun izni olmadığı ve bu hatayla ilgili olduğu Windows ile ilgili bir sorundur.

En kolay çözüm, .bak dosyanızı gerekli tüm izinlere sahip varsayılan SQL yedekleme konumuna kopyalamaktır. Başka bir şeyle uğraşmanıza gerek yok. Gelen SQL SERVER 2012 , bu konumu

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)

@AdamLevitt'in kurulu veya daha önce yüklenmiş birden çok SQL sürümü var mı? Doğru yere koyduğunuzdan emin misiniz?
Hammad Khan

1
@hmd, Teşekkürler. Düzeltme 2012 yedekleri dir için ihracat oldu.
Adam Levitt

1
Bu çözüm SQL Server 2014'te de çalışır. Yol C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King

Bu cevap olmalı !!
Axel

MS SQL Express 2016 ile benzer bir sorun yaşadım, çözüm .mdf dosyamı klasöre koymaktı: C: ​​\ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2

14

Bu sorunu yaşadım. SQL Server'ı yönetici olarak çalıştırmanız yeterlidir


1
UAC'de olduğu gibi 'Yönetici Olarak Çalıştır' benim için çalıştı. Hesap Yöneticisi olarak oturum açmam gerekmiyordu (ancak yöneticiler grubundayım).
Mike Cheel

1
Evet, aynı şeyi yaptı, yönetici olarak çalıştı ve her şey yolunda gitti.
Clyde

12

Evet, doğru. İlk sqlserver hizmet hesabınızı bulmanız gerekir, aynı anda ctrl + alt + delete tuşlarına bastığınızda Görev Yöneticisi'nde görebilirsiniz; Sonra, "C okuma / yazma ayrıcalığını vermelisiniz. : \ Murach \ SQL Server 2008 \ Databases "yazın.


10

Sorun, SQL Server'ın mdf & ldf dosyalarına erişmesine izin verilmemesinden kaynaklanmaktadır. Tüm bu prosedürler işe yarayacaktır:

  1. MSSQLSERVER hizmet başlangıç ​​kullanıcı hesabını, dosyalarda daha iyi ayrıcalıklara sahip kullanıcı hesabıyla doğrudan değiştirebilirsiniz. Ardından veritabanını eklemeyi deneyin.
  2. Veya mdf & ldf dosyalarının güvenlik sekmesindeki dosyayı okuma ve yazma ayrıcalıkları işaretli olarak kullanıcıya atayabilirsiniz.
  3. Windows yönetici hesabıyla başlayın ve SQL Server'ı yönetici olarak çalıştır seçeneğiyle açın ve Windows kimlik doğrulaması ile oturum açmayı deneyin ve şimdi veritabanını eklemeyi deneyin.


5

Benim için SQL Server Management studio ile aşağıdaki şekilde çözüldü-admin olarak oturum aç (Windows kimlik doğrulaması olarak oturum açtım) -mdf dosyasını takın (sağ tıklayın Veritabanı | attach | Ekle)-admin olarak oturum aç-olarak oturum aç normal kullanıcı


4

Gerçek sunucu izinleri bu noktada önemli olmayacaktır; her şey yolunda görünüyor. SQL Server'ın kendisi klasör izinlerine ihtiyaç duyar.
sürümünüze bağlı olarak, klasörünüze dokunmak için SERVERNAME $ MSSQLSERVER izinleri ekleyebilirsiniz. Othewise, varsayılan BACKUP dizininde olmalıdır (onu kurduğunuz yer veya varsayılan olarak c: \ programfiles (x) \ MSSQL \ BACKUP olmalıdır.


2

Aşağıdaki adımları uygulasanız bile aynı hata iletisini alabilirsiniz.

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

Yine de izin hatasını aldım, ancak Ekle ekranında, alt bölümün STILL'in LOG dosyasını gösterdiğini ve hata mesajının aynı kaldığını fark ettim.

Umarım bu aynı şeyi yapan birine yardımcı olur.


0

Çok Basit Çözüm.

  1. Sistem yöneticisi ile giriş yapın
  2. mdf ve ldf dosyalarınızı "C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" içine kopyalayın.
  3. Şimdi oradan ekleyin işe yarayacak

1
Verileri program dosyaları dizininde saklamamalısınız. SQl Server'ı kurduğunuzda varsayılan konum değiştirilmelidir
OrangeKing89

0

Uygulamamda Entity çerçevesini kullandım ve bu sorun yaşadım, klasör ve windows hizmetlerinde herhangi bir izin ayarladım ve çalışmıyor, bundan sonra uygulamayı yönetici olarak başlattım (exe dosyasına sağ tıklayın ve "yönetici olarak çalıştır" ı seçin) ince.


0

Bu hatayı bir Visual Studio projesi için klasördeki bir .MDFdosyada APP_DATA(veya nereye koyduğunuzda) alırsanız, bunu yapmanın yolu, buradaki mevcut DATAklasörden izinleri kopyalamaktı (Desteklemek için SQL Express 2014 kullanıyorum) eski bir uygulama):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(not: asıl kurulum yolunuz değişkenim - özellikle de örnek adınız farklıysa)

Erişime DATAsahip olduğunuzdan emin olmak için önce klasörü yönetici olarak çift ​​tıklayın , ardından klasördeki özellikleri açın ve klasör için aynısını taklit edin APP_DATA. Benim durumumda eksik kullanıcı MSSQL$SQLEXPRESS2014(örneği adlandırdım çünkü SQLEXPRESS2014sizinki farklı olabilir). Bu aynı zamanda SQL Server hizmeti kullanıcı adı olur.


0

Nedense, tüm doğru izinleri ayarlamak benim durumumda yardımcı olmadı. Bir dosyayı vardı db.bakben nedeniyle geri mümkün değildi 5(Access is denied.)hatası. Dosya diğer birkaç yedekleme dosyasıyla aynı klasöre yerleştirildi ve tüm izinler aynıydı diğer dosyalarla . Bu db.bakdosya dışındaki tüm dosyaları geri yükleyebildim . Hatta SQL Server hizmet günlüğü kullanıcı değiştirmeye çalıştım - hala aynı sonuç. Etkisi olmadan dosyayı kopyalamayı denedim.

Sonra sadece aynı dosyayı oluşturmaya çalıştım

type db.bak > db2.bak

dosyayı kopyalamak yerine. Ve işte çalıştı!db2.bakbaşarıyla geri yüklendi.

Yedekleme dosyasını okuma ile ilgili diğer bazı sorunların yanlışlıkla 5(Access is denied.)MS SQL tarafından bildirilebileceğinden şüpheleniyorum .


0

Linux, ben gittim /var/opt/mssql/data/bir terminali klasör ve açılan sudosonra, hangi değiştirmek aşağıdaki gibi benim * .mdf ve * .ldf dosya izinlerini değiştirdi yourDBsenin Veritabanı dosya adıyla ve myUserşu anda oturum açmış kullanıcı adına:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Bundan sonra, herhangi bir sorun olmadan yeniden bağlandı.


0

SSMS oturum açma kullanıcısının .mdf dosyasında izni olmadığı anlamına gelir. Benim için böyle çalıştı:

SSMS'yi açtım (yönetici olarak çalıştır) ve yönetici kullanıcı olarak oturum açtım, veritabanı eki sağ tıklayın, ekle'yi tıklayın, .mdf dosyasını seçin, Tamam'ı tıklayın. Bitti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.