SQL Server-Betriebssystemfehler 5: "5 (Zugriff verweigert.)"

153

Ich fange an, SQL zu lernen, und ich habe ein Buch, das eine Datenbank enthält, an der ich arbeiten kann. Diese Dateien befinden sich im Verzeichnis, aber das Problem ist, dass beim Ausführen der Abfrage der folgende Fehler auftritt:

Meldung 5120, Ebene 16, Status 101, Zeile 1 Die physische Datei "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf" kann nicht geöffnet werden. Betriebssystemfehler 5: "5 (Zugriff verweigert.)".

   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

In dem Buch sagt der Autor, dass es funktionieren sollte, aber es funktioniert in meinem Fall nicht. Ich habe gesucht, aber ich weiß nicht genau, wo das Problem liegt, also habe ich diese Frage gestellt.

dijai jijfs
quelle
Wenn die Sicherungsdatei bereits vorhanden ist, stellen Sie sicher, dass sie nicht über das Attribut "Schreibgeschützt" verfügt und dass der Dienst über die Schreibberechtigung verfügt.
Jumxozizi

Antworten:

133

Das SQL Server-Datenbankmodul-Dienstkonto muss über Berechtigungen zum Lesen / Schreiben im neuen Ordner verfügen.

Überprüfen Sie dies

Um dies zu beheben, habe ich Folgendes getan:

Die Administratorgruppe wurde zu den Dateisicherheitsberechtigungen mit voller Kontrolle für die Datendatei (S :) und die Protokolldatei (T :) hinzugefügt.

Hat die Datenbank angehängt und es funktioniert gut.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Rahul Tripathi
quelle
4
Manchmal wird SQL Server unter einer anderen Benutzergruppe alsAdministrators Group
JDandChips
57
Es kann auch hilfreich sein, SQL Server Management Studio als Administrator zu starten, nicht nur als Serverdienst.
David.Barkhuizen
1
Für mich funktionierte die Lösung unter folgendem Link: stackoverflow.com/a/19061137/365188
Ozair Kafray
3
Bei mir hat das Ändern des SQL Server Agent Service-Kontos in Local System funktioniert.
singhm0077
22
Wenn Ihre SQL Server-Instanz unter einem Dienstkonto ausgeführt wird (z. B. meines MSSQL$SQLEXPRESS), ist es möglicherweise nicht offensichtlich, dass Sie das Konto zur Ordnerberechtigungsliste hinzufügen müssen als:NT Service\MSSQL$SQLEXPRESS
Brian Lacy
109

Ein alter Beitrag, aber hier ist eine schrittweise Anleitung, die für SQL Server 2014 unter Windows 7 funktioniert hat:

  • Systemsteuerung ->
  • System und Sicherheit ->
  • Verwaltung ->
  • Dienstleistungen ->
  • Doppelklicken Sie auf SQL Server (SQLEXPRESS) -> Rechtsklick auf Eigenschaften
  • Wählen Sie die Registerkarte Anmelden
  • Wählen Sie "Lokales Systemkonto" (der Standard war ein stumpfes Windows-Systemkonto).
  • -> OK
  • Rechtsklick, Stopp
  • Rechtsklick, Start

Voilá!

Ich denke, das Einstellen des Anmeldekontos war möglicherweise eine Option in der Installation, aber wenn ja, war dies nicht die Standardeinstellung und war leicht zu übersehen, wenn Sie dieses Problem nicht bereits kannten.

MickeyfAgain_BeforeExitOfSO
quelle
5
Ich habe viele Optionen ausprobiert, aber Ihre Antwort funktioniert einwandfrei. Danke mickeyf.
Vicky
2
Funktioniert auch für SQL Server 2014 unter Win 10. Vielen Dank.
Johan Foley
7
-1 Dies widerspricht der ganzen Idee, diesen Benutzer überhaupt einzurichten. Es ist ein Sicherheitsmerkmal, und dies umgeht es.
NullUserException
2
WOW .. Ich kann nicht glauben, dass die Leute gerade in diese "Antwort" gesprungen sind .. Dies könnte ein großes Sicherheitsproblem verursachen .. Sonst gäbe es keinen Grund, diesen Benutzer zuerst festzulegen, oder? Auf jeden Fall ist es eine "Lösung" für Personen, die dies in ihren Fällen nicht als Sicherheitsproblem betrachten.
neugierigBoy
2
Jeder, der der Meinung ist, dass Sicherheit wichtiger ist als Arbeit, kann einfach seinen SQL Server ausschalten!
Ivan
44

Um das Problem mit der Zugriffsverweigerung zu umgehen, habe ich SSMS als Administrator gestartet und konnte so eine Datenbank von meinem lokalen Laufwerk aus anhängen. Die Datenbank wurde in einer anderen SQL- und Windows-Instanz erstellt.

