Odmowa dostępu podczas dołączania bazy danych


146

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?


Czy plik MDF jest przypadkowo zaszyfrowany?
Brettski

Nie - prawdziwą ciekawostką dla mnie jest to, że działa dobrze, jeśli loguję się jako sa (używając Management Studio), ale nie działa, jeśli używam konta lokalnego administratora. Moje konto jest administratorem, administratorem domeny i jest to konto, na które byłem zalogowany, kiedy instalowałem SQL Server (podczas instalacji była opcja, aby moje obecne konto było administratorem systemu, i zrobiłem to).
JMarsch,

1
Tak działa UAC w W7, nic dziwnego.
Al Kepp,

@AlKepp Nie - to nie jest sprawa UAC. Samo zalogowanie się, aby rozwiązać problem (konto serwera SQL, nie ma nic wspólnego z UAC). Ponadto, będąc członkiem lokalnej grupy administratorów, otrzymuję uprawnienia - nie muszę ich zwiększać, aby moje poświadczenia usługi AD działały.
JMarsch

Odpowiedzi:


162

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


5
Uruchamianie Management Studio jako administrator NIE działa dla mnie. Ten błąd występuje podczas próby uruchomienia usługi systemu Windows.
nuzzolilo

9
Uruchomienie jako administrator to pierwszy krok. Drugim krokiem jest logowanie do programu SQL Server za pomocą uwierzytelniania systemu Windows. (Ta metoda zadziałała!)
Furkan Ekinci

3
Dla mnie też zadziałało. Nie można wyrazić słowami, jak męczące i frustrujące są monity o pozwolenie i błędy w systemie Windows. JESTEM ADMINISTRATOREM!
David Masters

Dla mnie też zadziałało. Na początku nie sądziłem, że to zadziała, ponieważ SSMS jest tylko klientem interfejsu użytkownika. Pomyślałem, że usługa musi być uruchomiona jako administrator. Ale wystarczy uruchomić SSMS jako administrator.
Luke Vo

2
Dla mnie też zadziałało. SQL Server 2019, SSMS 18.4
Ryan Thomas

104

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


104
Jeśli, tak jak ja, używasz systemu Windows 7, będziesz musiał uruchomić SQL Server Management Studio jako administrator, aby uniknąć tego błędu.
Antony,

4
Reprodukowane na Win7 Pro przy użyciu SS2008 Express. Ten sam problem dla sqlcmd i SSMS. == Meldung '5120', Ebene '16', Status '101', Server 'DAGO \ SQLEXPRESS', Zeile 1 - 'Die physische Datei' D: \ data \ mssql \ drei.mdf 'kann nicht geöffnet werden. Betriebssystemfehler 5: '5 (Zugriff verweigert) == Przyznanie pełnego dostępu użytkownikowi (który jest członkiem lokalnej grupy administracyjnej, która ma dostęp) rozwiązuje problem. Ponadto uruchomienie sqlcmd (lub, jak sądzę, SSMS) jako administrator nie powoduje tego błędu.
Lumi

1
Anthony Highsky ma odpowiedź. Wystarczy, że uruchomisz Management Studio jako administrator.
James

Dla mnie ten sam problem i rozwiązanie. 2008R2, Win 7 itd. Po prostu dodałem siebie bezpośrednio do listy zabezpieczeń i zadziałało. Przypuszczam, że SQL Server może je odczytać po dołączeniu, ale nie pod moimi poświadczeniami podczas dołączania?
Andrew Backer,

4
Uruchamianie Management Studio jako administrator NIE działa dla mnie. Ten błąd występuje podczas próby uruchomienia usługi systemu Windows.
nuzzolilo

20

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:

USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO

-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO

1
Dzięki za to! Myślę, że znacznie łatwiej jest to zrobić dobrze, jeśli jesteś również zalogowany przy użyciu konta uwierzytelnionego SQL Server z uprawnieniami administratora serwera.
William Rose

Niestety, to mi nie pomaga, jeśli pierwotnie utworzyłem bazę danych jako `` sa '' zamiast jako użytkownik systemu Windows
David Gardiner

„Zachowaj ostrożność podczas odłączania bazy danych”. Powiedz SSMS, aby był ostrożny. Moje problemy wystąpiły, ponieważ użycie SSMS polecenia Kopiuj bazę danych nie powiodło się, pozostawiając mnie w mieście szybu bez wyjaśnienia
Alan Macdonald,

