Błąd systemu operacyjnego SQL Server 5: „5 (odmowa dostępu.)”

153

Zaczynam się uczyć SQL i mam książkę, która zawiera bazę danych do pracy. Poniższe pliki znajdują się w katalogu, ale problem polega na tym, że po uruchomieniu zapytania wyświetla mi się ten błąd:

Msg 5120, poziom 16, stan 101, wiersz 1 Nie można otworzyć pliku fizycznego „C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf”. Błąd systemu operacyjnego 5: „5 (Odmowa dostępu.)”.

   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

W książce autor mówi, że powinno działać, ale w moim przypadku nie działa. Szukałem, ale nie wiem dokładnie w czym jest problem, więc zamieściłem to pytanie.

dijai jijfs
źródło
Jeśli plik kopii zapasowej już istnieje, upewnij się, że nie ma atrybutu „tylko do odczytu”, a ponadto upewnij się, że usługa ma uprawnienia do zapisu.
jumxozizi

Odpowiedzi:

133

Konto usługi aparatu bazy danych programu SQL Server musi mieć uprawnienia do odczytu / zapisu w nowym folderze.

Sprawdź to

Aby to naprawić, wykonałem następujące czynności:

Dodano grupę administratorów do uprawnień bezpieczeństwa plików z pełną kontrolą nad plikiem danych (S :) i plikiem dziennika (T :).

Dołączona baza danych i działa dobrze.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Rahul Tripathi
źródło
4
Czasami serwer SQL będzie działał w innej grupie użytkowników niżAdministrators Group
JDandChips,
57
Pomocne może być również uruchomienie programu SQL Server Management Studio jako administratora, a nie tylko usługi serwera.
david.barkhuizen
1
Dla mnie rozwiązanie w poniższym linku zadziałało: stackoverflow.com/a/19061137/365188
Ozair Kafray
3
Dla mnie zmiana konta usługi SQL Server Agent Service na system lokalny zadziałała.
singhm0077
22
Jeśli Twoja instancja SQL Server działa na koncie usługi (np. Moje jest MSSQL$SQLEXPRESS), może nie być oczywiste, że musisz dodać konto do listy uprawnień do folderów jako:NT Service\MSSQL$SQLEXPRESS
Brian Lacy
109

Stary post, ale oto krok po kroku, który działał dla SQL Server 2014 działającego pod Windows 7:

  • Panel sterowania ->
  • System i bezpieczeństwo ->
  • Narzędzia administracyjne ->
  • Usługi ->
  • Kliknij dwukrotnie SQL Server (SQLEXPRESS) -> kliknij prawym przyciskiem myszy Właściwości
  • Wybierz zakładkę Logowanie
  • Wybierz „Lokalne konto systemowe” (domyślnie było to jakieś dziwne konto systemu Windows)
  • -> OK
  • kliknij prawym przyciskiem, Stop
  • kliknij prawym przyciskiem myszy, Start

Voilá!

Myślę, że ustawienie konta logowania mogło być opcją podczas instalacji, ale jeśli tak, nie było to ustawienie domyślne i łatwo było je przeoczyć, jeśli nie byłeś jeszcze świadomy tego problemu.

MickeyfAgain_BeforeExitOfSO
źródło
5
Wypróbowałem wiele opcji, ale Twoja odpowiedź działa dobrze. Dzięki mickeyf.
vicky
2
Działa również dla SQL Server 2014 pod Win 10. Dzięki.
Johan Foley,
7
-1 Takie postępowanie jest sprzeczne z całą ideą skonfigurowania tego użytkownika w pierwszej kolejności. Jest to funkcja zabezpieczająca, a robienie tego pozwala ją omijać.
NullUserException,
2
WOW… Nie mogę uwierzyć, że ludzie po prostu wskoczyli w tę „odpowiedź”… To może spowodować duży problem z bezpieczeństwem… W przeciwnym razie nie byłoby powodu, aby ustawić tego użytkownika na początku, prawda? W każdym razie jest to „rozwiązanie” dla osób, które nie traktują tego jako problemu bezpieczeństwa w swoich przypadkach.
curiousBoy
2
Każdy, kto uważa, że ​​bezpieczeństwo jest ważniejsze niż wykonanie jakiejś pracy, może po prostu wyłączyć swój serwer SQL!
Ivan,
44

Aby obejść problem odmowy dostępu, uruchomiłem SSMS jako administrator, co pozwoliło mi dołączyć bazę danych z mojego dysku lokalnego. Baza danych została utworzona w innej instancji SQL i Windows.