JayKayOf4
quelle
3
Das war es für mich ... Ich schaue mir nur ein vollständig lokales Setup an und habe dieses Problem unter Windows 10 Home. Zuvor hatte ich den MDF- und LDF-Besitzer aus einem anderen Grund - vielleicht relevant
Mike M.
3
Das funktioniert auch bei mir. Ich verwende Windows 10 und Microsoft SQL Server 2012. Ich habe SQL Management Studio als Administrator ausgeführt und kann dann die Adventure Work Sample-Datenbank anhängen.
Arsho
1
Dies löste auch das Problem mit Windows 10 Pro, wenn es in einer Arbeitsdomänenumgebung ausgeführt wurde.
PerPlexSystem
Same - Domain Env, SSMS 2017.x, Win10 Pro. Von einer anderen Maschine getrennt und an einer neuen Maschine angebracht.
TravisWhidden
44

Dies ist ein Windows-Problem, bei dem SQL Server nicht über die entsprechende Berechtigung für den Ordner verfügt, der die .bak-Datei enthält, und daher dieser Fehler.

Am einfachsten ist es, Ihre .bak-Datei an den Standardspeicherort für SQL-Sicherungen zu kopieren, der über alle erforderlichen Berechtigungen verfügt. Sie müssen mit nichts anderem herumspielen. In SQL Server 2012 ist dieser Speicherort

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)
Hammad Khan
quelle
@AdamLevitt Haben Sie mehrere Versionen von SQL installiert oder zuvor installiert? Sind Sie sicher, dass Sie es an der richtigen Stelle platzieren?
Hammad Khan
1
@hmd, danke ich tue. Das Update wurde in das 2012-Sicherungsverzeichnis exportiert.
Adam Levitt
1
Diese Lösung funktioniert auch in SQL Server 2014. Der Pfad ist C: \ Programme \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King
Das sollte die Antwort sein !!
Axel
Ich hatte ein ähnliches Problem mit MS SQL Express 2016, die Lösung bestand darin, meine MDF-Datei in den folgenden Ordner zu legen: C: \ Programme \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2
13

Ich hatte dieses Problem. Führen Sie einfach SQL Server als Administrator aus

Aref Bozorgmehr
quelle
1
'Als Administrator ausführen' wie in der Benutzerkontensteuerung hat bei mir funktioniert. Ich musste mich nicht als Kontoadministrator anmelden (ich bin jedoch in der Administratorgruppe).
Mike Cheel
1
Ja, habe das Gleiche getan, bin als Administrator gelaufen und alles ist in Ordnung gegangen.
Clyde
12

Ja, es ist richtig. Wenn Sie zuerst Ihr Dienstkonto von sqlserver herausfinden sollten, können Sie es im Task-Manager sehen, wenn Sie gleichzeitig Strg + Alt + Löschen drücken. Dann müssen Sie das Lese- / Schreibrecht von "C" erteilen : \ Murach \ SQL Server 2008 \ Databases "an das Dienstkonto.

Tim
quelle
10

Das Problem ist auf fehlende Berechtigungen für SQL Server zum Zugriff auf die MDF- und LDF-Dateien zurückzuführen. Alle diese Verfahren funktionieren:

  1. Sie können das Benutzerkonto für den Start des MSSQLSERVER-Dienstes direkt ändern, wobei das Benutzerkonto über bessere Berechtigungen für die Dateien verfügt. Versuchen Sie dann, die Datenbank anzuhängen.
  2. Sie können den Benutzer auch der Datei auf der Registerkarte "Sicherheit" der Eigenschaften "mdf- und ldf-Dateien" mit aktivierten Lese- und Schreibberechtigungen zuweisen.
  3. Starten Sie mit dem Windows-Administratorkonto und öffnen Sie SQL Server mit der Option Als Administrator ausführen. Versuchen Sie, sich mit der Windows-Authentifizierung anzumelden, und versuchen Sie nun, die Datenbank anzuhängen.
Chandra Sekhar
quelle
9

Ich löse dieses Problem, indem ich Full controlBerechtigungen für beide .mdfund .ldfDateien für UsersGruppen hinzufüge .

Sagte Abolfazl Fatemi
quelle
5

Für mich wurde es folgendermaßen gelöst: SQL Server Management Studio - Als Administrator anmelden (Ich habe mich als Windows-Authentifizierung angemeldet) - Die MDF-Datei anhängen (Rechtsklick auf Datenbank | Anhängen | Hinzufügen) - Als Administrator abmelden - Als anmelden normaler Benutzer

Drehrad
quelle
4

Die tatsächlichen Serverberechtigungen spielen an dieser Stelle keine Rolle. alles sieht ok aus SQL Server selbst benötigt Ordnerberechtigungen.
Abhängig von Ihrer Version können Sie SERVERNAME $ MSSQLSERVER-Berechtigungen hinzufügen, um Ihren Ordner zu berühren. Andernfalls muss es sich im Standardverzeichnis BACKUP befinden (entweder dort, wo Sie es installiert haben, oder standardmäßig in c: \ programfiles (x) \ MSSQL \ BACKUP).