18

Dodaj uprawnienia do folderu, w którym znajduje się .mdfplik.

Sprawdź tę nazwę: NT Service\MSSQLSERVER

I zmień na Locationnazwę swojego serwera.


5
Aby znaleźć dokładną nazwę konta, ponieważ może się różnić od instancji do instancji, uruchom to: SELECT servicename, service_account FROM sys.dm_server_services.
Arve Systad

13

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”).


11

Uruchom SQL Server Management Studio jako administrator. (prawy przycisk -> uruchom jako administrator) działał u mnie z Windows 7 - SQL Server 2008 R2


1
Ta odpowiedź powinna zostać przyjęta za. Uruchomienie SSMS jako Administrator jest obejściem, które replikuje tę odpowiedź. Firma Microsoft zgłasza to jako „oczekiwane zachowanie” tutaj: link
FreeText

Czy to nie to samo, co odpowiedź MandoMando?
mortb

10

Bazę danych SQL2005 można dołączyć w Windows 7 w następujący sposób:

start menu >
 all program >
  Microsoft sql server 2005 >
   sql server management studio >
    right click >
     run as administrator >
      click ok

A następnie dołączona baza danych została pomyślnie ukończona.


To działało z SQL Server 2016 z Management Studio 2008 R2 w systemie Windows 10 :)
par

9

Kiedy salogujesz 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.


Problem z NTFS był pierwszą rzeczą, o której również pomyślałem, ale to chyba nie jest problem: jestem członkiem lokalnej grupy administratorów i sprawdziłem, że administratorzy mają uprawnienia „pełnej kontroli” do plików mdf i ldf . Jestem również właścicielem plików - właśnie utworzyłem katalog i sam skopiowałem pliki mdf / ldf do ich lokalizacji.
JMarsch,

@JMarsch: @Nick mówi, że „sa” ma zestaw PRAW DO SERWERA SQL - nie NTFS - których nie ma Twoje konto.
Trevoke

@Trevoke: Jestem z tobą. W takim przypadku jakie prawa muszę przypisać do mojego konta użytkownika? (Jestem już przypisany do roli sysadmin)
JMarsch

1
Stara odpowiedź, ale dla ludzi takich jak ja pięć minut temu: możesz znaleźć dokładną nazwę użytkownika usługi, uruchamiającSELECT servicename, service_account FROM sys.dm_server_services
Arve Systad,

6

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!


5

saUżytkownik korzysta z konta NTFS SQLServerMSSQLUser$<computer_name>$<instance_name>i SQLServerSQLAgentUser$<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 saużytkownikiem, ale mam nadzieję, że to pomoże.


5

Ze mną - Uruchomienie w oknie 8 - PRAWO kliknij SQL Server Manager Studio -> Uruchom z administratorem. -> załącz bez problemów


5

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 .


3

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.


W wielu sytuacjach zgodziłbym się z twoim punktem, ale w przypadku serwera SQL często chcesz mieć możliwość zlokalizowania swoich baz danych na różnych wrzecionach lub woluminach w celu zapewnienia skalowalności. W rzeczywistości powszechną praktyką jest umieszczanie dziennika transakcji na oddzielnym trzpieniu z bazy danych w celu poprawy przepustowości transakcji.
JMarsch,

@JMarsch: Tak ... katalogi są faktycznie konfigurowalne poprzez Właściwości serwera> zakładka Ustawienia bazy danych dla domyślnych lokalizacji danych i dzienników ...
NotMe Kwietnia

To obejmuje wartości domyślne, ale to tylko domyślne. Całkowicie dopuszczalne jest umieszczenie dbs w innym miejscu i nie jest to nawet rzadkie, jeśli serwer zarządza więcej niż jedną aktywnie używaną bazą danych.
JMarsch,

Mam ten sam problem nawet z domyślnym katalogiem serwera sql: c: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SPATIAL_IM \ MSSQL \ DATA \ mydb.mdf na win7.
goku_da_master

3

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 ...).


Zmieniłem moje połączenie w SSMS, aby pasowało do użytkownika, który wykonał odłączenie, i mogłem wykonać dołączenie.
glitzsfa