JayKayOf4
źródło
3
to było to dla mnie ... Po prostu patrzę na całkowicie lokalną konfigurację i mam ten problem w systemie Windows 10 Home, a wcześniej sam zrobiłem „właściciela” mdf i ldf z innego powodu - może istotnego
Mike M
3
U mnie to też działa. Używam Windows 10 i Microsoft SQL Server 2012. Uruchomiłem SQL Management Studio jako administrator, a następnie mogę dołączyć bazę danych Adventure Work Sample.
arsho,
1
Rozwiązało to również problem z systemem Windows 10 Pro podczas uruchamiania w środowisku domeny roboczej.
PerPlexSystem,
To samo - Domain Env, SSMS 2017.x, Win10 Pro. Odłączony od innej maszyny i dołączony do nowej maszyny.
TravisWhidden
44

Jest to problem związany z systemem Windows, w którym SQL Server nie ma odpowiednich uprawnień do folderu zawierającego plik .bak i stąd ten błąd.

Najłatwiejszym rozwiązaniem jest skopiowanie pliku .bak do domyślnej lokalizacji kopii zapasowej SQL, która ma wszystkie niezbędne uprawnienia. Nie musisz majstrować przy niczym innym. W programie SQL SERVER 2012 ta lokalizacja to

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
źródło
@AdamLevitt Czy masz zainstalowanych lub wcześniej zainstalowanych wiele wersji SQL? Czy na pewno umieszczasz go we właściwej lokalizacji?
Hammad Khan
1
@hmd, dziękuję. Poprawka polegała na wyeksportowaniu do katalogu kopii zapasowych z 2012 roku.
Adam Levitt
1
To rozwiązanie działa również w SQL Server 2014. Ścieżka to C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King
To powinna być odpowiedź !!
Axel
Podobny problem miałem z MS SQL Express 2016, rozwiązaniem było umieszczenie mojego pliku .mdf w folderze: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2
13

Miałem ten problem. Po prostu uruchom SQL Server jako administrator

Aref Bozorgmehr
źródło
1
„Uruchom jako administrator” jak w UAC zadziałało dla mnie. Nie musiałem logować się jako administrator konta (jestem jednak w grupie administratorów).
Mike Cheel
1
Tak, zrobiłem to samo, uruchomiłem jako administrator i wszystko poszło dobrze.
Clyde,
12

Tak, zgadza się. Najpierw powinieneś znaleźć swoje konto usługi sqlserver, możesz je zobaczyć w Menedżerze zadań, naciskając jednocześnie ctrl + alt + delete; Następnie musisz nadać uprawnienie do odczytu / zapisu „C : \ Murach \ SQL Server 2008 \ Databases ”do konta usługi.

Tim
źródło
10

Problem wynika z braku uprawnień dla SQL Server do dostępu do plików mdf i ldf. Wszystkie te procedury będą działać:

  1. możesz bezpośrednio zmienić konto użytkownika startowego usługi MSSQLSERVER, używając konta użytkownika, który ma lepsze uprawnienia do plików. Następnie spróbuj dołączyć bazę danych.
  2. Lub możesz przypisać użytkownika do pliku na karcie bezpieczeństwa we właściwościach plików mdf i ldf z zaznaczonymi uprawnieniami do odczytu i zapisu.
  3. Uruchom z kontem administratora Windows i otwórz SQL Server z opcją Uruchom jako administrator i spróbuj zalogować się z uwierzytelnianiem Windows, a teraz spróbuj dołączyć bazę danych.
Chandra Sekhar
źródło
9

Rozwiązuję ten problem, dodając Full controluprawnienia dla obu .mdfi .ldfplików dla Usersgrupy.

Sayed Abolfazl Fatemi
źródło
5

U mnie rozwiązano to w następujący sposób w SQL Server Management studio -Zaloguj się jako admin (zalogowałem się jako uwierzytelnianie systemu Windows) -Załącz plik mdf (kliknij prawym przyciskiem Baza danych | dołącz | Dodaj) -Zaloguj się jako administrator -Zaloguj się jako zwykły użytkownik

RotatingWheel
źródło
4