Claudia
quelle
2

Selbst wenn Sie die folgenden Schritte ausführen, KÖNNTEN Sie dieselbe Fehlermeldung erhalten.

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) 

Ich habe immer noch den Berechtigungsfehler erhalten, aber dann habe ich festgestellt, dass im Bildschirm Anhängen im unteren Bereich NOCH die LOG-Datei angezeigt wurde und die Fehlermeldung dieselbe blieb.

Hoffe das hilft jemandem, der das Gleiche getan hat.

Tom Stickel
quelle
0

Sehr einfache Lösung.

  1. Melden Sie sich mit dem Systemadministrator an
  2. Kopieren Sie Ihre MDF- und LDF-Dateien in "C: \ Programme (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA", wo sich alle anderen Datendateien befinden.
  3. Jetzt anhängen von dort wird es funktionieren
AmitykSharma
quelle
1
Sie sollten keine Daten im Programmdateiverzeichnis speichern. Der Standardspeicherort sollte geändert werden, wenn Sie SQl Server
OrangeKing89
0

Ich habe das Entity Framework in meiner Anwendung verwendet und hatte dieses Problem. Ich habe alle Berechtigungen in Ordnern und Windows-Diensten festgelegt und arbeite nicht. Danach starte ich meine Anwendung als Administrator (Rechtsklick in die Exe-Datei und wähle "Als Administrator ausführen"). Das funktioniert fein.

Ali Yousefi
quelle
0

Wenn Sie diesen Fehler für eine .MDFDatei im APP_DATAOrdner (oder wo immer Sie sie ablegen) für ein Visual Studio-Projekt erhalten, habe ich einfach die Berechtigungen aus dem vorhandenen DATAOrdner hier kopiert (ich verwende SQL Express 2014 zur Unterstützung eine ältere App):

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

(Hinweis: Ihr tatsächlicher Installationspfad kann variieren - insbesondere wenn Ihr Instanzname unterschiedlich ist.)

Doppelklicken Sie DATAzuerst als Administrator auf den Ordner, um sicherzustellen, dass Sie Zugriff haben. Öffnen Sie dann die Eigenschaften des Ordners und ahmen Sie diese für den APP_DATAOrdner nach. In meinem Fall war der vermisste Benutzer MSSQL$SQLEXPRESS2014(weil ich die Instanz benannt habe SQLEXPRESS2014- Ihre kann anders sein). Dies ist auch der Benutzername des SQL Server-Dienstes.

James Wilkins
quelle
0

Aus irgendeinem Grund hat es in meinem Fall nicht geholfen, alle richtigen Berechtigungen festzulegen. Ich hatte eine Datei db.bak, die ich aufgrund des 5(Access is denied.)Fehlers nicht wiederherstellen konnte . Die Datei wurde im selben Ordner wie mehrere andere Sicherungsdateien abgelegt, und alle Berechtigungen waren mit anderen Dateien identisch . Ich konnte alle anderen Dateien außer dieser wiederherstellendb.bak Datei . Ich habe sogar versucht, das SQL Server-Dienstprotokoll für Benutzer zu ändern - immer noch das gleiche Ergebnis. Ich habe versucht, die Datei ohne Wirkung zu kopieren.

Dann habe ich versucht, einfach eine identische Datei durch Ausführen zu erstellen

type db.bak > db2.bak

anstatt die Datei zu kopieren. Und voila es hat funktioniert! db2.bakerfolgreich wiederhergestellt.

Ich vermute, dass einige andere Probleme beim Lesen der Sicherungsdatei fälschlicherweise wie 5(Access is denied.)von MS SQL gemeldet werden.

ps_ttf
quelle
0

Unter Linux ging ich in einen /var/opt/mssql/data/Ordner und öffnete ein Terminal mit sudodann änderte ich meine * .mdf- und * .ldf-Dateiberechtigungen wie folgt, in denen Sie sie durch yourDBIhren Datenbankdateinamen ersetzen und myUserin den aktuell protokollierten Benutzernamen:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Danach wurde es ohne Probleme wieder verbunden.

Muhammad Tayyab
quelle
0

Dies bedeutet, dass der SSMS-Anmeldebenutzer keine Berechtigung für die MDF-Datei hat. So hat es bei mir funktioniert:

Ich hatte das SSMS geöffnet (Als Administrator ausführen) und mich als Administrator angemeldet. Klicken Sie mit der rechten Maustaste auf Anhängen, klicken Sie auf Hinzufügen, wählen Sie die MDF-Datei aus und klicken Sie auf OK. Getan.

Goldfisch
quelle