Używam SQL Server 2008 Developer Edition. Próbowałem dołączyć bazę danych AdventureWorks2008.
Podczas próby dołączenia pojawił się komunikat o błędzie „odmowa dostępu”. Według dziennika zdarzeń pochodziło ono z systemu operacyjnego:
Otwarcie nie powiodło się: nie można otworzyć pliku D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf dla pliku numer 0. Błąd systemu operacyjnego: 5 (odmowa dostępu.).
Pomyślałem „problem z NTFS”, ale System (i ja) mamy modyfikację dostępu do obu plików.
Okazało się, że mogę pomyślnie dołączyć bazę danych, jeśli loguję się jako sa, ale moje konto użytkownika nie będzie działać.
Jestem członkiem lokalnej grupy administratorów na moim komputerze i pełnię rolę sysadmins w wystąpieniu SQL Server.
Masz jakiś pomysł, dlaczego musiałem być zalogowany jako sa?
źródło
Odpowiedzi:
Uruchom SQL Server Management Studio jako administrator. (prawy przycisk -> uruchom jako administrator), który załatwił całą dziwność w moim przypadku.
SQL SRV EXPRESS 2008 R2. System Windows 7
źródło
Dziękuję za wszystkie komentarze. Niektórzy z was pomogli mi znaleźć odpowiedź. Oto co znalazłem:
Był to problem z uprawnieniami NTFS, a nie problem z SQL. Co więcej, wygląda to trochę jak błąd (i jest powtarzalny).
Problem: konto, którego używałem, miało pełną kontrolę uprawnień NTFS do plików mdf i ldf. Miał jednak te uprawnienia poprzez członkostwo w grupie (grupa Administratorzy lokalni miała uprawnienia, a moje konto jest członkiem lokalnych administratorów). (Zweryfikowałem uprawnienia)
Jeśli spróbuję dołączyć, połącz się z SQL Server jako ja (gdzie jestem w grupie administratorów), kończy się to niepowodzeniem z problemem NTFS.
Jeśli jednak przyznam te same uprawnienia do plików, które ma lokalna grupa administracyjna bezpośrednio na moim koncie domeny, mogę dołączyć bez żadnych problemów.
(och, i tak, sprawdziłem grupy lokalne na tym komputerze i zweryfikowałem, że moje konto domeny jest rzeczywiście członkiem lokalnej grupy administratorów).
Wygląda więc na to, że błąd występuje, ponieważ jakiś kod (w SQL Server lub Management Studio) sprawdza uprawnienia, które posiada konto użytkownika, ale nie posuwa się tak daleko, aby sprawdzić uprawnienia grupy, które dziedziczy konto użytkownika.
Brzmi to dla mnie dziwnie, ale mogę to powtarzać w kółko, więc doszedłem do wniosku, że to jest odpowiedź.
Aktualizacja: zgłosiłem to jako błąd: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited
źródło
Chciałbym dodać dodatkowe informacje do opublikowanych odpowiedzi.
Zachowaj ostrożność podczas odłączania bazy danych, ponieważ zalogowany użytkownik systemu Windows staje się jedynym użytkownikiem z uprawnieniami do pliku .mdf! Oryginalne uprawnienia pliku .mdf, które obejmowały użytkownika
SQLServerMSSQLUser$<computer_name>$<instance_name>
i konto Administratorzy, zostaną nadpisane przez dowolnego użytkownika systemu Windows, jako którego jesteś zalogowany (nie przez użytkownika serwera sql). Bum, wszystkie uprawnienia zniknęły. Zrób więc tak, jak powiedzieli inni, kliknij prawym przyciskiem myszy plik .mdf i dwukrotnie sprawdź uprawnienia.Napotkałem ten problem, ponieważ użyłem SSMS do połączenia z bazą danych (nie ma znaczenia, które konto serwera sql) i odłączyłem bazę danych. Po wykonaniu tej czynności mój użytkownik systemu Windows był jedynym, który miał jakiekolwiek uprawnienia do pliku .mdf. Więc później, kiedy próbowałem dołączyć bazę danych za pomocą konta sa, wyrzucał błąd „odmowa dostępu”.
Aby zachować oryginalne uprawnienia, należy przełączyć bazę danych do trybu offline, a następnie odłączyć, a następnie dołączyć w takiej kolejności:
źródło
Dodaj uprawnienia do folderu, w którym znajduje się
.mdf
plik.Sprawdź tę nazwę:
NT Service\MSSQLSERVER
I zmień na
Location
nazwę swojego serwera.źródło
SELECT servicename, service_account FROM sys.dm_server_services
.Ten problem jest spowodowany przez UAC (Kontrola konta użytkownika), prawda? Chociaż Twoje konto użytkownika jest członkiem grupy Administratorzy, UAC w systemie Windows 7 nie pozwala na wykonywanie czynności administracyjnych, chyba że uruchamiasz programy „jako administrator”. To nie jest prawdziwy błąd w SQL Server, Management Studio czy czymkolwiek. (Chociaż prawdopodobnie może znać problem i poprosić o podwyższone uprawnienia zamiast narzekać na „błąd 5”).
źródło
Uruchom SQL Server Management Studio jako administrator. (prawy przycisk -> uruchom jako administrator) działał u mnie z Windows 7 - SQL Server 2008 R2
źródło
Bazę danych SQL2005 można dołączyć w Windows 7 w następujący sposób:
A następnie dołączona baza danych została pomyślnie ukończona.
źródło
Kiedy
sa
logujesz się jako (lub dowolne konto Sql Server), działasz jako konto usługi SQL Server, kiedy jesteś zalogowany jako ty, masz uprawnienia swojego konta. Z jakiegoś powodu nie masz odpowiedniego dostępu do pliku, ale konto usługi ma.źródło
SELECT servicename, service_account FROM sys.dm_server_services
Znalazłem takie rozwiązanie: Kliknij prawym przyciskiem myszy folder, w którym przechowujesz plik .mdf -> kliknij Właściwości -> wybierz kartę Zabezpieczenia, kliknij Edytuj ... i daj mu pełną kontrolę. Mam nadzieję że to pomoże!
źródło
sa
Użytkownik korzysta z konta NTFSSQLServerMSSQLUser$<computer_name>$<instance_name>
iSQLServerSQLAgentUser$<computer_name>$<instance_name>
dostęp do plików bazy danych. Możesz spróbować dodać uprawnienia dla jednego lub obu tych użytkowników.Nie wiem, czy rozwiązuje Twój problem, ponieważ mówisz, że nie masz żadnych problemów z
sa
użytkownikiem, ale mam nadzieję, że to pomoże.źródło
Ze mną - Uruchomienie w oknie 8 - PRAWO kliknij SQL Server Manager Studio -> Uruchom z administratorem. -> załącz bez problemów
źródło
można to naprawić łatwo, ale radykalnie, po prostu przejdź do folderu, w którym zapisałeś plik mdf . wybierz plik-> Kliknij prawym przyciskiem myszy -> kliknij właściwości i nadaj pełne uprawnienia do pliku dla zalogowanego użytkownika Bezpieczeństwo .
źródło
Za każdym razem, gdy napotkałem ten problem, próbowałem dołączyć bazę danych, która znajduje się w innym katalogu niż domyślny katalog bazy danych, który jest skonfigurowany na serwerze SQL.
Zdecydowanie zalecałbym, aby zamiast wykorzystywać uprawnienia do różnych katalogów i kont, po prostu przenieś plik danych do katalogu, który serwer sql oczekuje, że go znajdzie.
źródło
Chciałem tylko dodać te informacje.
http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/
Rozwiązanie
Ten błąd pojawia się, ponieważ dwa różne logowania wykonały operacje odłączania i dołączania. Więc po odłączeniu pliki były własnością pierwszego logowania, ale załączenie nie powiodło się, ponieważ użyty login nie był właścicielem plików mdf i ldf.
Kiedy odłączamy pliki bazy danych, właścicielem staje się osoba, która wykonała polecenie odłącz, więc aby rozwiązać problem, musimy zmienić lub dodać inny login jako właściciel plików mdf i ldf.
Kliknij prawym przyciskiem myszy plik „filename.mdf” i wybierz właściwości, aby sprawdzić uprawnienia pliku mdf. Tutaj widzimy, że tylko jedno konto ma uprawnienia do pliku „nazwa_pliku.mdf”, ponieważ było to konto, które zostało użyte do odłączenia bazy danych.
Aby rozwiązać ten problem, kliknij przycisk Dodaj ..., aby dodać inny login lub inny wymagany login i nadaj loginowi pełną kontrolę. Powinieneś to zrobić również dla pliku „ldf”. Po wykonaniu tego zadania kliknij przycisk OK. (Uwaga w przypadku innych wersji systemu operacyjnego możesz mieć opcję Edytuj, kliknij ją najpierw, a zobaczysz opcję Dodaj ...).
źródło
Co jest warte dla każdego, kto ma konkretną odmianę tego problemu, którą miałem:
Poprzez menu kontekstowe folderu App_data utworzyłem bazę danych SQL Express do celów debugowania. Ciąg połączenia (używany przez NHibernate) był następujący:
To spowodowało ten sam błąd „Odmowa dostępu” w pliku bazy danych. Próbowałem dać różnym użytkownikom pełną kontrolę nad folderem i plikami, w pewnym momencie nawet „Wszystkim”. Nic nie pomogło, więc ponownie usunąłem dodane uprawnienia.
Ostatnim rozwiązaniem było otwarcie Eksploratora serwera w programie Visual Studio, a następnie połączenie się z MDF i ponowne odłączenie. Po tym, jak to zrobiłem, moja aplikacja internetowa mogła uzyskać dostęp do bazy danych.
PS. Podziękowania należą do tego wpisu na blogu, który znalazłem podczas wyszukiwania tego konkretnego problemu w Google, wywołując pomysł dołączenia / odłączenia bazy danych w celu rozwiązania problemu.
źródło
Przeniosłem bazę danych mdf z domyślnego folderu danych do mojego folderu app_data asp.net i napotkałem ten problem, próbując ponownie ustawić bazę danych w trybie online.
Porównałem ustawienia zabezpieczeń innych baz danych plików w pierwotnej lokalizacji z przeniesionymi plikami i zauważyłem, że MSSQL $ SQLEXPRESS nie otrzymał uprawnień do plików w ich nowej lokalizacji. Dodałem Pełną kontrolę dla "NT SERVICE \ MSSQL $ SQLEXPRESS" (musi zawierać tę NT SERVICE) i to jest dobrze podłączone.
Wygląda na to, że oryginalny folder Data ma te uprawnienia, a pliki je dziedziczą. Przenieś pliki i oczywiście podziały dziedziczenia.
Sprawdziłem plik mdf innego projektu, który utworzyłem bezpośrednio w jego folderze app_data. nie ma uprawnień MSSQL $ SQLEXPRESS. Hmmm. Zastanawiam się, dlaczego SQL Express lubi jedną, a drugą nie?
źródło
To brzmi jak uprawnienia NTFS. Zwykle oznacza to, że konto usługi SQL Server ma dostęp tylko do odczytu do pliku (należy pamiętać, że SQL Server używa tego samego konta usługi do uzyskiwania dostępu do plików bazy danych niezależnie od sposobu logowania). Czy na pewno nie zmieniłeś uprawnień do folderu między zalogowaniem się jako siebie a zalogowaniem się jako sa? Jeśli odłączysz się i spróbujesz ponownie, czy nadal występuje ten sam problem?
źródło
Windows authenticated user
pomoże nam usunąć uprawnienia do plików bazy danych. (W tym przypadku wystąpienie MS SQLServer na dysku z systemem operacyjnym Windows).Miałem ten sam problem podczas dołączania bazy danych. To nie był problem z SQL, to był problem z kontem. Przejdź do panelu sterowania / Ustawienia kontroli konta użytkownika / Ustaw „nigdy nie powiadamiaj”. Na koniec uruchom ponownie komputer i zadziałało.
źródło
Załączam plik mdf, klikając prawym przyciskiem myszy bazę danych i usuwając plik dziennika AdventureWorks2012_Data_log.ldf w kreatorze. Plik mdf został umieszczony w następującej lokalizacji
Powyższa metoda pomogła mi rozwiązać problem.
źródło
Czytałem tę stronę i mają tam interesujące zdanie:
Oczywiście mają też to:
Więc jeśli jesteś administratorem domeny i jesteś członkiem grupy SQL 'sysadmin', świat powinien być twoim skorupiakiem.
Oczywiście, według Microsoftu, powinieneś rzucić okiem na te dwie strony:
Łącze do wymagań wstępnych bazy danych
Link do instalowania baz danych
Jesteś niegrzeczny i próbujesz dołączyć je ręcznie :) Ale poważnie, czy masz wszystkie wymagania wstępne dla bazy danych AdventureWorks2008?
Podejrzewam, że to tylko kolejny przypadek dziwactwa / krawędzi Microsoftu, ale mogę się mylić.
źródło
zmień na FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG
źródło
Mam ten błąd jak sa. W moim przypadku bezpieczeństwo bazy danych nie miało znaczenia. Dodałem wszystkim pełną kontrolę do plików mdf i ldf, a załączenie poszło dobrze.
źródło
Miałem ten sam problem w VS 2019. Jeśli ktoś nadal boryka się z tym samym problemem, upewnij się, że masz / wykonaj następujące czynności:
źródło
W rzeczywistości są to uprawnienia NTFS i dziwny błąd w SQL Server. Nie jestem pewien, czy powyższy raport o błędzie jest dokładny lub może odnosić się do dodatkowego błędu.
Aby rozwiązać ten problem w systemie Windows 7, normalnie uruchomiłem SQL Server Management Studio (nie jako administrator). Następnie próbowałem dołączyć plik MDF. W trakcie tego procesu użyłem interfejsu użytkownika zamiast wklejać w ścieżce. Zauważyłem, że ścieżka została mi odcięta. Dzieje się tak, ponieważ użytkownik MS SQL Server (SQLServerMSSQLUser $ machinename $ SQLEXPRESS) dodany przez oprogramowanie nie ma uprawnień dostępu do folderu (w tym przypadku folderu znajdującego się głęboko w moich własnych folderach użytkownika).
Wklejanie ścieżki i kontynuowanie powoduje powyższy błąd. Tak więc - nadałem użytkownikowi MS SQL Server uprawnienia do odczytu, zaczynając od pierwszego katalogu, z którego został odebrany (mój folder użytkownika). Następnie natychmiast anulowałem operację propagacji, ponieważ może to zająć wieczność, i ponownie zastosowałem uprawnienia do odczytu do następnego niezbędnego podfolderu i pozwoliłem, aby rozprzestrzenił się w pełni.
Na koniec nadałem użytkownikowi MS SQL Server uprawnienia Modify do plików .mdf i .ldf dla bazy danych.
Mogę teraz dołączyć do plików bazy danych.
źródło
Jeśli korzystasz z SQL Server 2012, możesz uzyskać ten błąd, próbując dołączyć starszą wersję pliku mdf. ex plik mdf z serwera sql 2008.
źródło
Rozwiązałem problem, po prostu przenosząc plik .mdf, który chcesz dołączyć do folderu publicznego, w moim przypadku przeniosłem go do folderu users / public. Następnie stamtąd podpinam bez problemu. Mam nadzieję że to pomoże.
źródło
Dla tych, którzy nie mogli rozwiązać problemu za pomocą innych rozwiązań tutaj, następująca poprawka działała dla mnie:
Przejdź do folderu „DANE” w instalacji programu SQL Server, kliknij prawym przyciskiem myszy, właściwości, kartę zabezpieczeń i dodaj uprawnienia pełnej kontroli dla użytkownika „USŁUGA SIECIOWA”.
http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/
(Powyższy link dotyczy SQL 2005, ale to naprawiło dla mnie instalację SQL 2008 R2).
Dodatkowe informacje: Ten problem pojawił się po wymianie dodatkowego dysku twardego (na którym była włączona instalacja SQL). Skopiowałem wszystkie pliki i przywróciłem oryginalną literę dysku na nowy dysk twardy. Jednak uprawnienia zabezpieczeń nie zostały skopiowane. Myślę, że następnym razem użyję lepszej metody kopiowania danych.
źródło
W moim przypadku to, co rozwiązało problem, to:
źródło
Skopiuj bazę danych do innego folderu i dołącz lub zaloguj się do serwera SQLServer za pomocą „uwierzytelniania systemu Windows”
źródło
Miałem ten sam problem podczas ponownego dołączania bazy danych po jej odłączeniu i przeniesieniu plików ldf i mdf z dysku C do F.
Aby to naprawić, musiałem dodać do obu plików nazwę główną OWNER RIGHTS i dać mu pełną kontrolę nad nimi na karcie Zabezpieczenia w oknie dialogowym Właściwości.
źródło