W tym momencie faktyczne uprawnienia serwera nie będą miały znaczenia; wszystko wygląda dobrze. Sam SQL Server wymaga uprawnień do folderów.
w zależności od wersji możesz dodać uprawnienia SERVERNAME $ MSSQLSERVER, aby dotknąć swojego folderu. W przeciwnym razie musi znajdować się w domyślnym katalogu BACKUP (albo tam, gdzie go zainstalowałeś, albo domyślnie c: \ programfiles (x) \ MSSQL \ BACKUP.

Claudia
źródło
2

Nawet jeśli wykonasz poniższe kroki, MOŻESZ otrzymać ten sam komunikat o błędzie.

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) 

Nadal mam błąd uprawnień, ale potem zauważyłem, że na ekranie Dołącz w dolnej sekcji NADAL pokazywał plik LOG, a komunikat o błędzie pozostał ten sam.

Mam nadzieję, że pomoże to komuś, kto zrobił to samo.

Tom Stickel
źródło
0

Bardzo proste rozwiązanie.

  1. Zaloguj się jako administrator systemu
  2. skopiuj swoje pliki mdf i ldf do „C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA”, gdzie wszystkie inne pliki danych są odtwarzane.
  3. Teraz podłącz stamtąd to zadziała
AmitykSharma
źródło
1
Nie należy przechowywać danych w katalogu plików programu. Domyślną lokalizację należy zmienić po zainstalowaniu serwera
SQl
0

Użyłem Entity Framework w mojej aplikacji i miałem ten problem, ustawiłem dowolne uprawnienia w folderach i usługach systemu Windows i nie działają, po czym uruchamiam aplikację jako administrator (kliknij prawym przyciskiem myszy w pliku exe i wybierz "uruchom jako administrator") i to działa w porządku.

Ali Yousefi
źródło
0

Jeśli pojawi się ten błąd w .MDFpliku w APP_DATAfolderze (lub gdziekolwiek go umieścisz) dla projektu Visual Studio, sposób, w jaki to zrobiłem, to po prostu skopiowanie uprawnień z istniejącego DATAfolderu tutaj (używam SQL Express 2014 do obsługi starsza aplikacja):

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

(uwaga: Twoja rzeczywista ścieżka instalacji jest różna - zwłaszcza jeśli nazwa Twojej instancji jest inna)

DATANajpierw kliknij dwukrotnie folder jako administrator, aby upewnić się, że masz dostęp, a następnie otwórz właściwości folderu i wykonaj to samo dla APP_DATAfolderu. W moim przypadku brakującym użytkownikiem był MSSQL$SQLEXPRESS2014(bo nazwałem instancję SQLEXPRESS2014- Twój może być inny). Tak się składa, że ​​jest to również nazwa użytkownika usługi SQL Server.

James Wilkins
źródło
0

Z jakiegoś powodu ustawienie wszystkich poprawnych uprawnień nie pomogło w moim przypadku. Miałem plik db.bak, którego nie mogłem przywrócić z powodu 5(Access is denied.)błędu. Plik został umieszczony w tym samym folderze, co kilka innych plików kopii zapasowych, a wszystkie uprawnienia były identyczne jak w przypadku innych plików. Udało mi się przywrócić wszystkie inne pliki oprócz tegodb.bak pliku. Próbowałem nawet zmienić użytkownika logowania do usługi SQL Server - wciąż ten sam wynik. Próbowałem skopiować plik bez skutku.

Następnie próbowałem po prostu utworzyć identyczny plik, wykonując

type db.bak > db2.bak

zamiast kopiować plik. I voila, zadziałało! db2.bakprzywrócone pomyślnie.

Podejrzewam, że inne problemy z odczytem pliku kopii zapasowej mogą być błędnie zgłaszane, jak 5(Access is denied.)w MS SQL.

ps_ttf
źródło
0

W Linuksie poszedłem do /var/opt/mssql/data/folderu i otworzyłem terminal, a sudonastępnie zmieniłem moje uprawnienia do plików * .mdf i * .ldf, jak poniżej, w których zastępujesz yourDBnazwę pliku bazy danych i myUseraktualnie zalogowaną nazwę użytkownika:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Następnie został ponownie podłączony bez żadnego problemu.

muhammad tayyab
źródło
0

Oznacza to, że użytkownik logowania SSMS nie ma uprawnień do pliku .mdf. Tak to działa dla mnie:

Otworzyłem SSMS (Uruchom jako administrator) i zaloguj się jako administrator, kliknij prawym przyciskiem myszy w bazie danych, dołącz, kliknij dodaj, wybierz plik .mdf, kliknij OK. Gotowe.

Złota Rybka
źródło