2

Co jest warte dla każdego, kto ma konkretną odmianę tego problemu, którą miałem:

  • SQL Express 2008
  • Visual Studio 2010 Premium

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:

Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;

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.


2

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?


To rozwiązanie działało u mnie w systemie Windows 10 i SQL Server 2017 podczas przenoszenia pliku dziennika na oddzielny dysk. W moim przypadku nazwą użytkownika było „NT SERVICE \ MSSQLSERVER”
John Hanley,

1

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?


W moim przypadku nie - powtarzałem to kilka razy, aby się upewnić. Problem polegał na tym, że moje konto miało dostęp do plików tylko na poziomie pośrednim - byłem członkiem grupy Domain Admin. Administrator domeny był członkiem grupy Administratorzy lokalni na komputerze, a administratorzy lokalni (i system) mieli pełną kontrolę nad folderem. (więc były 2 poziomy pośrednictwa grupowego). Jeśli przypisałem sobie uprawnienia bezpośrednio, zadziałało, jeśli je usunąłem, nadal mogłem kopiować / usuwać pliki z Explorere itp., Ale SQL Server nie mógł ich załadować.
JMarsch

Podczas próby dołączenia bazy danych. Zaloguj się, ponieważ Windows authenticated userpomoże nam usunąć uprawnienia do plików bazy danych. (W tym przypadku wystąpienie MS SQLServer na dysku z systemem operacyjnym Windows).
Do Nhu Vy

1

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.


1

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

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

Powyższa metoda pomogła mi rozwiązać problem.


1

Czytałem tę stronę i mają tam interesujące zdanie:

Uwaga: dodawaj użytkowników do tych ról bardzo selektywnie. Na przykład sysadmin mapuje na dbo w każdej bazie danych i jest odpowiednikiem logowania się przy użyciu konta sa.

Oczywiście mają też to:

Uprawnienia, które są przyznawane użytkownikom i rolom i są specyficzne dla bazy danych. Wszystkie uprawnienia kumulują się z wyjątkiem ODMOWA. Odmowa uprawnienia na poziomie użytkownika lub na poziomie roli zastępuje te same uprawnienia przyznane za pośrednictwem innych członkostw w roli, z wyjątkiem stałej roli serwera sysadmin. (Administrator systemu zachowuje wszystkie uprawnienia, nawet jeśli rola, której jest członkiem, ma uprawnienie ODMOWA).

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ć.


Daj +1, ponieważ Twój komentarz pomógł mi znaleźć odpowiedź. Moje wyniki opublikuję w tym wątku. BTW (byłem "niegrzeczny" z powodu bardzo dziwnych zasad, w których pracuję - baza danych adventureworks jest rozprowadzana jako exe. Nie mogę pobrać plików exe. (Mogę pobrać pliki zip i pliki MSI, więc nie widzę jak filtrowanie exe naprawdę robi cokolwiek innego niż przeszkadza, ale takie są zasady.) W każdym razie mogłem pobrać surowe pliki mdf jako zipy z codeplexu i wtedy natknąłem się na tę małą ciekawość.
JMarsch

1

wprowadź opis obrazu tutaj

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH
GO

zmień na FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH_FORCE_REBUILD_LOG
GO

Dzięki, uratowałeś mi dzień
Shahrokhian

1

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.


1

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:

  1. Powinieneś mieć SQL Express zainstalowany na swoim m / c
  2. Powinien mieć zainstalowany SSDT w VS (w VS 2019 - koniecznie sprawdź ten komponent podczas instalacji) dla poprzednich wersji - musisz dodać ten komponent zewnętrznie
  3. Dodaj „User Instance = True” do łańcucha połączenia
  4. Myślę, że to opcjonalne - otwórz VS i SQL Express w trybie administracyjnym i zaloguj się jako administrator do SQL Express

0

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.


0

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.


Myślę, że ta część była dość oczywista. dobrze byłoby wiedzieć, jak to rozwiązać.
dansan

0

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.


0

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.


0

W moim przypadku to, co rozwiązało problem, to:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008R2] ON
( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG

0

Skopiuj bazę danych do innego folderu i dołącz lub zaloguj się do serwera SQLServer za pomocą „uwierzytelniania systemu Windows”

wprowadź opis obrazu tutaj


0

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.